Jump to content

    

Digital Thresher на базе BF532

Раз уж зашел спор о пиписьках, интересно, сколько у НВидии в том же G200 соотношение Вт/ММАС или Вт/MIPS ? Все-таки 1.4млрд 65нм транзисторов...

Share this post


Link to post
Share on other sites

вот аж любопытно стало (по топику BlackFin vs ARM9 ):

 

смотрю на плату и вижу аппаратный mp3|MIDI-декодер..

весь пар ушёл в свисток?!?

Share this post


Link to post
Share on other sites
вот аж любопытно стало (по топику BlackFin vs ARM9 ):

 

смотрю на плату и вижу аппаратный mp3|MIDI-декодер..

весь пар ушёл в свисток?!?

:) Ну зачем Вы так - автор ударными планами освоил blackFin - уже одно это замечательно. Преследовалась цель, я так понял, портировать готовый исходник эмулятора. Цель выполнена...

Share this post


Link to post
Share on other sites

Кстати, VLSI имеет сразу выход на наушники, что очень удобно. К тому же ее тоже интересно пощупать, т.к. ее можно и программировать, писать эквалайзеры, фильтры и т.п.

Share this post


Link to post
Share on other sites

Тут речь зашла про семейства С64, С64+, С674х. Хочу кинуть свои 5 копеек. Может кому-то будет полезно как еще одно мнение человека, который с этими семействами работал.

 

Я 8 лет плотно «сидел» на этих семействах (кроме С674х, ну и, естественно, С64+ не 8 лет, т.к. он появился всего несколько лет назад). Работа была ориентирована на серийные разработки – в настоящее время по всему миру работают десятки тысяч наших многопроцессорных плат (от маленьких с двумя С64хх на плате до числодробилок с 24 С64/C64+ на плате), которые в свою очередь стоят в составе комплексов верхнего уровня. Это все из области телекома.

 

Сразу скажу – в принципе вещь неплохая и даже хорошая, но… Если вы только выбираете на что закладываться, то стоит подумать. Хочу выделить несколько «координат» для анализа, отобранных по принципу «о чем тут писали и спорили».

 

1)

Вычислительная мощность. Берем 3-х ядерник TMS320C6474

 

CPU 3 C64x+

Peak MMACS 24000 (16-bit)

Frequency(MHz) 1000

 

Величина 24000, несомненно, впечатляет. Но получается она вот таким нехитрым образом – 3 ядра, работающих на частоте 1000 MHz и каждое ядро имеет 8 функциональных блоков. Перемножаем и получаем. Можете проверить – тоже самое «работает» и для других семейств, например С64, С64+ одноядерники.

 

Что С64, что С64+ (неважно, сколько ядер) – это VLIW процессор, у которого командное слово = 256 бит, которое в свою очередь состоит из 8 32-битных команд, которые параллельно обрабатываются на 8 функциональных устройствах. Это, в общем, «классика VLIW - теории». Добавлю еще «рекламы» - уже в С64, а в С64+ тем более Техас добавил некоторые SIMD команды (Single Instruction – Multiple Data) в набор тех самых «маленьких» 32-битых команд. То есть, например, можно параллельно с 4 байтами что-то сделать. Получается вообще куча операций в параллель.

 

Что мы видим в теории и в реале. В теории, если почитать умные книжки и теорию про VLIW, то все (серьезные разработчики супер-ЭВМ и разработчики компиляторов) признают ряд недостатков, в частности то, что достичь 100% загрузки всех функциональных блоков в параллель крайне трудно. Как следствие, код (машинный) получается неоптимальный по объему. Ну и скорость не достигается пиковая. Техас конечно пишет, что «все пучком» и что «у нас VelociTI® архитектура», но реально 100% загрузки как не было так и нет.

 

В реале, на мой взгляд, очень хороший материал для анализа – это пакеты (либы) наподобие DSPLIB (это Техасовское) – то есть набор базовых DSP и математических функций, предельно оптимизированных под конкретную платформу. Все эти либы доступны, имеются исходники, документация и т.п. Для каждой функции приведено точное соотношение, показывающее ее время выполнения как функцию размерности входных данных. Например, если вам требуется скалярное произведение двух векторов и длина вектора N, то написано, что «требуется N/k тактов процессора».

 

Можно взять подобные вещи (или более крупные блоки) от других фирм, но суть в общем одна – что Техас, что эти фирмы, которые продают подобную продукцию, предельно заинтересованы «показать товар лицом», то есть показать наивысшую производительность, т.к. это DSP – операции – именно, то для чего этот процессор и создан.

 

Так вот, для набора функций из DSPLIB четко видно, что даже для конкретной отдельной функции соотношение N/8 (то есть удалось «уложить» ее на 8 блоков параллельно) достигается не так часто. Гораздо чаще N/4, а то и вообще N/2.

 

Это для DSP-функций! Для линейного или «контроллерного» кода все может быть еще хуже.

