Jump to content

    

TI Keystone vs Intel i7. Одноядерный режим

Сравниваю результаты профилирования демодулятора, написанного на С, для одного ядра С66 на 1.2 ГГц и Intel 6700 c 3.6 ГГц. Данные fixed-point. Intel выигрывает минимум в 2-3 раза по быстродействию.

Реально ли всякие кордики, FFT, частотные дискриминаторы допилить интринсиками, чтобы раз в 5 ускориться? Ассемблер на С66 совсем не хочется применять. Ну FFT можно аппаратный использовать, но он не так много общего времени занимает.

Понятно, что для сигналов под 30 МГц нужны ПЛИС, но всё-таки хочется впихнуть в DSP.

Share this post


Link to post
Share on other sites

у i7 ещё видеокарта есть с сотней двойных гигафлопсов. или 400 одинарных

 

Share this post


Link to post
Share on other sites
2 часа назад, _pv сказал:

у i7 ещё видеокарта есть с сотней двойных гигафлопсов. или 400 одинарных

Угу. Получается, что нынче DSP только по TDP выигрывают. Процессоры общего назначения в разы стали быстрее, если смотреть с точки зрения необходимой скорости вычислений.

Share this post


Link to post
Share on other sites

Хм, заменил cordic на вычисление первой разности в ЧМ-детекторе: https://www.embedded.com/design/configurable-systems/4212086/DSP-Tricks--Frequency-demodulation-algorithms-

На интеле в 2 раза стало быстрее работать, а на сигнальнике процентов на 5% медленнее. Вот и избавился от пары десятков итераций кордика...

Share this post


Link to post
Share on other sites
On 8/5/2019 at 8:43 PM, Grizzly said:

Сравниваю результаты профилирования демодулятора, написанного на С, для одного ядра С66 на 1.2 ГГц и Intel 6700 c 3.6 ГГц. Данные fixed-point. Intel выигрывает минимум в 2-3 раза по быстродействию.

Реально ли всякие кордики, FFT, частотные дискриминаторы допилить интринсиками, чтобы раз в 5 ускориться? Ассемблер на С66 совсем не хочется применять. Ну FFT можно аппаратный использовать, но он не так много общего времени занимает.

Понятно, что для сигналов под 30 МГц нужны ПЛИС, но всё-таки хочется впихнуть в DSP.

Смысл в разработке под сигнальник без интринсиков вообще не ясен, ИМХО в этом самый цимес. Тем более, что можно основную фазу разработки провести в какой-нибудь комфортной визуал студии, используя программную эмуляцию интринсиков. Во сколько раз можно ускориться - сильно зависит от задачи и того, с чем сравнивается. Для типовых задач ЦОС обычно вполне реально. Ну и не следует пренебрегать библиотеками от техаса, тоже неплохо написаны.

По поводу 30 МГц - бабка надвое сказала, downlink или uplink LTE 20 МГц с аппаратными сопроцессорами турбо и витерби обрабатывается без проблем одним ядром, т.е. сильно зависит от задачи.

On 8/5/2019 at 9:38 PM, _pv said:

у i7 ещё видеокарта есть с сотней двойных гигафлопсов. или 400 одинарных

Если задачу можно распараллелить на много маленьких то да, в противном случае толку либо никакого, либо результаты сравнимы.

23 hours ago, Grizzly said:

Получается, что нынче DSP только по TDP выигрывают.

Габариты, куча высокоскоростных интерфейсов прямо на СоКе без необходимости дополнительных сетевых адаптеров и мостов, аппаратные сопроцессоры декодеров, FFT, RAKE. Т.е. опять все упирается в решаемую задачу. И такое положение вещей было, в общем-то, всегда, чистая вычислительная мощность сигнальников была примерно равна процессорам от интела и амд, наличие специнструкций компенсировало более низкую тактовую (речь про задачи ЦОС, конечно).

Share this post


Link to post
Share on other sites
11 минут назад, stealth-coder сказал:

По поводу 30 МГц - бабка надвое сказала, downlink или uplink LTE 20 МГц с аппаратными сопроцессорами турбо и витерби обрабатывается без проблем одним ядром, т.е. сильно зависит от задачи.

В этом кейсе, безусловно, сигнальники хорош. Плюс ещё аппаратный FFT. Самому сигнальнику остаётся точная синхронизация, оценка канала и демаппер. Плюс автомат состояний. Если всякие свёртки тоже через аппаратный FFT считать, то львиная доля затрат снимется и с этой части.

