Cuda 论cuFFT中的计划重用

Cuda 论cuFFT中的计划重用,cuda,nvidia,cufft,Cuda,Nvidia,Cufft,这似乎是一个简单的问题,但我对袖口的用法不是很清楚 我的问题是:以下哪种实现是正确的 (一) (二) (三) 假设data1、data2和data3的所有数据大小都相同。请忽略语法的正确性。我只需要一个概念性的答案 第三个实现在我看来不正确 我认为这三个都可以发挥作用。方法2可能是最快的,只要计划适合data1、data2和data3中每一个的数据 只要您的转换意图没有改变,您可以根据需要多次重复使用计划。我认为这三项都可以实现。方法2可能是最快的,只要计划适合data1、data2和data3

这似乎是一个简单的问题,但我对袖口的用法不是很清楚

我的问题是:以下哪种实现是正确的

(一)

(二)

(三)

假设
data1
data2
data3
的所有数据大小都相同。请忽略语法的正确性。我只需要一个概念性的答案


第三个实现在我看来不正确

我认为这三个都可以发挥作用。方法2可能是最快的,只要计划适合data1、data2和data3中每一个的数据


只要您的转换意图没有改变,您可以根据需要多次重复使用计划。

我认为这三项都可以实现。方法2可能是最快的,只要计划适合data1、data2和data3中每一个的数据


只要您的转换意图没有改变,您可以重复使用计划任意多次。

作为Robert回答的一个小后续,可以引用《cuFFT指南》中指出的重复使用
cuFFT
计划的可能性:

CUFFT提供了一种简单的配置机制,称为 预先配置内部构建块的计划,以便 对于给定的配置和特定的GPU,转换尽可能低 已选择硬件。然后,当调用执行函数时,实际的转换 按照执行计划进行。这种方法的优点是 用户创建计划时,库保留执行计划所需的任何状态 多次,无需重新计算配置


作为对Robert回答的一个次要跟进,可以引用《cuFFT指南》中指出的重复使用
cuFFT
计划的可能性:

CUFFT提供了一种简单的配置机制,称为 预先配置内部构建块的计划,以便 对于给定的配置和特定的GPU,转换尽可能低 已选择硬件。然后,当调用执行函数时,实际的转换 按照执行计划进行。这种方法的优点是 用户创建计划时,库保留执行计划所需的任何状态 多次,无需重新计算配置


在选项2中,可以使用createPlan3D()创建计划并根据需要多次使用它吗?是的,您可以重复使用计划在选项2中,可以使用createPlan3D()创建计划并根据需要多次使用它吗?是的,您可以重复使用计划谢谢您指出这一点+谢谢你,但我接受罗伯特·克罗维拉的回答,因为他的回答是第一个。谢谢你指出这一点+我同意你的看法,但我接受罗伯特·克罗维拉的回答,因为他的回答是第一个。
// called in a loop
cufftPlan3d (plan1, x, y, z) ;
cufftexec (plan1, data1) ;
cufftexec (plan1, data2) ;
cufftexec (plan1, data3) ;
destroyplan(plan1)    
init() //called only one time in application
{
    cufftPlan3d (plan1, x, y, z) ;
}
exec () //called many times with data changing size remains same
{
    cufftexec (plan1, data1) ;
    cufftexec (plan1, data2) ;
    cufftexec (plan1, data3) ;
}

deinit() //called only one time in application
{    
    destroyplan(plan1)    
}
 cufftPlan3d (plan1, x, y, z) ;
 cufftexec (plan1, data1) ;
 destroyplan(plan1) 

 cufftPlan3d (plan2, x, y, z) ;
 cufftexec (plan2, data2) ;
 destroyplan(plan2) 

 ....
  ...