При планировании БПФ могу ли я использовать тот же план для обратного БПФ? - PullRequest
1 голос
/ 02 июня 2011

Я работаю с трехмерным массивом реальных чисел.

В одной части моего кода я должен взять 3DFFT этих значений, а затем поставить полученную сложную матрицу другой матрицей чисел с плавающей точкой.,(точка = точечное умножение)

Затем я беру обратное БПФ и обновляю исходный массив.

Что важно, когда вы делаете первый cufftPlan3d()?то есть, что на самом деле ищет План?

Нужно ли плану просто видеть размеры и тип массива, чтобы он работал быстро, или он также смотрит на величины реальных и сложных частей?

Я пытаюсь использовать план как можно меньше, чтобы я мог быстрее вычислить преобразования, но я также хочу, чтобы FFT (и iFFT) были максимально быстрыми, поскольку это является узким местом кода.

Сначала я подумал, что я должен составить план перед начальным БПФ, а затем составить другой план после полученного точечного произведения / БПФ для обратного БПФ, а затем использовать эти 2 плана везде позже в цикле.

Спасибо за любые предложения.

1 Ответ

2 голосов
/ 02 июня 2011

Вы определенно должны иметь возможность создать только один план и использовать его повсюду в цикле, если тип и размер преобразования не изменятся. Похоже, что это дело для вас. Фактически, вы можете использовать один и тот же план как для прямого (FFT), так и для обратного (iFFT) преобразований, если тип и размер одинаковы, поскольку CUFFT_FORWARD / CUFFT_REVERSE являются параметрами для cufftExec*(), а не для cufftPlan*().

Если у вас есть несколько размеров и типов для поддержки, создайте отдельный план для каждой комбинации типа / размера при запуске (если вы знаете их заранее).

...