关于计划在cuFFT中重用

时间:2013-09-24 16:04:09

标签: cuda nvidia cufft

这似乎是一个简单的问题,但cufft使用对我来说不是很清楚。

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

1)

// called in a loop
cufftPlan3d (plan1, x, y, z) ;
cufftexec (plan1, data1) ;
cufftexec (plan1, data2) ;
cufftexec (plan1, data3) ;
destroyplan(plan1)    

2)

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)    
}

3)

 cufftPlan3d (plan1, x, y, z) ;
 cufftexec (plan1, data1) ;
 destroyplan(plan1) 

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

 ....
  ...

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

第三种实现对我来说看起来不正确......

2 个答案:

答案 0 :(得分:3)

作为罗伯特答案的次要跟进,引用在CUFFT指南中指出重用cuFFT计划的可能性可能是有用的:

  

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

答案 1 :(得分:2)

我认为所有3个都可以使用。方法2可能是最快的,只要计划适合data1,data2和data3中的每一个的数据。

您可以根据需要多次重复使用计划,只要您的转换意图不会发生变化。