Более того, сравнивая доки на либы для 64 и 64+, неприятно поражаемся тем, что «а особого прироста производительности то и нет!!» (реально есть, конечно, но не «прорыв»).

 

Мы после того как это все поняли (что на практике декларации про много-много MOPS это просто реклама) стали называть не MegaOPS, а «MegaNOPS» :biggrin:

 

То есть, пиковая производительность, конечно, будет та, что написана в доке и даже какие-то функции ее «отработают», но это будет не 90% и даже не 5% критических участков.

 

 

2)

Насчет потребления и насчет MOPS/watt. Во-первых, если реальные MOPS не такие как в п.1 (см. выше), то все не так шоколадно – реально это раза в 4 хуже. Во-вторых, Техас скорее всего «в рекламе» (то есть на первой странице и в кратких обзорах) приводит некую усредненную цифру без учета потребления периферии и т.п. В доках есть методики анализа потребления при конкретных условиях, при загрузке конкретных перефирийных блоков и т.п. Боюсь, что там будет не так хорошо как написано на первой странице. Но я в этом не сильно копался, т.к. для наших устройств проблема потребления практически не стояла – на стойки с платами хоть сотни ампер могли вкачать, если надо было. В общем, слова «малопотребляемый 64+» у меня вызывают недоумение.

3)

По плавающей точке. С 674х работать не довелось. Работали немного с 6711 и 6701 (старые). Но, в 674х вроде бы та-же самая «аппаратная» SP плавучка. Если ее хватает, то все ок. А если нужна DP, то стоит подумать. Вообще по плавающей точке я бы не стал на Техас закладываться.

4)

Насчет «ноналигнед позволяет спокойно решать любую задачу». Для 64 с этим есть определенные траблы – решить то решите, только производительность будет падать – конкретно там смотреть надо – что и как делается. Для 64+ - врать не буду, по моему «те же яйца только в профиль». В общем, если кто на это рассчитывает, то рекомендую внимательно все доки посмотреть, чтобы потом не было разочарования.

 

 

Но, в общем, сказать что «64+ - плохо/рулез, а ХХХ – рулез/плохо» это глупо. Надо просто прикинуть вдумчиво. Если нужны быстрые функции из набора DSPLIB, то может лучше их на ПЛИС переложить?! Это не утвержедение из разряда «вот так надо!», а скорее призыв «кому нужно – спокойно все взвесить».

Edited by mikeT

Share this post


Link to post
Share on other sites
смотрю на плату и вижу аппаратный mp3|MIDI-декодер..

весь пар ушёл в свисток?!?

 

Процитирую концепцию:

Все мощи CPU должны быть кинуты исключительно на код эмуляции и управление периферией.

При таком раскладе велики шансы заэмулировать приставки типа SEGA MD и SNES без тормозов, используя кроссплатформенные сорцы эмуляторов!

Share this post


Link to post
Share on other sites

Круто!

Интересно, а как вы воспроизводите звук? В приставках стояли спец-чипы, которые воспроизводили различные тона, шумы и т.п. Вы их как-то обрабатываете, или у с эмулятора сразу выходит PCM поток звуковой?

Share this post


Link to post
Share on other sites
Круто!

Интересно, а как вы воспроизводите звук? В приставках стояли спец-чипы, которые воспроизводили различные тона, шумы и т.п. Вы их как-то обрабатываете, или у с эмулятора сразу выходит PCM поток звуковой?

 

есть программныe модули, эмулирующие звуковые чипы приставок. Есть массив регистров - это вход. На выходе строится буфер с заданным рейтом и разрядностью (у меня на девайсе 22050Гц, 8бит). Буфер апдейтится по кадровому прерыванию эмулируемой приставки - поэтому его длина должна быть 22050/60=~370 байт или около того. Иначе если буфер мелкий - звук будет хрипеть, а если больше - звук будет как бы проглатываться.

Edited by denebopetukius

Share this post


Link to post
Share on other sites

Пока был в отпуске, портировал ещё 4 эмуля!!! :biggrin:

 

Вот они:

 

SNES

NEO-GEO MVS

GBA

SMS/GG

 

Обновлён сайт:

http://emu-apparatchik.narod.ru

http://emu-apparatchik.narod.ru/New.htm

http://emu-apparatchik.narod.ru/DT.htm

 

Ура! Ура Ура !!! :rolleyes:

 

Мало того, доделал эмуль SEGA MD

 

Видео, фотки, описание - всё на сайте ...

Share this post


Link to post
Share on other sites

Портирован эмулятор приставки NEC PC-Engine (Turbo GraFX-16):

http://emu-apparatchik.narod.ru/DT_PCE.htm

 

так что фиг с ним - с недостатком софта под BlackFin'ы - это можно скомпенсировать, написав софт самому :rolleyes:

Edited by denebopetukius

Share this post


Link to post
Share on other sites

может быть кому-нибудь пригодится...

 

