Например TDA7294

Форум РадиоКот • Просмотр темы - Целочисленное преобразование Фурье большого порядка
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 22, 2025 18:10:06

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Целочисленное преобразование Фурье большого порядка
СообщениеДобавлено: Пт мар 24, 2023 17:34:12 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24615
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Можете немного пояснить

Могу.
Есть разные архитектуры ядер процессоров: CISK и RISC. Последняя отличается простотой и ограниченным количеством инструкций, что позволяет этой архитектуре иметь быстрое Арифметико-Логическое Устройство (АЛУ). То есть поднять тактовую частоту ядра разменяв ее на длину кода. Практика показала, что ДЛЯ БОЛЬШИНСТВА ЗАДАЧ так считать быстрее.
Но беда в том, что сигнальные задачи (DSP) к этому большинству не относятся. И для них нужны ускорители.
Есть два вида таких ускорителей: VLIW и SIMD. Первый использует объединение нескольких РАЗНЫХ инструкций в одной, которая выполняется за 1 машинный цикл. То есть цепочка инструкций делается одновременно. Второй использует возможность считать ОДНУ КОРОТКУЮ инструкция С РАЗНЫМИ ОПЕРАНДАМИ. То есть производить матричные вычисления параллельно.
ARM относится к RISC-архитектуре. Основное отличие этой архитектуры в отсутствии инструкций арифметики с непосредственными данными в ОЗУ. Вся арифметика выполняется только в регистрах ядра, которые называются регистрами общего назначения (РОН). И прежде чем считать арифметику эти РОНы нужно загрузить данными из ОЗУ и для этого есть инструкции загрузки. А после вычислений результат из РОНа нужно выгрузить в ОЗУ. И для этого есть инструкции выгрузки. Кроме этого, в ARM-ах матрица шин позволяет одновременно в одном машинном цикле иметь лишь один доступ в ОЗУ для загрузки РОНов.
MAC - это стандартная инструкция DSP набора инструкций, которая реализует основную математику свертки - A=A+X*Y.
Фактически это две инструкции выполняемые за один машинный цикл, что ускоряет (теоретически) свертку в два раза.
Но есть одно "но". Проблема в том, что длина инструкции и схемотехника АЛУ ограничивает возможности адресации и потому MAC в любой архитектуре - это чисто регистровая команда. То есть X и Y это содержимое РОНов, а аккумулятор А - либо отдельный многоразрядный регистр или несколько РОНов соединенных в одно многоразрядное слово.
В ускорителях типа VLIW оные МАС-инструкции объединяют с загрузкой регистров по регистрам-указателям (тоже РОНы) для следующей инструкции и одновременной модификацией указателей для следующей загрузки в следующей инструкции. То есть сама эта длинная инструкция имеет встроенный трехстадийный конвейер. Это позволяет для реализации свертки тупо повторять одну и туже инструкцию N раз. И все. При этом пара данных в РОНы X и Y может быть загружена одновременно, что достигается сегментированием ОЗУ на две части с двумя разными шинами доступа.
в SIMD это делают иначе. Там сначала загружают матрицу исходных данных, а затем в один машинный цикл делают несколько MAC одновременно.
При расчете БПФ такой регулярности нет и приходится дергать промежуточные комплексные (двумерные) данные туда-сюда, выполняя разнотипные MAC. Это лишает возможности SIMD иметь значительный выигрыш, поскольку нет возможности одновременно дергать указатели.
Наверное, вы хотели написать

Я написал то, что хотел написать. ДПФ и свертка математически суть есть одно и тоже - сумма произведений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Целочисленное преобразование Фурье большого порядка
СообщениеДобавлено: Вс мар 26, 2023 10:52:52 
Родился

Зарегистрирован: Пт мар 17, 2023 19:34:49
Сообщений: 4
Рейтинг сообщения: 0
КРАМ, спасибо за ликбез. Из Вашего текста я смог понять, почему при расчете БПФ не удастся достичь такой же производительности вычислений, как при расчете свертки. Но для меня остался всё равно непонятен вопрос, почему, заменяя в одном и том же коде типы данных с float на short, а получаю в одном случае (свертка) существенный прирост скорости, а в другом (БПФ) ничего не получаю по скорости.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Целочисленное преобразование Фурье большого порядка
СообщениеДобавлено: Вс мар 26, 2023 12:51:58 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24615
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Потому что флоат не используется в МАС-инструкциях. Они целочисленные.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y