FFTW — необходим ли fftw_alloc()?

Документы для FFTW говорят, что fftw_alloc() обеспечивает правильное выравнивание памяти. Существуют ли риски, связанные с использованием переменных стека для ввода/вывода данного плана FFTW? Будет ли FFTW работать медленнее или вообще не будет работать?

например Не рекомендуется ли приведенный ниже код C?

int main()
{
   fftw_complex in[1024];
   fftw_complex out[1024];

   fftw_plan my_plan;

   my_plan = fftw_plan_dft_1d(1024, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

   fftw_execute(plan);
}


person bjornruffians    schedule 22.11.2013    source источник


Ответы (1)


Из документов:

http://www.fftw.org/doc/SIMD-alignment-and-fftw_005fmalloc.html

Программа, связанная с библиотекой FFTW, скомпилированной с поддержкой SIMD, может получить незначительное ускорение для большинства сложных преобразований и преобразований r2c/c2r. Однако для того, чтобы получить это ускорение, массивы сложных (или реальных) данных, передаваемых в FFTW, должны быть специально выровнены в памяти (обычно выровнены по 16 байтам), и часто это выравнивание является более строгим, чем обеспечиваемое обычным malloc ( и т. д.) процедуры распределения.

Таким образом, чтобы гарантировать правильное выравнивание для SIMD, в случае, если ваша программа когда-либо будет связана с FFTW, использующим SIMD, мы рекомендуем выделять ваши данные преобразования с помощью fftw_malloc и освобождать их с помощью fftw_free. Они имеют точно такой же интерфейс и поведение, как malloc/free, за исключением того, что для SIMD FFTW они гарантируют, что возвращаемый указатель имеет необходимое выравнивание (путем вызова memalign или его эквивалента в вашей ОС).

"Необходимо"? Нет

"Хороший совет?" Да - однозначно :)

person paulsm4    schedule 22.11.2013
comment
Спасибо. Мы используем это на Beagleboard xM с набором инструкций ARM NEON SIMD. - person bjornruffians; 23.11.2013