Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ищу любые вычислительные проекты для FPGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Alexium
Здравствуйте.
Пишу диплом магистра. Тема - ускорение вычислений (реконфигурируемый сопроцессор на ПЛИС).
Сейчас делаю собственно сопроцессор (фреймворк, в некотором роде). Потом надо будет исследовать производительность разных задач на ПЛИС, сравнивать с чисто программной реализацией.
Проблема в том, что время уже ой как поджимает, а еще сам фреймворк не готов. Времени писать для ПЛИС решения каких-то практически значимых задач нет вообще. Может, кто-то поделится каким-нибудь проектом? Или кто-то где-то что-то видел и даст ссылку...
Понимаю, что вряд ли кто-то поделится со мной своей интеллектуальной собственностью, но если вдруг - конфиденциальность я, разумеется, гарантирую. В отчет пойдет только краткое описание решаемой задачи и графики производительности.
DmitryR
На Opencores посмотрите - там математики всякой хватает.
Alexium
Смотрел, конечно. Мало там подходящих для меня проектов. В основном всякие небольшие модули, вроде сумматоров и умножителей, которые не решают конкретных задач.
DmitryR
Там есть как минимум (из законченного):
- CORDIC
- DCT
- AES
- SHA
- Reed-Solomon
- Twofish
- FIR, CIC, DDS, Hilbert
И еще куча похожего в процессе. Или вам это тоже кажется простоватым?
Alexium
Нет, шифрование и хэширование - это то, что надо. DCT, наверное, тоже. Насчет CORDIC не уверен, я не очень хорошо знаком с его функциями, но подозреваю все же, что посчитать то же самое на ЦП будет быстрее.
А вот DDS и Reed-Solomon, по-моему, не из той оперы совсем. Мне ведь нужны задачи, которые обычно решаются на компьютере, и в которых производительность ЦП является узким местом.
jojo
>Сейчас делаю собственно сопроцессор (фреймворк, в некотором роде).
А что такое фреймворк? Просто интересно.

Advanced Synthesis Cookbook: A Design Guide for Stratix II, Stratix III, and Stratix IV Devices
http://www.altera.com/literature/manual/cookbook.zip
Alexium
Цитата(jojo @ Mar 11 2011, 09:39) *
А что такое фреймворк? Просто интересно.


Что-то такое
Kirill_Good
Restricted Boltzmann Machines sm.gif
bogaev_roman
Цитата(Alexium @ Mar 11 2011, 10:33) *
Мне ведь нужны задачи, которые обычно решаются на компьютере, и в которых производительность ЦП является узким местом.

Возьмите блок FFT
Alexium
Цитата(Kirill_Good @ Mar 11 2011, 13:38) *
Restricted Boltzmann Machines

Искал. Так, чтоб можно было скачать и запустить - не нашел. Только статьи находятся. sad.gif


Цитата(bogaev_roman @ Mar 11 2011, 14:24) *
Возьмите блок FFT

Обязательно! Но во-первых - это банально, а во-вторых - в этой задаче мне вряд ли светит догнать GPU.
bogaev_roman
Цитата(Alexium @ Mar 11 2011, 16:09) *
а во-вторых - в этой задаче мне вряд ли светит догнать GPU.

Да неужели???
Alexium
Цитата(bogaev_roman @ Mar 11 2011, 15:16) *
Да неужели???

Честно - не знаю. Просто мне так кажется почему-то. Конечно, зависит еще от того, какой GPU и какая FPGA. У меня, например, плата на Spartan xc3s700A, не слишком вместительная и не слишком быстрая. Всякие Virtех 4-6 многомиллионные - другое дело, но у них и цена заоблачная...
bogaev_roman
Цитата(Alexium @ Mar 11 2011, 16:35) *
Честно - не знаю. Просто мне так кажется почему-то. Конечно, зависит еще от того, какой GPU и какая FPGA. У меня, например, плата на Spartan xc3s700A, не слишком вместительная и не слишком быстрая. Всякие Virtех 4-6 многомиллионные - другое дело, но у них и цена заоблачная...

Я вот тоже - не знаю, может ли GPU FFT считать, а если может - то с цифрами какой разрядности оперирует и максимальным окном. Если у Вас задача стоит чего-нить наваять и сравнить, а насколько это быстрей будет подсчитано в ПЛИС, чем в процессоре, то сделать все довольно просто.
Сколько в Вашей ПЛИСке встроенных умножителей?
Создаете FIR фильтр с порядком, равным кол-ву аппаратных умножителей и распаралеливаете структуру фильтра, а процессору даете формулу для расчета в лоб - пусть загибается.
Ну и получится, что в ПЛИС результат на выходе будет через latency, но каждый такт, а процессор все вычислит если у него одна оперция за такт через Nx2-1 тактов минимум, N - порядок фильтра. При порядке 51 процессор должен сделать 51 умножений и 50 сложений.
Alexium
Цитата(bogaev_roman @ Mar 11 2011, 15:53) *
Я вот тоже - не знаю, может ли GPU FFT считать, а если может - то с цифрами какой разрядности оперирует и максимальным окном. Если у Вас задача стоит чего-нить наваять и сравнить, а насколько это быстрей будет подсчитано в ПЛИС, чем в процессоре, то сделать все довольно просто.
Сколько в Вашей ПЛИСке встроенных умножителей?
Создаете FIR фильтр с порядком, равным кол-ву аппаратных умножителей и распаралеливаете структуру фильтра, а процессору даете формулу для расчета в лоб - пусть загибается.
Ну и получится, что в ПЛИС результат на выходе будет через latency, но каждый такт, а процессор все вычислит если у него одна оперция за такт через Nx2-1 тактов минимум, N - порядок фильтра. При порядке 51 процессор должен сделать 51 умножений и 50 сложений.

