2013-09-24 2 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) 

.... 
    ... 

Предположим, все размеры данных data1, data2 и data3 одинаковы. Пожалуйста, проигнорируйте правильность синтаксиса. Мне просто нужен концептуальный ответ.

Третья реализация не выглядит правильно мне ...

ответ

2

Я думаю, что все 3 может быть сделано, чтобы работать. Метод 2, вероятно, будет самым быстрым, если план соответствует данным для каждого из данных1, data2 и data3.

Вы можете повторно использовать план столько раз, сколько хотите, до тех пор, пока ваше намерение трансформирования не изменится.

+0

В Варианте 2 это нормально, чтобы создать план с помощью createPlan3D() и использовать его столько раз, сколько требуется? –

+0

Да, вы можете повторно использовать планы –

3

В качестве небольшого наблюдения в ответ Роберта, это может быть полезно процитировать, что возможность многократного использования cuFFT планов указывается в CUFFT руководстве:

CUFFT обеспечивает простой механизм настройки под названием в планировать, чтобы предварительно сконфигурировать внутренние строительные блоки таким образом, чтобы время выполнения преобразования было как можно ниже для данной конфигурации и выбранного оборудования GPU . Затем, когда вызывается функция выполнения, фактическое преобразование происходит по плану выполнения. Преимущество этого подхода заключается в том, что после того, как пользовательсоздает план, библиотека сохраняет любое состояние, необходимое для выполнения плана несколько раз без пересчета конфигурации.

+0

Спасибо, что указали это. +1 для вас, но я принимаю ответ Роберта Кровеллы, поскольку его ответ был первым. –

Смежные вопросы