Как вы используете пакетный режим CUFFT? - PullRequest
4 голосов
/ 08 марта 2011

Я пытаюсь выяснить, как использовать пакетный режим, предлагаемый в библиотеке CUFFT.

У меня есть изображение 5300 пикселей в ширину и 3500 в высоту. В настоящее время это означает, что я использую 3500 1D FFT на этих 5300 элементах, используя FFTW.

Является ли это хорошей проблемой-кандидатом для запуска библиотеки CUFFT в пакетном режиме? Как данные должны быть настроены для решения этой проблемы?

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 сентября 2012

да, вы можете использовать пакетный режим.

Для использования пакетного режима элементы 5300 должны храниться непрерывно.

Это означает, что расстояние между соседними партиями составляет 5300. Вы можете пойти по этому пути:

..........
cufftComplex *host;
cufftComplex *device;
CudaMallocHost((void **)&host,sizeof(cufftComplex)*5300*3500);
CudaMalloc((void **)&devcie,sizeof(cufftComplex)*5300*3500);
//here add the elements,like this:
//host[0-5299] the first batch, host[5300-10599] the second batch ,and up to the 3500th batch.
CudaMemcpy(device,host,sizeof(cufftComplex)*5300*3500,......);
CufftPlan1d(&device,5300,type,3500);
CufftExecC2C(......);
......

Подробнее см. В Руководстве CUFFT.

2 голосов
/ 08 марта 2011

да, это хорошая проблема.

Вы должны пойти следующим образом:

  1. создать массив с размером: sizeof (cufftComplex) *5300* 3500 в графическом процессоре (здесь я предполагаю, что у вас есть сложные входные данные)
  2. скопируйте ваши данные в gpu
  3. создайте план с помощью cufftPlan1d ()
  4. выполните план, например с помощью cufftExecC2C ()

Для получения дополнительной информации вы должны взглянуть на Руководство CUFFT

...