Перевод новостей из блога raspberry pi

Здесь будет размещаться перевод новостей проекта raspberry pi. Перевод делается в целях изучения английского языка.

Ускоряем преобразования Фурье, используя GPU

Эндрю Холм хорошо знаком постоянным читателям нашего блога, как создатель потрясающего (и страшно умного) самодельного GPS приёмника. В течение нескольких месяцев он экспериментировал с написанием кода общего назначения для видеоядра VideoCore IV в чипе BCM2835, являющегося сердцем Raspberry Pi. Он хотел создать библиотеку для ускоренного быстрого преобразования Фурье. Применение преобразования Фурье к функции выдаёт её частотный спектр (т.е. чистые гармонические функции, которые могут быть сложены для получения оригинальной функции). В следующем примере, бесстыдно стащеном с Википедии, мы видим функцию колеблющуюся приблизительно три раза в секунду, и её преобразование Фурье имеет ожидаемо пик в области 3Гц.

Фурье

Иметь возможность производить множество преобразований Фурье быстро, очень полезно для всех видов звуковых и радио приложений, включая, неудивительно, GPS. Энтузиасты-радиолюбители также найдут работу Эндрю крайне полезной. В этом гостевом постинге, Эндрю говорит о его библиотеке преобразований Фурье для Pi.

В прошлом октябре, Эбен принял участие в конвенте Сообщества Радио Великобритании (Radio Society of Great Britain (RSGB)), где радиолюбители рассказали ему, что они хотят библиотеку быстрого преобразования Фурье для создания проектов софтового радио на Pi.

GPU_FFT - библиотека быстрого преобразования Фурье для Raspberry Pi, которая использует аппаратное видео чипа BCM2835, чтобы ускорить преобразование в десять раз, что возможно на 700 МГц ARM. Ядра доступны для всех длин степени двойки от 256 до 131072 точек.

GPU_FFT использует вычисления с плавающей точкой одинарной точности для данных и настраиваемых параметров. Так что она не достаточно точна по сравнению с библиотеками с двойной точностью. Однако среднеквадратичное отклонение для преобразования 2048-точек менее чем одна милионная, что неплохо.

Библиотека выполняется на выделенном аппаратном 3D чипа BCM2835, и коммуникация между GPU и ARM добавляет задержку 100микросекунд, что гораздо дольше, чем время необходимое на самое короткое преобразование! Чтобы преодолеть это, набор преобразований может быть выполнен за один вызов. Типичное время выполнения в микросекундах представлено в таблице ниже:

Points    batch=1    batch=10    batch=50    FFTW    Speedup
256 112 22 16 92 5.8x
512 125 37 26 217 8.3x
1024 136 54 45 482 10.7x
2048 180 107 93 952 10.2x
4096 298 256 240 3002 12.5x
8192 689 624 608 5082 8.4x
16384 1274 1167 1131 12005 10.6x
32768 3397 3225 3196 31211 9.8x
65536 6978 6703 6674 82769 12.4x
131072 16734 16110 16171 183731 11.4x

Чтобы получить GPU_FFT, введите следующее в консоли:

sudo rpi-update && sudo reboot

Чтобы собрать и запустить программу с примером:

cd /opt/vc/src/hello_pi/hello_fft
make
sudo mknod char_dev c 100 0
sudo ./hello_fft.bin

Документация по API может быть найдена в директории hello_fft.

Оригинальный материал: Accelerating Fourier transforms using the GPU

Следующий Предыдущий