высылаю печатные платы устройства (на руках 9 шт) и часть комплектующих(мелочь в основном)

 

вопросы/предложения на dre1983<at>mail<dot>ru или в личку сюда

Edited by denebopetukius

Share this post


Link to post
Share on other sites
Имхо, было бы интересно сравнить Blackfin и AVR32. :)

 

Здесь указана максимальная производительность AVR32 до 295 MIPS

У блекфина который применяется у меня - 400 MIPS (это правильно?)

 

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

 

Еще забыли соотношение производительность/потребление. И то, что 64хх - это DSP в чистом виде, а Blackfin - почти МК, т.е. и обычный управляющий код на него ложится вполне неплохо в отличие от процов с ЦОС уклоном.

 

а вот это уже интересно...

 

Перечитал по несколько раз высказывания в этой ветке по поводу С64, С67 и C674

 

В настоящее время ищу более быстрый процессор, чем BF @400MHz в QFP корпусе.

 

Приглянулся C6745 на 300МГц в QFP.

 

Что радует:

1) паяемый корпус

2) VLIW архитектура - до 8 обычных команд за 1 цикл

3) большой объем внутреннего ОЗУ (в моих целях очень полезно - можно некоторые эмуляторы исполнять прямо в ней)

4) две шины - на одну вешаем LCD, на вторую SDRAM, что исключает арбитраж шины и поочередное обращение к устройствам

 

Что отталкивает:

1) в большинстве случаев не удается полностью загрузить CPU до 8 инструкций за 1 цикл (чаще всего 2инстр./цикл)

2) более низкая частота 300 МГц против 400 МГц блекфиновских

3) асинхронная шина EMIFA в QFP урезана до 8 бит - это увеличит время обмена с дисплеем в 2 раза (LCD 16-битный)

4) доступны пробные версии камня с возможными глюками (помните в LPC22xx нерабочую внешнюю шину ???)

5) отсутствие экзамплов для подключения периферии - например, как к ихнему SPI привешать кодек VS1003 у которого 2 чипселекта? Можно ли задействовать ноги SPI_CS и SPI_Enable как обычные GPIO?

 

Интересно мнение тех, кому приходилось работать с TMS'ами и BF'ами.

 

Склоняюсь к 2-м выводам:

 

1) 8-битная шина LCD понизит обмен в 2 раза - будет проигрыш

2) неудасться полностью загрузить VLIW - как минимум выигрыш в 2 раза

 

итого, при применении C6745 на 300 МГц против BF на 400 MHz выйгрыша на General purpose Code вообще не будет...

 

Поправьте, если в чем-то заблуждаюсь.

Share this post


Link to post
Share on other sites

вот что придумал с LCD - делаем EMIFA псевдо 16-битной (требуется только запись, чтение запрещено).

 

вот таким макаром:

CPU---LCD

D0-----D0

D1-----D1

D2-----D2

D3-----D3

D4-----D4

D5-----D5

D6-----D6

D7-----D7

BA0----D8

BA1----D9

A0------D10

A1------D11

A2 ------D12

A3------D13

A4------D14

A5------D15

 

A12-----Command/Data

CS[]-----LCD CS

nWR-----LCD nWR

Pull Up----LCD nRD

 

обращаться к памяти LCD:

*(char*)(LCD_Data_Base|(Data>>8))=Data;

 

к командам:

*(char*)(LCD_Command_Base|(Command>>8))=Command;

 

LCD на асинхронной шине. Одно обращение около 20мгц (tsetup+twr+thold)

6745 на 300 МГц

 

Одно вышенаписанное обращение позволяет нарисовать один 16-пиксель на LCD (режим директколор без поллитр)

 

Если же LCD подключить стандартно 8 бит, то для одного пикселя будет 2 обращения.

 

Учитывая вычисления адреса, осмелюсь предположить, что такое "необычное включение" даст выигрыш в 1.75... 2 раза (в расчёт входило время вычисления адреса).

 

кто что думает по этому поводу?

будет ли реально быстрее? (отрисовка в LCD, программа)?

 

ЗЫ: ну конечноже переменная Data - это элемент массива палитры, располагающегося в L1/L2 =)

Share this post


Link to post
Share on other sites
Здесь указана максимальная производительность AVR32 до 295 MIPS

У блекфина который применяется у меня - 400 MIPS (это правильно?)

Это "сферические" мипсы. Не интересно. Интересно на реальных задачах. Контроллерных, обработке сигналов и т.п.

 

итого, при применении C6745 на 300 МГц против BF на 400 MHz выйгрыша на General purpose Code вообще не будет...

 

Поправьте, если в чем-то заблуждаюсь.

Эти сравнивать смысла нет. Один почти МК, второй - почти чистый DSP, к тому же, насколько помню, этот с плавающей точкой. Где годится один, второй совсем не годится. И наоборот. Можно еще AVR8 c РС сравнить. :biggrin:

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