Отлично, спасибо за подсказку насчет FIR-фильтра!
Умножителей у меня, кажется, 20. Т.е. макс. порядок - 19 (если я правильтно понял). Процессор умножает, я думаю, тактов за 7, складывает - за 1 (мы ведь о целых числах говорим?). Итого - чуть больше 150 тактов на итерацию, или в 150 раз медленнее ПЛИС. При частоте ПЛИС 50 МГц ЦП с ней сравняется на частоте больше 7 ГГц. Но у процессора может быть 4 ядра, и он может пользоваться параллелизмом уровня команд. И у него быстрый доступ к памяти (узкое место моего проекта). Но можно ведь умножители и на LUT сделать. Конечно, тактовая частота упадет, но зато степень параллелизма вырастет...

Насчет GPU: FFT они считают вполне неплохо. Конкретных цифр не скажу (еще не изучал), но в принципе - GPU работают с целыми 32-битными числами, 32- и 64-битными с плавающей запятой.
Есть исследование производительности GPU NVidia GT200, дочитаю - опишу результаты, если интересно.
Кстати, я не учел, что процессор использует конвейер, так что для выполнения 20 умножений нужно гораздо меньше 20х7 тактов. Скорее, 7 + 19х(1 или 2).
UPD: посмотрел таблицу. Процессор Core 2, операция 32-битного умножения: latency - 5, throughput - 1.5. Так что даже в такой задаче небольшим ПЛИС приходится туго.
bav
Цитата
Честно - не знаю. Просто мне так кажется почему-то. Конечно, зависит еще от того, какой GPU и какая FPGA. У меня, например, плата на Spartan xc3s700A, не слишком вместительная и не слишком быстрая. Всякие Virtех 4-6 многомиллионные - другое дело, но у них и цена заоблачная...

Цитата
Потом надо будет исследовать производительность разных задач на ПЛИС, сравнивать с чисто программной реализацией.

Цитата
Насчет GPU: FFT они считают вполне неплохо. Конкретных цифр не скажу (еще не изучал), но в принципе - GPU работают с целыми 32-битными числами, 32- и 64-битными с плавающей запятой.
Есть исследование производительности GPU NVidia GT200, дочитаю - опишу результаты, если интересно.
Кстати, я не учел, что процессор использует конвейер, так что для выполнения 20 умножений нужно гораздо меньше 20х7 тактов. Скорее, 7 + 19х(1 или 2).
UPD: посмотрел таблицу. Процессор Core 2, операция 32-битного умножения: latency - 5, throughput - 1.5. Так что даже в такой задаче небольшим ПЛИС приходится туго.

сначала нужно определиться что с чем сравнивать. если Ваш Spartan с GPU - мало задач, которые можно сравнивать (но существуют).
если брать процы последних поколений, то и FPGA соответственно ... не Spartan sm.gif

з.ы. Вы бы еще max3032 сравнили с четырехядерником sm.gif
bogaev_roman
Цитата(Alexium @ Mar 11 2011, 17:34) *
UPD: посмотрел таблицу. Процессор Core 2, операция 32-битного умножения: latency - 5, throughput - 1.5. Так что даже в такой задаче небольшим ПЛИС приходится туго.

Ну где туго. Берите порядок под 100, влезть должно, умножители по лутам раскидайте, промежуточные результаты - в регистры, частоту в 50МГц всяко получите. Процессору 100 умножений за 150 тактов плюс еще 100 сложений. Выгода - 250 раз, частота для одного ядра - 50МГц*250=7,5ГГц. Сравнивать уже можно.
PS/ Почему 50МГц? Максимальная тактовая же для spartan 3a - 320МГц вроде, ну понятно что ее не получить, но 150 то можно думаю будет выжать при полной конвейеризации?
PSS/Попробуйте реализовать какой-нить FIR 10 порядка и посмотреть во что это выльется в процентном соотношении к полной площади и частоте (только отключите использование аппаратных умножителей). Дальше можно будет рассчитать примерный максимальный порядок фильтра.
Alexium
Во-первых: с GPU, конечно, спавнивать тяжело. А вот процессор современный обогнать, я надеюсь, удастся.
А во-вторых - можно ведь сравнить со Спартаном на 50 МГц и экстраполировать на впятеро больший Виртекс на 200 МГц. Стоимость сравнить, опять же... Сказать, что в таких-то задачах такие-то FPGA выгоднее, чем современные ЦП (надеюсь, что где-то все-таки выгоднее).

Цитата(bogaev_roman @ Mar 11 2011, 17:25) *
Ну где туго. Берите порядок под 100

