2013-08-19 2 views
0

У меня есть полный проект, созданный с использованием FFTW. Я хочу перейти на использование cuFFT. Я понимаю, что cuFFT имеет «режим совместимости». Но как именно это работает? The cuFFT manual говорит:с использованием режима FFTW compatablity в cuFFT

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

Означает ли это, что мне действительно нужно изменить свои индивидуальные вызовы функций? Например, позвоните по телефону cufftPlan1d() вместо fftw_plan_dft_1d().

Должен ли я также менять типы данных?

fftw_complex *inputData; // fftw data storage gets replaced.. 
    cufft_complex *inputData; // ... by cufft data storage? 

    fftw_plan forwardFFT;  // fftw plan gets replaced... 
    cufftHandle forwardFFT;  // ... by cufft plan? 

Если я придется переписать все мой код, что точка cufftSetCompatabilityMode(.)?

ответ

3

Возможно, что вы хотите, это cuFFTW interface to cuFFT. Я предлагаю вам прочитать эту документацию, поскольку она, вероятно, близка к тому, что вы имеете в виду. Это позволит вам использовать cuFFT в приложении FFTW с минимальным количеством изменений. Как указано в документации, должна быть только два шага из милиции:

  • Рекомендуется заменить инклюдник fftw3.h с cufftw.h
  • Вместо связывания с двойными/с одинарной точностью библиотек, таких как fftw3/fftw3f библиотеки, связь с обеими библиотеками CUFFT и CUFFTW

что касается пункта дока вы Извлеченный, что шаг (перемещения данных в явном виде) не требуется, если вы используете только интерфейс совместимости cuFFTW. Однако вы не можете достичь максимальной производительности таким образом. Если вы хотите достичь максимальной производительности, вам может потребоваться использовать cuFFT изначально, например, чтобы вы могли явно управлять перемещением данных. Независимо от того, важно это или нет, будет зависеть от конкретной структуры вашего приложения (сколько FFT вы делаете, и независимо от того, используются ли какие-либо данные между несколькими БПФ). Если вы намерены использовать cuFFT изначально, то применяются следующие комментарии :

Да, вам нужно изменить индивидуальные вызовы функций. Они должны совпадать с именами функций в API, связанных заголовочных файлах и библиотеке. Имена функций fftw_ не находятся в библиотеке cuFFT.

Вы можете проверить свои типы данных и обнаружить, что для базовых типов данных, таких как , double, сложных и т. Д., Они должны быть совместимы между cuFFT и FFTW. Лично я бы рекомендовал изменить типы данных на типы данных cuFFT, но в это время не должно быть функциональных или разницы в производительности.

Хотя вы не упомянули об этом, cuFFT также потребует, чтобы вы переместили данные между CPU/Host и GPU, концепцией, которая не имеет отношения к FFTW.

Относительно cufftSetCompatibilityMode, function documentation и обсуждение FFTW compatibility mode довольно ясно на его цели. Это связано с общей компоновкой данных, особенно с заполнением данных для FFTW.

+0

Значит, 'cufftSetCompatabilityMode()' имеет значение только в том случае, если я использую собственный cuFFT? Первым параметром для этого метода является cuFFT Handle, который, по-видимому, у меня нет, если я использую FFTW. Можно ли «смешать» два? Например, используйте интерфейс для всего, кроме «выполнить», а затем используйте собственный cuFFT для «выполнения»? Кроме того, если я использую только интерфейс, есть ли способ получить возвращаемые значения функции (т. Е. CUFFT_SUCCESS)? – tir38

+0

Да, 'cufftSetCompatibilityMode()' не имеет значения, если вы * строго * используете интерфейс cuFFTW. Да, можно смешивать 2 API. Вы не можете использовать интерфейс FFTW для всего, кроме «выполнить», потому что он не влияет на процесс копирования данных, если вы фактически не выполняете его с помощью интерфейса FFTW. Выполнение cuFFT предполагает, что данные уже скопированы. Я не знаю, как вернуть значения функции, используя строго интерфейс cuFFTW. Однако для поддерживаемых функций fftw также должны поддерживаться любые параметры статуса. –

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