FFTW на Zynq: почему потребление почти не меняется?
В продолжение к прошлому посту FFTW vs Ne10 на ARM Cortex-A9 решил измерить насколько вырастет энергопотребление, если запустить бенчмарк FFTW на PS-части Zynq 7020 - получил около 0,27 Вт для всех длин FFT. Мощность считал по току с лабораторного источника питания.
По результата замеров построил графики производительности FFTW сразу в трёх метриках.
График производительности FFTW на Cortex-A9 в трех метриках
MFLOPS/время выполнения - показывает, насколько быстро выполняется бенчмарк при фиксированном железе и частоте;
MFLOPS/МГц - позволяет сравнивать, насколько хорошо алгоритм/библиотека использует каждый мегагерц CPU;
MFLOPS/Вт - показывает, сколько полезных операций вы получаете с одного ватта мощности.
Я ожидал увидеть зависимость потребления от длины FFT, но для расчета электропитания и теплового бюджета удобнее использовать константу 0,27 Вт. Но все же интересно, почему потребление стабильно держится на уровне 0,27 Вт независимо от размера FFT? Какие архитектурные особенности влияют на это сильнее всего? Делитесь своими мыслями в комментариях!
А в моём Telegram-канале DSP_labs вас ждут полные бенчмарки, скрипты и ещё больше примеров оптимизации DSP на embedded.
FFTW vs Ne10 на ARM Cortex-A9: кому отдать БПФ в embedded?
Недавно в одном проекте по спектральному анализу ЛЧМ-сигналов на моей AD/DA плате я столкнулся с тем, что FFTW на Cortex-A9 в Zynq рисует задержку в сотни микросекунд — критично для реального времени. Решил проверить лёгкую библиотеку Ne10: оказалось, что на средних размерах БПФ (128–512) Ne10 даёт до +10% производительности (905 MFLOPS против 817 MFLOPS у FFTW) благодаря оптимизациям под NEON.
График производительности FFTW vs Ne10 на Cortex-A9
Однако Ne10 выигрывает не во всём: для очень малых (≤ 64) и произвольных больших размеров FFTW остаётся лидером за счёт агрессивного планирования, double-точности и возможности сохранять «wisdom»-планы. Выбор между ними зависит от сценария: если нужна быстрая интеграция и фиксированные степени двойки — Ne10, а для универсального решения с поддержкой любых N и многопоточности — FFTW.
Более подробное описание соберу в статью. А какой библиотекой пользуетесь вы и какие удивительные кейсы встречали? Делитесь в комментариях, а в моём Telegram-канале DSP_labs вас ждут полные бенчмарки, скрипты и ещё больше примеров оптимизации DSP на embedded.
DIY-платаAD/DA для DSP-задач на ARM+FPGA: зачем я её собрал
В мире встроенных систем и цифровой обработки сигналов (DSP) ключ к быстрому прототипированию и надёжной отладке лежит через собственный инструмент — аппаратную платформу, точно отвечающую вашим задачам. Моя цель — отработать цепочку «аналог ↔ цифра ↔ FPGA ↔ ARM» в реальном времени, без лишних звеньев и оговорок. Именно поэтому я спроектировал собственную отладочную DIY-плату AD/DA с программируемым генератором тактовой частоты.
Если вы сталкивались с ограничениям доступных на рынке отладочных плат или ищете универсальный стенд для экспериментов с цифровой обработкой сигналов, этот опыт будет вам полезен.
Плата выполнена в формате "Arduino" (?) и служит модулем для быстрой интеграции в платформы ARM+FPGA (Zynq-7000 или аналогичные) через стандартный 40-контактный разъём KLS.
Плата AD/DA
В основу конструкции легла классическая SDR-структура: трансформаторы, АЦП, программируемый тактовый генератор, буфер тактового сигнала, ЦАП и интерфейсные сигналы на разъём KLS.
1. Аналого-цифровой преобразователь: AD9283
8-битный одноканальный АЦП с параллельным CMOS-интерфейсом.
Частота преобразования до 100 MSPS.
Сигнал PWRDWN и шина данных подаются с разъёма KLS.
Вход с внешнего SMA через трансформатор дает дифференциальный сигнал для высокого SNR.
Тактовый буфер Si53306 распределяет сигнал на АЦП, ЦАП и FPGA.
3. Цифро-аналоговый преобразователь: AD9744
14-битный одноканальный ЦАП с параллельным CMOS-интерфейсом.
Частота преобразования до 210 MSPS.
Сигнал SLEEP и шина данных подаются с разъёма KLS.
Выход через трансформатор возвращает аналоговый сигнал на внешний SMA-коннектор.
Зачем и для чего: практические сценарии использования этой отладочной платы
Формирование и анализ сигналов
Создания многокомпонентных тестовых сигналов (модуляции AM/FM, chirp-сигналов) для оценки пропускной способности и реактивности FPGA-ядра.
Тестирования и калибровки входных трактов при различных уровнях амплитуды и частоты.
Генерации шумовых или псевдослучайных сигналов для проверки устойчивости DSP-алгоритмов.
2. Отладка алгоритмов цифровой обработки в реальном времени
Нужно прототипировать алгоритмы цифровой обработки данных непосредственно на связке ARM+FPGA и видеть результат «на лету».
Использованиеплаты в образовательных целях: для обучения студентов или коллег практикам embedded-разработки и современной цифровой обработки сигналов.
Реализация и проверка в HDL алгоритмов, например, вейвлет-преобразования для анализа сигнала и выделения его локальных особенностей.
3. Сравнительное исследование реальной производительности ARM и FPGA-ядер
FPGA-ядро: пропускная способность HDL-модулей FIR/IIR, вейвлет-анализ, дизайн HLS-функций.
Сбор и визуализация метрик (latency, throughput, resource utilization) через ARM-API и JTAG-интерфейс FPGA.
ARM-ядро: замеры FFT-блока, фильтров в Linux-окружении.
Заключение
Эта AD/DA-плата для ARM+FPGA обеспечивает точность, скорость и гибкость, необходимые как для исследований DSP-алгоритмов, так и для промышленных встраиваемых и исследовательских проектов.
Присоединяйтесь к https://t.me/dsp_labs — там выходят реальные бенчмарки, исходники и советы по оптимизации DSP-алгоритмов на ARM/FPGA платформах!