Да, так гораздо интереснее. А 50 МГц потому, что такой кварц на плате. Если и не 150, то 100-120 точно можно выжать, но нужно будет внешний генератор изготовить. Хотя я где-то читал, что вдвое частоту умножить можно с помощью ресурсов платы.
bav
Цитата
Сказать, что в таких-то задачах такие-то FPGA выгоднее, чем современные ЦП (надеюсь, что где-то все-таки выгоднее).

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

точно не помню, но в спартане есть pll
Alexium
Цитата(bav @ Mar 11 2011, 17:47) *
чип, оптимизированный под определенную задачу по определению справится лучше, чем универсальный процессор.

Конечно, на то и расчет! Только нужно теперь, чтобы кто-то поделился проектами для ПЛИС, чтобы я мог именно в своей системе. со своими накладными расходами проанализировать производительность.

Цитата(bav @ Mar 11 2011, 17:47) *
точно не помню, но в спартане есть pll

Я посмотрел документацию - DCM (digital clock manager) умеет удваивать частоту. Выходит, что с одного DCM можно получить 100 МГц, а с двух - любую частоту от 100 до 200. Не знаю, правда, рассчитаны ли они на последовательное соединение.
bav
Цитата
Не знаю, правда, рассчитаны ли они на последовательное соединение.

читайте или пробуйте sm.gif
Цитата
Конечно, на то и расчет! Только нужно теперь, чтобы кто-то поделился проектами для ПЛИС, чтобы я мог именно в своей системе. со своими накладными расходами проанализировать производительность.

может, я не врубаюсь, но сравнивать автобус и грузовую машину тяжело. дело в том, что на защите у Вас спросят: "и что Вы хотите доказать? что на ПЛИС можно считать?"
к примеру, есть потоковые процессоры (SPI), в них несколько АЛУ, из которых можно сделать конвейер. многие задачи решаются быстрее чем на х86 и не хуже чем на ПЛИС.
Alexium
Цитата(bav @ Mar 11 2011, 18:29) *
может, я не врубаюсь, но сравнивать автобус и грузовую машину тяжело. дело в том, что на защите у Вас спросят: "и что Вы хотите доказать? что на ПЛИС можно считать?"

Может, я не врубаюсь, но по-моему, сравнение все-таки имеет смысл при определенных условиях. А защита, все-таки, не суд, чтобы там что-то доказывать. А если мне зададут такой вопрос - я отвечу, что анализировал применимость ПЛИС для решения некоторых классов задач в сравнении с ЦП.
jojo
>Во-первых: с GPU, конечно, спавнивать тяжело.

Сейчас GPU часто используют для не графических вычислений, а там ПЛИС бывает лучше, чем GPU.

>Сказать, что в таких-то задачах такие-то FPGA выгоднее, чем современные ЦП (надеюсь, что где-то все-таки выгоднее).

Выгоднее, даже при большой разнице в частотах.

Некоторые классы задач прямо перечислены в http://www.altera.com/literature/manual/cookbook.zip.
Я бы ещё добавил генетические задачи http://www.timelogic.com/. Железка простая, а выигрыш в сотни раз.
Alexium
Цитата(jojo @ Mar 11 2011, 22:23) *
Сейчас GPU часто используют для не графических вычислений, а там ПЛИС бывает лучше, чем GPU.

Так я о неграфических и говорю.

Цитата(jojo @ Mar 11 2011, 22:23) *
Я бы ещё добавил генетические задачи http://www.timelogic.com/. Железка простая, а выигрыш в сотни раз.

Да, в этой области FPGA сильны. Но, опять же, проектов в свободном доступе нет, чтоб пощупать...

Спасибо за книгу!
Alexium
Доделал базовый функционал сопроцессора, а что ускорять - так и не придумал sad.gif (DSP-задачи оставил на крайний случай, я там ничерта не смыслю)
Может, еще идей подкинете?..
iiv
Цитата(bogaev_roman @ Mar 11 2011, 17:53) *
Я вот тоже - не знаю, может ли GPU FFT считать, а если может - то с цифрами какой разрядности оперирует и максимальным окном.

На нвидишных графических картах от CUDA 1.3 и выше наш соотечественних Волков, сидящий у Деммеля смог пол аппаратного пика для FFT сделать. То есть если у Вас 4к чисел, то на дешевой карте полное преобразование можно посчитать за 0.4 мкс в двойной точности и примерно за 0.1 мкс в одинарной. Чтобы такое же получить на плиске, минимум пятый стратикс надо взять на 4к умножителей, и то не факт, что влезет. У АТИ-АМД еще круче, недавно видел инфу, что FFT для 1к на одном ядре модернового Радеона можно получить за 20нс, а на карте два ядра, то есть два FFT по 1к за 20нс - боюсь, что ни одна плиска не потянет.