Стоит же что-то нестандартное начать делать, то уже не все так гладко. Взять тот же WiFi. Пакеты во времени случайны. Надо в полосе 20 МГц постоянно искать автокорреляционной двух преамбул. Тактовая 1.2 ГГц. 60 тактов на комплексный отсчёт. Можно считать скользящими способами автокорреляцию и мощность. Где-то впритык, наверное, и получится. Ещё же всякие фоновые задачи что-то отжирают. Дальше проще. После синхронизации всё тот же аппаратный сопроцессор FFT.

Ещё возникает проблема, если куски отсчётов большие, которые приходится класть в DDR3. Тут ещё по сравнению с L2 будут потери. Похоже, у меня сейчас в этом проблема. Надо, наверное, стараться выходить в реал-тайм, чтобы обрабатывать мелкие порции данных в L2, а не отложенного из DDR3.

25 минут назад, stealth-coder сказал:

Ну и не следует пренебрегать библиотеками от техаса, тоже неплохо написаны.

Интересно, в реальности для Arctan2 будут обещанные 24 такта? Насколько в боевых условиях от лабораторных бенчей будут различия?

http://www.ti.com/processors/digital-signal-processors/core-benchmarks/core-benchmarks.html

Завтра буду пробовать.

Share this post


Link to post
Share on other sites
10 hours ago, Grizzly said:

Ещё возникает проблема, если куски отсчётов большие, которые приходится класть в DDR3.

При правильно настроенном кэше L1 вижу разницу в 1-2%. Всё, что требует рандомного доступа (обычно перемежитель), обязательно размещать в L2.

11 hours ago, Grizzly said:

Насколько в боевых условиях от лабораторных бенчей будут различия?

Пользовался библиотечными FFT, комплексные и вещественные фильтры, быстрое копирование, различия на уровне стат. погрешностей.

Также неплохо пользоваться "здравым смыслом". Например, в OFDM эквалайзере использовал плавающую точку, но ограничился точностью вычисления 1/Х в 16 бит (одна итерация Ньютона-Рафсона), оказалось достаточно и стало настолько быстро, что даже с фиксированной точкой не стал заморачиваться, хотя даже нашёл пример реализации для WiMax (см. вложение).

sprp530.pdf

Share this post


Link to post
Share on other sites
11 hours ago, Grizzly said:

Взять тот же WiFi. Пакеты во времени случайны. Надо в полосе 20 МГц постоянно искать автокорреляционной двух преамбул.

Порылся в загашнике, предлагают первичное обнаружение делать по энергии, а уже потом переходить к корреляциям. При таком подходе вычислительной мощности должно хватить, ещё останется.

eth-30122-02.pdf

Share this post


Link to post
Share on other sites
4 часа назад, stealth-coder сказал:

Порылся в загашнике, предлагают первичное обнаружение делать по энергии

Побоялся большого числа ложных тревог от всякого мусора в эфире. А так "скользящая" мощность очень быстро считается.

 

4 часа назад, stealth-coder сказал:

хотя даже нашёл пример реализации для WiMax (см. вложение).

Круто! Спасибо.

Share this post


Link to post
Share on other sites

@stealth-coder оказалось, что дело не в DDR3, а в делении float. Компилятор заменял его на вызов функции, не было поэтому программного конвейера.

При замене на интринсик где-то в 15 раз стало быстрее :)

Share this post


Link to post
Share on other sites

Эта тема обсуждалась уже раз 100500...

 

Share this post


Link to post
Share on other sites
2 часа назад, thermit сказал:

Эта тема обсуждалась уже раз 100500...

Как-то пропустил. Похоже, каждый через это должен пройти...

Share this post


Link to post
Share on other sites

А как лучше сделать эмуляцию для rcpsp? На форуме тексаса были вопросы, но ответа не прозвучало. С Ньютоном-Рафсоном понятно, не ясно, как начальное значение с 8-битной точностью получить. Нужно для исходной сишной модели. Или нет смысла это проверять, а просто 2-3 итерации сразу брать?

Share this post


Link to post
Share on other sites
2 часа назад, Grizzly сказал:

Как-то пропустил. Похоже, каждый через это должен пройти...

Да. Каждый должен попрыгать по персональным граблям.

Share this post


Link to post
Share on other sites
55 минут назад, Grizzly сказал:

А как лучше сделать эмуляцию для rcpsp? На форуме тексаса были вопросы, но ответа не прозвучало. С Ньютоном-Рафсоном понятно, не ясно, как начальное значение с 8-битной точностью получить. Нужно для исходной сишной модели. Или нет смысла это проверять, а просто 2-3 итерации сразу брать?

Дык, а кто мешает посмотреть эмуляцию команд?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this