2013-09-24 39 views
1

這可能看起來像一個簡單的問題,但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

我認爲所有3可以由工作。只要計劃適合每個data1,data2和data3的數據,方法2可能會最快。

只要您的轉換意向不變,您可以隨意多次重用計劃。

+0

在選項2中可以使用createPlan3D()創建計劃並根據需要多次使用它? –

+0

是的,你可以重複使用計劃 –

3

作爲未成年人後續羅伯特的答案,也可能是有用的引述重用cuFFT計劃的可能性指出CUFFT指南:

CUFFT提供了一個名爲 一個簡單的配置機制計劃預先配置內部構建塊,以便對給定配置和特定GPU選擇硬件的變換的執行時間儘可能低。然後,當執行函數被調用時,實際變換 發生在執行計劃之後。這種方法的優點是,一旦用戶創建了一個計劃,該庫就會保留多次執行計劃 所需的任何狀態,而無需重新計算配置。

+0

謝謝你指出。 +1,但我接受Robert Crovella的回答,因爲他的回答是第一位的。 –