Цитата(bogaev_roman @ Mar 11 2011, 17:53) *
Если у Вас задача стоит чего-нить наваять и сравнить, а насколько это быстрей будет подсчитано в ПЛИС, чем в процессоре, то сделать все довольно просто.
Сколько в Вашей ПЛИСке встроенных умножителей?
Создаете FIR фильтр с порядком, равным кол-ву аппаратных умножителей и распаралеливаете структуру фильтра, а процессору даете формулу для расчета в лоб - пусть загибается.
Ну и получится, что в ПЛИС результат на выходе будет через latency, но каждый такт, а процессор все вычислит если у него одна оперция за такт через Nx2-1 тактов минимум, N - порядок фильтра. При порядке 51 процессор должен сделать 51 умножений и 50 сложений.


А если по-честному, распараллелить по всем ядрам проца, попользовать SSE2-SSE3 то проц очевидно в 4-16 раз быстрее будет все это выплевывать, а если все сидит в кеше, то есть если взять 3-ий стратикс, который результат будет плевать с частотой 400МГц, и квад-кор с 3ГГц, то последний с легкостью сделает по 4 FIRа с частотой 250МГц, ессно что стратикс будет серьезно не дешевле квад кора...

Короче я к тому, что задачу подобрать, чтобы плиска была лучше - не совсем-то и просто, особенно если с процессора (а тем более с ГПУ) снимать то, что реально снять можно.

ИМХО: у процев и ГПУ очень логические операции хромают, так как АЛУ все на плавующую точку заточены, а у ПЛИСки как раз на оборот. посмотрите в эту сторону, криптография, и тд. Возможно что-то и найдется.

У меня у самого есть только одна задача, где плиска больше флопов показывает, но только из-за того, что в плиску удается очень быстрый (2ГБайт в секунду) поток завести, а, то же самое с обычным процем потребовало бы больших габаритов.
iiv
Цитата(jojo @ Mar 11 2011, 23:23) *
Сейчас GPU часто используют для не графических вычислений, а там ПЛИС бывает лучше, чем GPU.


Уважаемый jojo,

не первый раз вижу, что Вы утверждаете, что ПЛИС лучше или быстрее GPU. Простите меня покорнейше, не ради стеба, а реально сильно интересуюсь на какой же все-таки задаче (не притянутой за уши) такое происходит?

ИМХО. Я сам знаю одну такую задачу, но только одну... Во всех остальных, при одинаковой цене, GPU делает плис как тузик грелку, обычно в 10 и более раз. Ессно я не рассматриваю графические карты лаптопов или очень дешевые GPU, но и вычислительные плиски (а борды тем более) редко меньше пары сотен зеленых стоят.
Maverick
Цитата(iiv @ Apr 13 2011, 02:55) *
не первый раз вижу, что Вы утверждаете, что ПЛИС лучше или быстрее GPU. Простите меня покорнейше, не ради стеба, а реально сильно интересуюсь на какой же все-таки задаче (не притянутой за уши) такое происходит?

ИМХО. Я сам знаю одну такую задачу, но только одну... Во всех остальных, при одинаковой цене, GPU делает плис как тузик грелку, обычно в 10 и более раз. Ессно я не рассматриваю графические карты лаптопов или очень дешевые GPU, но и вычислительные плиски (а борды тем более) редко меньше пары сотен зеленых стоят.

Да ПЛИС быстрее...
Из-за возможности выполнения параллельно нескольких задач, а процессор все делает последовательно.
Например задача:
a+b+c+d
процессор это будет делать последовательно, а в ПЛИС можно это посчитать за 3 такта.
Alexium
Рискну предположить, что современная емкая ПЛИС типа Stratix/Virtex сможет стравняться с GPU среднего уровня в арифметических задачах с меньшей разрядностью, чем разрядность ГП (скажем, 16 бит, или даже 12), а также в задачах, не являющихся арифметическими или арифметически интенсивными, например - работа со строками (поиск подстроки и т.п.).

Цитата(Maverick @ Apr 13 2011, 08:20) *
Например задача:
a+b+c+d
процессор это будет делать последовательно, а в ПЛИС можно это посчитать за 3 такта.

Увы, не будет. Процессор это тоже посчитает за 3 такта (дурацкий ОоО! sm.gif ), только такты у него раз в 10 короче.


Какие вычисления требуют много итераций над небольшим объемом входных данных?
bogaev_roman
Цитата(Alexium @ Apr 13 2011, 09:54) *
Увы, не будет. Процессор это тоже посчитает за 3 такта (дурацкий ОоО! sm.gif ), только такты у него раз в 10 короче.

А если требуется подсчитать сумму тысячи элементов? Типичный, кстати, согласованный фильтр (простейший коррелятор), с одноразрядным коэффициентом. Например требуется подсчитать сумму 16384 элементов (одноразрядных), сколько тактов потребуется? Я на virtexIIpro за один такт подсчитаю, правда с latency в несколько тактов на частоте этак в 150-200МГц.
Alexium
Цитата(bogaev_roman @ Apr 13 2011, 09:41) *
Например требуется подсчитать сумму 16384 элементов (одноразрядных)

Что значит одноразрядных? Сколько бит каждый элемент? Они целые?
iiv
Цитата(bogaev_roman @ Apr 13 2011, 09:41) *
А если требуется подсчитать сумму тысячи элементов? Типичный, кстати, согласованный фильтр (простейший коррелятор), с одноразрядным коэффициентом. Например требуется подсчитать сумму 16384 элементов (одноразрядных), сколько тактов потребуется? Я на virtexIIpro за один такт подсчитаю, правда с latency в несколько тактов.

