По планам повторного использования в 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, вероятно, будет самым быстрым, если план соответствует данным для каждого из данных data1, data2 и data3.

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

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

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

Другие вопросы по тегам