Оптимизированная FFT и математика для AR91-процессора AT91SAM9. - PullRequest
4 голосов
/ 26 марта 2012

Я разрабатываю программное обеспечение C / C ++ для встраиваемой системы Linux с процессором AT91SAM9G20 от Atmel. Мне нужно быстро вычислить БПФ с использованием математики с фиксированной запятой (или, возможно, с плавающей запятой), используя программу Linux. Я понимаю, что ассемблер может быть подходящим для реализации способом, и что при компиляции с использованием компилятора gcc может потребоваться дополнительный ключ -mpcu. Каков наилучший способ продолжить эту реализацию, и есть ли хорошие справочники книг или оптимизированные библиотеки FOSS?

Мне нужно реализовать некоторые алгоритмы, которые также требуют, чтобы небольшая длина БПФ (т. Е. 1024 точки) применялась несколько раз, и мне хотелось бы знать, будут ли некоторые библиотеки (например, kissfft) работать так же хорошо. Меня также интересуют большие длины БПФ, так что FFTW, как предлагается в ответе ниже, также будет работать хорошо.

В связи с этим вопросом мне также интересно, как обрабатывается целочисленное деление в программе ARM9 для Linux. Если я разделю два целых числа (например, 25/4), будет ли деление с использованием мягких чисел с плавающей запятой? Мне также нужно реализовать некоторые алгоритмы сжатия больших чисел, и мне интересно, лучше ли использовать фиксированную точку здесь, чем математика с плавающей запятой, и как компилятор gcc действительно обрабатывает вещи.

1 Ответ

4 голосов
/ 26 марта 2012

FFTw содержит специфичные для ЦП оптимизации (и может выполнять профилирование ЦП во время / во время выполнения).

В версии 3.3.1 добавлена ​​поддержка расширений ARM Neon

А из FAQ: Вопрос 4.2.Почему FFTW такой быстрый?

Это сложный вопрос, и на него нет простого ответа.На самом деле, авторы также не полностью знают ответ.В дополнение ко многим небольшим сбоям производительности во всем FFTW, есть три основные причины скорости FFTW.

  • FFTW использует множество алгоритмов FFT и стилей реализации, которые могут быть произвольно составлены для адаптации к машине.Смотрите вопрос 4.1 «Как работает FFTW?».
  • FFTW использует генератор кода для создания высокооптимизированных подпрограмм для вычисления небольших преобразований.
  • FFTW использует явное разделение и завоевание, чтобы использовать преимущества иерархии памяти.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...