А это уже интереснее, действительно, суммы, разности, логика, особенно битовых операций, на плисках можно сделать эффективнее, из-за того, что в плиске таких устройств много - вот в 4 циклоне 114к операций можно забабахать, при стоимости борды в 500 бакс, а это при частоте в 200мгц будет 2*10^{13} операций в секунду. Если такие операции не удалось распараллелить внутрь 32 битного инта, то самая быстрая карта от АТИ сможет сделать только 5*10^{12}, что, конечно, в 4 раза меньше. А вот придумать реальную задачу, нужную "народному хозяйству", будет довольно не легко.

А в ГПУ кстати необходимо имень около 1000-10000 параллельных комманд, чтобы загрузить все арифметические устройства, и, 16к сумма конечно есть довольно плохой пример для ГПУ, так как бинарное дерево параллелится только по логарифму от пика производительности, и умножители не будут задействованы, поэтому эффективность такой операции по сравнению с пиком производительности будет, думаю, около 0.1.
bogaev_roman
Цитата(Alexium @ Apr 13 2011, 10:48) *
Что значит одноразрядных? Сколько бит каждый элемент? Они целые?

Каждый элемент - 1бит - 1 или 0, как Вы их интерпритировать будете в процессоре - другой вопрос, в ПЛИС - 1 бит. Это к тому, что говорил Maverick
Цитата
Из-за возможности выполнения параллельно нескольких задач, а процессор все делает последовательно.


Цитата
А вот придумать реальную задачу, нужную "народному хозяйству", будет довольно не легко.

Это есть нормальная задача для ЦОС в цифровых модемах, если требуется расширение спектра посредством ПСП.
iiv
Цитата(Maverick @ Apr 13 2011, 08:20) *
Да ПЛИС быстрее...
Из-за возможности выполнения параллельно нескольких задач, а процессор все делает последовательно.
Например задача:
a+b+c+d
процессор это будет делать последовательно, а в ПЛИС можно это посчитать за 3 такта.

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

Вот сижу я сейчас за обычным и7, вставлен он в режиме мультитреда, и при порграммировании мне приходится писать специальные ОпенМП команды почти перед каждым циклом, чтобы тело цикла было разбросанно по тредам, которых в моем компьютере 8 штук получается. Если в теле цикла у меня есть последовательность арифметических операций, которая не зависит последовательно друг от друга по аргументам, то компиллер (обычный GNU Fortran) разбрасывает это все по SSE2-SSE3 так, что я могу выполнить до 4 операций с двойной точностью за такт, или 8 операций с одинарной точностью за такт В КАЖДОМ треде. Итого, 64 параллельных операций я всегда должен иметь ввиду даже на моем дохлом компе, стоимость которого меньше штуки зеленых, а ведь бывают и по 24 ядра машинки!

И это все даже не графические карты, а обычные процессоры, конечно если Вы будите сравнивать плиску с Пиком или Атмегой, то да, там все последовательно, но, не с современными Интелами и АМДшниками, там уже 20 лет как все параллельно, только пользоваться этим правильно надо, как и в плисках!
Alexium
Цитата(iiv @ Apr 13 2011, 09:56) *
А вот придумать реальную задачу, нужную "народному хозяйству", будет довольно не легко.

Такого жесткого требования у меня нет. Думаю, достаточно будет какой-то подзадачи, конкретного алгоритма, который может и не иметь большой ценности сам по себе. Только нужно тогда внятно объяснить, для решения какой цельной задачи это применяется. А я, опять же, с предметной областью DSP не знаком. Если кто приведет пример(ы) - буду благодарен.

Цитата(bogaev_roman @ Apr 13 2011, 09:57) *
Это есть нормальная задача для ЦОС в цифровых модемах, если требуется расширение спектра посредством ПСП.

Что такое ПСП?
Maverick
Цитата(Alexium @ Apr 13 2011, 10:18) *
Что такое ПСП?

Псевдослучайная последовательность
iiv
Цитата(bogaev_roman @ Apr 13 2011, 09:57) *
Это есть нормальная задача для ЦОС в цифровых модемах, если требуется расширение спектра посредством ПСП.

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

ИМХО, 2 Alexium:
основное достоинство плиски перед процессором - быстрый ввод данных. и еще достоинство - битовые и логические операции.

Я бы на Вашем месте попробовал показать все на примере совсем примитивного роутера етернет или еще каких пакетов, соединяющее несколько компьютеров. ИМХО безпроигрышный вариант для Вас, так как можно вместо етернет придумать что-то ну совсем простое (Вы же диплом пишете, или как) ну и на процессоре все тоже просто, а показать, что даже самая самая простая девборда (ДЕ0, например) может на раз прокачать 2-3ГБайта в секунду, а от процессора Вы это еще долго просить будете, тут будет совсем просто.

Конечно может прокатить и пример с тяжелыми вычислениями, но только при условии, что профы на защите не в курсе про многопоточность, многоядерность и тд, но тут и самому может быть не сильно приятно утверждать то, что не есть правда на самом деле...
bogaev_roman
Цитата(Alexium @ Apr 13 2011, 11:18) *
Что такое ПСП?

Коротко - пседво случайная последовательность, псевдо шумовая последовательность. Используется для расширения спектра информационного сигнала. Ну была полоса скажем 1Мгц, после расширения на 1000 будет 1КГц, ну фактически вся мощность расползается по новой полосе. Позволяет достичь помехозащищенности и незаметности. Помехозащизенность - если какой-то поддиапазон нового диапазона будет забит (в разумных пределах), система будет работать. Незаметность - т.к. спектр сигнала размазан, его трудно распознать на фоне шумов (не зная свойств сигнала и ПСП) - все равно что "ловить рукой рыбу в озере с мутной водой".
PS/ Извиняюсь за кривость языка sm.gif

Цитата
я, к сожалению, не в теме, но, смею предположить, что для того, чтобы просуммировать 16к однобитовых чисел, Вам нужно как-то эти данные в плиску завести. Сколько тактов будет это длится? Поэтому, совершенно согласившись с Вами, что это нужная народному хозяйству задача, сомневаюсь, что в Вами предложенном примере, эта операция выполняется каждый такт, а, если это не так, то, повидимому эту операцию можно из 16к параллельных шагов перевезти в что-то совсем не параллельное. Поправьте меня, пожалуйста, если я не прав!

Это обычный КИХ фильтр (цель правда другая), только коэффициенты одноразрядные, разрядность входных данных обычно зависит от АЦП, но поступает на вход фильтра только знак (0 или 1). Данные вводятся в схему последовательно, в сдвиговый регистр. Каждый такт происходит перемножение каждой ячейки регистра на собственный коэффициент и сложение результатов перемножения (в конкретном случае это тупо XOR или XNOR). Схема, между прочим, довольна распространена в различных вариациях и используется для снятия ПШС.
Alexium
Цитата(iiv @ Apr 13 2011, 10:31) *
ИМХО, 2 Alexium:
основное достоинство плиски перед процессором - быстрый ввод данных.

К сожалению, моя система этим достоинством не обладает... Хотя бы потому, что подключена к компьютеру через СОМ-порт. Ну и архитектура системы такова, что иметь "подопытный" модуль с суммарной шириной входов больше 16-32 байт нереально.


Цитата(bogaev_roman @ Apr 13 2011, 10:35) *
Коротко - пседво случайная последовательность, псевдо шумовая последовательность. Используется для расширения спектра информационного сигнала. Ну была полоса скажем 1Мгц, после расширения на 1000 будет 1КГц, ну фактически вся мощность расползается по новой полосе. Позволяет достичь помехозащищенности и незаметности. Помехозащизенность - если какой-то поддиапазон нового диапазона будет забит (в разумных пределах), система будет работать. Незаметность - т.к. спектр сигнала размазан, его трудно распознать на фоне шумов (не зная свойств сигнала и ПСП) - все равно что "ловить рукой рыбу в озере с мутной водой".
PS/ Извиняюсь за кривость языка sm.gif

Понял, спасибо! Я знаком с концепцией расширения спектра (изучал немного основы цифровой беспроводной передачи данных), а вот именно о ПСП не слышал.

Цитата(iiv @ Apr 13 2011, 10:31) *
Я бы на Вашем месте попробовал показать все на примере совсем примитивного роутера етернет или еще каких пакетов, соединяющее несколько компьютеров.

К сожалению, это не пройдет. У меня тема - именно математический сопроцессор, а не коммуникационный контроллер...
Так что, остается только подбор паролей по известному значению хэша? Больше ничего в голову не приходит...


Может, какие-нибудь численные методы на много-много итераций?
Maverick
Цитата(Alexium @ Apr 13 2011, 10:42) *
К сожалению, это не пройдет. У меня тема - именно математический сопроцессор, а не коммуникационный контроллер...
Так что, остается только подбор паролей по известному значению хэша? Больше ничего в голову не приходит...
Может, какие-нибудь численные методы на много-много итераций?

Например такая задача:
Есть фото человека и есть база людей с "кучей" фото. Вам надо быстро найти человека (ФИО, адрес проживания и т.д.). Комп очень долго будет производить сравнение, а если например в ПЛИС организовать распаралеливание и ускорить поиск. Вначале ПЛИС получает начальную фото человека, который разыскивается, т.е происходит начальная инициализация. Потом Комп последовательно выдает в ПЛИС (может быть несколько) фото из базы и получает ответ от ПЛИС совпало или нет, если нет Комп передает новое фото и так далее.
Задача я так думаю будет актуальна правохранительнм органам, особенно если база более 1 000 000 людей.

Или тут Комп (процессор) тоже выигрывает?
jojo
Цитата(iiv @ Apr 13 2011, 03:55) *
Уважаемый jojo,

не первый раз вижу, что Вы утверждаете, что ПЛИС лучше или быстрее GPU. Простите меня покорнейше, не ради стеба, а реально сильно интересуюсь на какой же все-таки задаче (не притянутой за уши) такое происходит?

ИМХО. Я сам знаю одну такую задачу, но только одну... Во всех остальных, при одинаковой цене, GPU делает плис как тузик грелку, обычно в 10 и более раз. Ессно я не рассматриваю графические карты лаптопов или очень дешевые GPU, но и вычислительные плиски (а борды тем более) редко меньше пары сотен зеленых стоят.


В области защиты данных и информационной безопасности, например, ПЛИСы с большой вероятностью будут гораздо быстрее процессоров.
Это даже можно утверждать sm.gif

На вещественных операциях, весьма вероятно, ПЛИС проиграет процессору.
На днях позавидовал четырём терафлопсам ATI, посмотрел IP Virtex-6 LX240T. Пожалуй, что-то близкое к 10...50 Гфлопс из него можно выжать, если сильно повезёт. Но у нас есть в запасе ход конём - можно попытаться выполнить операции в каком-то промежуточном представлении чисел, не производя преобразование в IEEE754 туда-сюда..

Был бы интерес к задаче, а оптимизацию мы завсегда можем провести.

Например, делаем утверждение, что ПЛИС в некоторой задаче быстрее процессора.
Это значит, что нам достаточно логических ресурсов, достигнута высокая частота, отсутствуют ограничения на потоки данных.
Два первых фактора действуют совместно, задавая общую производительность (произведение количества юнитов и частоты).
Третий файктор влияет на простой юнитов и вызывает снижение производительности.

В GPU и x86 есть слабые места - архитектура и набор инструкций.
Например, при недостатке shared memory в GPU или регистров в x86 конвейер может простаивать.
Или в наборе инструкций SSE нет циклического сдвига, тоже теряем производительность. Опять же, двухоперандные инструкции задают свои ограничения.

Потом, мы можем сделать нестандартную аппаратуру, например, с синхронным статическим ОЗУ, с гигабитными линками между платами.
Наконец, ПЛИС потребляет значительно меньше, чем GPU и процессор, даже тогда, когда их обгоняет по производительности.



Alexium
Цитата(Maverick @ Apr 13 2011, 11:05) *
Или тут Комп (процессор) тоже выигрывает?

От скорости ввода/вывода зависит. Если бы по Pci-express мой сопроцессор подключить - можно было б думать, а так - мне надо искать задачи, которые не упираются в ввод-вывод...
Maverick
Цитата(Alexium @ Apr 13 2011, 12:54) *
От скорости ввода/вывода зависит. Если бы по Pci-express мой сопроцессор подключить - можно было б думать, а так - мне надо искать задачи, которые не упираются в ввод-вывод...

и только от ввода/вывода информации????
Почему Вы так считаете?

Было бы не плохо этот документ почитать

Довольно интересный докумет sm.gif

Документ №2
iiv
Цитата(Maverick @ Apr 13 2011, 13:00) *

Покупать эту статью лениво, но я могу привести
противоположное мнение


Цитата(Maverick @ Apr 13 2011, 13:00) *

Читаем этот документ, тесты на С1060, получено 3ГФлопа. Достал из чулана старую теслу С1060, чтоб по-чесному было, запустил только что на ней GEMV (то, что эти авторы почему-то называют GAXPY), получил 31ГФлопс. После такого вранья читать дальше этот опус расхотелось.


Цитата(Maverick @ Apr 13 2011, 13:00) *


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

ЗЫ: современный 5790 радеон у меня делает ту старую С1060 Теслу раз так в 10. А на плисках за два последних года число умножителей в 10 раз тоже увеличилось? sm.gif

Цитата(jojo @ Apr 13 2011, 11:35) *
В области защиты данных и информационной безопасности, например, ПЛИСы с большой вероятностью будут гораздо быстрее процессоров.
Это даже можно утверждать sm.gif


согласен!

Цитата(jojo @ Apr 13 2011, 11:35) *
На днях позавидовал четырём терафлопсам ATI, посмотрел IP Virtex-6 LX240T. Пожалуй, что-то близкое к 10...50 Гфлопс из него можно выжать, если сильно повезёт.


Цитата(jojo @ Apr 13 2011, 11:35) *
Но у нас есть в запасе ход конём - можно попытаться выполнить операции в каком-то промежуточном представлении чисел, не производя преобразование в IEEE754 туда-сюда..


Тоже согласен, если задача позволяет. Одна задача мне позволила сделать такой ход конем на третьем стратиксе, и чтобы получить такую же скорость обработки данных, я должен был достичь 900ГФлопс на ГПУ.

К сожалению, это не всегда проходит, так же как не всегда проходит с памятью, конвейерами и другими способами оптимизации на ГПУ. ИМХО, время разработки на плиске в разы а то и десятки раз больше, да и сложную ветвящуюся задачу не положить, в которой два разных алгоритма примерно одинаково ресурсы должны потреблять, а работать - последовательно. на ГПУ решается просто последовательной загрузкой разных кернелов.

Цитата(jojo @ Apr 13 2011, 11:35) *
Наконец, ПЛИС потребляет значительно меньше, чем GPU и процессор, даже тогда, когда их обгоняет по производительности.


Согласен. Мои данные о той же 900ГФлопной задаче - плисовская борда потребляла 20ватт, а система с двумя ГПУшками на шестиядернике - около 700 ватт. Хотя гигафлопы на бакс оказались одинаковыми sad.gif
jojo
Цитата(iiv @ Apr 13 2011, 16:34) *
ИМХО, время разработки на плиске в разы а то и десятки раз больше, да и сложную ветвящуюся задачу не положить, в которой два разных алгоритма примерно одинаково ресурсы должны потреблять, а работать - последовательно. на ГПУ решается просто последовательной загрузкой разных кернелов.


Тут главное, чтобы было, ради чего работать. "А если нам нужно сделать невозможное, мы поручаем это русским инженерам" ©.

Чтобы время разработки сократить, нужно сделать свой аналог CUDA SDK.
Один раз пройти через драйверописательство и PCIExpress-строительство, потом делать повторное использование библиотек.

Кернелы в ПЛИС можно менять за 100-200 мс через SelectMap.
Наверное, можно сделать даже частичную реконфигурацию, но я не готов бодаться с САПР Xilinx ради неё.


Ethereal
Я с ГПУ не сталкивался, но можно вставить маленькое абстрактное замечание?
Нельзя ли привинтить условия, в которых GPU проигрывает?
Вон, там говорят, что потребление у него сильно выше, чем у ПЛИС. Габаритами плата с ГПУ побольше, наверное? Есть же куча задач, где габариты, потребление, температура и прочие факторы играют важную роль.
Рассмотреть две задачи: работа в стерильном ангаре с большой трубой, из которой поступает жидкий азот со скоростью 10 м3/с, питание от маленькой АЭС рядом с ангаром.
И обратная ситуация. Пыль, грязь, шум, гам, вибрации, устройства размером со спичечный коробок, питание от батареек игрушек серии "Ну погоди" и охлаждение, только если техперсонал подбежит к прибору и подует. Ну и навводить каких-нибудь критериев. Что вот для таких условий ГПУ - это наше все, а вот в таких - ПЛИСы при меньшей производительности рвут ГПУ, как тузик грелку.
S_Hawk
перебор ключей криптоалгоритма DES - вот та задача, на которой ПЛИС еще никто не уделал (асики не в счет).
Архитектура алгоритма достаточно специфична и хорошо ложится на 6-входовые LUT-ы.
mohny
Есть задачи которые отлично решаются с помощью ПЛИС а есть те которые с помощью ПК. Грамотная разбивка задачи на подзадачи даст приятный эффект. Зная специфику ПЛИС(конвеер возможность работы быстро с векторами) можно определить узкие места алгоримов при работе на ПК например и от этого отталкиваться. В сети полно отчетов по тем или иным криптографическим алгоритмам на FPGA и достигнутых скоростях на конерктной платформе
Swup
Я бы посоветовал ТС тоже самое, что уже говорилось выше. Решить классические задачи. Фильтрация, свертки, адаптивная фильтрация. Много-канальные варианты опять же. Просчитать конвейеры необходимые.

Вот пример, я недавно решал:

АЦП выдает сигнал в дополнительном коде. Надо его разбить на квадратуры и немного под задержать. В итоге 4 канала получается. Их надо одновременно фильтровать (фильтр подобрался подходящий 44го порядка). За счет симметрии импульсной характеристики сокращается число умножений в два раза.

Для одного фильтра в итоге делается: 22 сложения симметричных элементов - 1такт, 22 умножения на коэффициенты (13бит*11бит) - 1такт, сложение 22 чисел (по 23бита) - 3такта (добавлен pipeline, чтобы устойчивее работало). Нормировка на выходе к 13 разрядам(делается выбором нужных разр
ядов, вместо деления или умножения и сдвига, так коэффициенты подобраны).

Итого 5 тактов latency на получение результата 4х фильтраций 44го порядка.
Кристалл CycloneII (70k). Работать по оценке должно на 120 Mhz. Занимает меньше 10% процентов ёмкости. То-есть 90% кристалла остается под другие нужды.

Ну тут можно сказать, что камешек не ахти какой, что фильтры можно сделать сложнее ( с какого-то момента надо будет только pipeline'ы вводить на последнее сложение, чтобы max частота сохранялась), что фильтров можно сделать больше, что ПЛИС не только считает (в ней еще n устройств работают одновременно). Всё на плате размером с ладонь.
Можно такое и на процессоре сделать я думаю. Насчет GPU - незнаю.

ПС Идея появилась пока писал.
Вы можете начеркать какой-нибудь распараллеливаемый расчет в matlab или simulink ( многоканальный адаптивный фильтр например) и синтезировать из него c-код и hdl код. Запустить на какой-нибудь машине и посмотреть, как быстро отработает. Хотя это не совсем честно, конечно.
_Anatoliy
Цитата(Swup @ Dec 5 2012, 11:26) *

По такой структуре как Вы описали фильтры уже никто не делает.
FIR
латентность - 2 такта, не зависимо от порядка.
Swup
Цитата(_Anatoliy @ Dec 5 2012, 14:28) *
По такой структуре как Вы описали фильтры уже никто не делает.
FIR
латентность - 2 такта, не зависимо от порядка.


Спасибо, Anatoliy. Смоделировал, посмотрел RTL. Попробую применить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.