реклама на сайте
подробности

 
 
> ПЛИС для вычислений с длинной арифметикой
planetzeus
сообщение Nov 27 2017, 15:18
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 27-11-17
Пользователь №: 100 387



Помогите пожалуйста с выбором.
Нужно делать вычисления с длинной арифметикой - до 8 тысяч бит. Т.е нужно простое АЛУ, но числа очень длинные.
Вычисления относительно простые - сложение, вычитание (сложение с отрицательным в обратном коде), сдвиг на бит и пара таких же длинных счетчиков.
Никаких умножений или делений. Т.е задаем начальные значения и и девайс должен складывать (вычитать) числа в зависимости от знакового бита, пока не дойдет до конечного или не найдет совпадения с заданным длинным числом.
На компьютере такие вычисления крайне медленные. На GPU тоже, так как в любом случае сложение вычисляется группами по 64 бита.
Поэтому подумал, что идеальный вариант - собственное АЛУ, которое делает одну операцию со всеми битами за такт. Насколько я понимаю, самый правильный вариант - ПЛИС.
Желательно делать перебор с максимальной скоростью - к примеру если есть возможность 1 или 2 Ггц, то именно это и нужно.
Почитал про ПЛИС и есть желание разобраться, но не понятно с какого девайса начинать искать. Не хотелось бы покупать плату, которая в итоге не подойдет для этой задачи.
Мне не нужны разные интерфейсы, USB и может быть микроконтроллер на плате пригодится, но остальное по большому счету не очень важно.
Посоветуйте пожалуйста с чего начинать и какую плату для разработки выбрать. Самый главный критерий - максимальная производительность и возможность "зашить" свою логическую схему.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
krux
сообщение Nov 28 2017, 17:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



planetzeus
Перенос в FPGA "только АЛУ", как вы это описали - не даст сколько-либо ценного результата.
При переносе в FPGA необходимо вынести в него определенный блок, довольно большой, который осуществляет определенную обработку (заведомо более 10...20 операций) по заранее известному алгоритму. В этим случае можно будет ставить в качестве целей, например, "производительность блока на гарантированном уровне не менее стольких-то обработанных бит на такт" и выстраивать подобные вещи.
Если вы прямо сейчас обладаете только навыками программиста - то для начала вам необходимо зачеркнуть всё, что вы ранее знали про обработку данных при помощи микросхем, и сменить парадигму с "у меня есть жесткий набор инструкций для ЦПУ или АЛУ" на "я могу сделать столько нужных мне действий за такт, сколько мне нужно". Крамольный смысл здесь в чем: матерого программиста сложно переучить на сколь-нибудь годного HDL-щика, в силу того, что программиста с рождения учили что на ЦПУ может выполняться только одна инструкция одновременно. А в HDL можно сделать одновременным выполнение стольких инструкций, сколько нужно. Следующий момент связан с тем, что "матерый программист со стажем" не понимает, что язык описания архитектуры HDL - это не язык программирования. Приходится долго и упорно объяснять, что единственно правильным решением для HDL - является реализация конечного автомата. Что для этого автомата необходимо заранее наметить условия изменения состояния, действия, выполняемые при изменении состояния. Ибо программистам как правило пофиг, потому что они считают что "ежели я не менял значение переменной, то оно должно сохранять свое состояние" по умолчанию, однако в HDL умолчания ведут к провалу; ну и про то, что в результате перехода конечного автомата через несколько состояний что-то где-то может измениться - им тоже плевать. Поначалу. Потом они просто сдаются.
Поэтому.
При переходе от языков программирования высокого уровня необходимо обязательно "слезть с дерева", и перестать считать, что все что ты пишешь на языке HDL - это примерно то же самое что и на C-ях, к примеру.
Это не так, от слова "совсем".
Поэтому у вас два пути - либо найти человека, который в ладах с HDL, и сможет внятно сформулировать какой же вычислительный блок вам сможет помочь, и что для этого нужно, либо "встрять надолго" начав изучение с азов.


Цитата
Я думаю последовательно. Т.е если будут например 4 регистра по 8000 бит, то 2 внешних пина на выбор регистра, один пин для data, один на синхронизацию.

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

зы. полагаю, что если ваш изначальный алгоритм полностью "развернуть", или "по-программистски сделать unroll & inline", то биты конечного результата всегда будут выражаться через биты входных данных. Тогда в "блоке обработки", который планируется к переносу на FPGA нужно эту матрицу (либо несколько матриц) описать, После чего уже пытаться оптимизировать сложность этих действий в раскладках по тактам, и т.д. о чем вам опять-таки сможет объяснить найденный вами человек, который в ладах с HDL

ззы. если у вас есть выход на ИПМ Келдыша РАН, (и если это будет для вас достаточно), то там есть гибридные варианты суперкомпьютеров с интегрированными мульти-модулями ПЛИС, на очень специфическом языке программирования, из семейства C. При этом не придется изучать HDL, но думать конкуррентно-параллельно при создании алгоритма всё равно придется.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
planetzeus
сообщение Nov 28 2017, 18:01
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 27-11-17
Пользователь №: 100 387



Цитата(krux @ Nov 28 2017, 21:09) *
в FPGA нельзя думать последовательно.
нужно думать конкуррентно-параллельно.

Спасибо за развернутый комментарий.

Под последовательной загрузкой я имел в виду, что нет возможности сразу параллельно забить 8000 бит. Нет столько пинов, поэтому последовательно по биту - вполне подойдет для моих задач. Загрузка/считывание данных - это задача эпизодическая, а не основная. Загрузили регистры, запустили процесс, поймалось условие - выгрузили. Не поймалось условие на данном диапазоне - загрузили новые значения.

На ЯП простая операция N == 0 превращается в очень непростую (по времени), если наше N состоит из 8000 бит, а в терминах логики - это большая куча элементов OR, которая практически сразу (с небольшой задержкой в переключениях логики) может выдать либо 1 или 0. Может колхозно рассуждаю, но примерно так)

По моему мнению ни программистами, ни электронщиками не рождаются. Ими ведь как-то становятся)
Есть задача, есть немного времени на эксперименты/самообразование. Почему бы не попробовать? Тем более тема мне интересна и задача обучения работе с ПЛИС не сводится только к этой конкретной задаче. Возможно потом появятся новые задачи. Просто хотелось в начале пути элементарно спросить - а в какую сторону ходить? Попытался максимально как мог описать задачу.

Цитата(_Ivan_33 @ Nov 28 2017, 16:55) *
И все-таки по поводу девайса, посмотрите на решения серверные, отработайте там - https://aws.amazon.com/ru/ec2/instance-types/f1/

В общем-то решение с облаком интересное и для оценки наверное очень даже подходящее. Буду курить в этом направлении. А насчет девайса - для экспериментов хотелось бы что-то в районе $500 - $1000, чтобы можно было экспериментировать не только на этой задаче, но и возможно на других.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- planetzeus   ПЛИС для вычислений с длинной арифметикой   Nov 27 2017, 15:18
- - x736C   8000 тыс за такт на частоте 1 гиг — забудьте. Мож...   Nov 27 2017, 15:54
|- - planetzeus   Цитата(x736C @ Nov 27 2017, 19:54) 8000 т...   Nov 27 2017, 16:11
- - x736C   Ошибся. Имелось в виду 8 тыс., а не 8000 тыс. ПЛИ...   Nov 27 2017, 16:37
- - RobFPGA   Цитата(planetzeus @ Nov 27 2017, 18:18) ....   Nov 27 2017, 16:51
- - _pv   а вот это вот вычитание/сложение одного и того же ...   Nov 27 2017, 17:41
- - planetzeus   Спасибо всем за ответы. Согласен, что сумматор - с...   Nov 27 2017, 17:56
|- - Shivers   Цитата(planetzeus @ Nov 27 2017, 20:56) С...   Nov 28 2017, 06:19
- - _pv   тогда уж https://www.aliexpress.com/item/Xilinx-FP...   Nov 27 2017, 18:04
- - ViKo   Это что, майнеры криптовалюты ищут черный ход?   Nov 27 2017, 20:00
- - _Ivan_33   А что мешает написать это все на opencl под видеок...   Nov 28 2017, 08:29
|- - planetzeus   Цитата(_Ivan_33 @ Nov 28 2017, 12:29) А ч...   Nov 28 2017, 10:37
|- - AVR   Цитата(planetzeus @ Nov 28 2017, 13:37) И...   Nov 28 2017, 10:54
||- - planetzeus   Цитата(AVR @ Nov 28 2017, 14:54) Не, не т...   Nov 28 2017, 11:07
||- - blackfin   Цитата(planetzeus @ Nov 28 2017, 14:07) М...   Nov 28 2017, 11:21
||- - AVR   Цитата(planetzeus @ Nov 28 2017, 14:07) П...   Nov 28 2017, 14:14
||- - Fat Robot   Использовать CLA. Если есть ограничения на pipel...   Nov 28 2017, 15:20
|- - blackfin   Цитата(planetzeus @ Nov 28 2017, 13:37) Я...   Nov 28 2017, 11:00
|- - Alex77   Цитата(planetzeus @ Nov 28 2017, 13:37) В...   Nov 28 2017, 11:21
|- - planetzeus   Цитата(Alex77 @ Nov 28 2017, 15:21) ...   Nov 28 2017, 11:38
|- - blackfin   Цитата(planetzeus @ Nov 28 2017, 14:38) М...   Nov 28 2017, 11:44
||- - jojo   Цитата(blackfin @ Nov 28 2017, 14:44) Выб...   Nov 28 2017, 12:23
||- - blackfin   Цитата(jojo @ Nov 28 2017, 15:23) Или Xil...   Nov 28 2017, 12:28
||- - jojo   Цитата(blackfin @ Nov 28 2017, 15:28) Да ...   Nov 28 2017, 12:45
||- - x736C   Цитата(jojo @ Nov 28 2017, 15:45) Кстати,...   Nov 28 2017, 22:30
||- - jojo   Цитата(x736C @ Nov 29 2017, 01:30) Я бы е...   Nov 29 2017, 05:33
|- - Realking   Цитата(planetzeus @ Nov 28 2017, 14:38) В...   Nov 28 2017, 12:57
|- - RobFPGA   Приветствую. Цитата(planetzeus @ Nov 28 2017,...   Nov 28 2017, 13:55
- - AVR   Не увидел, чтобы кто-то спросил автора темы: зачем...   Nov 28 2017, 10:08
- - ViKo   Инкрементировать 8000-разрядное число (т.е. + 1) н...   Nov 28 2017, 10:57
- - _Ivan_33   И все-таки по поводу девайса, посмотрите на решени...   Nov 28 2017, 12:55
|- - krux   Цитата(planetzeus @ Nov 28 2017, 21:01) П...   Nov 28 2017, 18:25
- - iiv   Цитата(planetzeus @ Nov 27 2017, 20:18) П...   Nov 28 2017, 18:23
|- - planetzeus   Цитата(iiv @ Nov 28 2017, 22:23) То есть ...   Nov 28 2017, 18:42
|- - AVR   Цитата(planetzeus @ Nov 28 2017, 21:42) С...   Nov 28 2017, 19:23
|- - planetzeus   Цитата(AVR @ Nov 28 2017, 23:23) Только в...   Nov 28 2017, 20:05
|- - jojo   Цитата(planetzeus @ Nov 28 2017, 23:05) И...   Nov 28 2017, 20:45
||- - blackfin   Цитата(jojo @ Nov 28 2017, 23:45) На вдав...   Nov 28 2017, 21:39
||- - blackfin   Цитата(jojo @ Nov 28 2017, 23:45) 25*2*80...   Nov 29 2017, 05:05
||- - jojo   Цитата(blackfin @ Nov 29 2017, 08:05) Рез...   Nov 29 2017, 05:39
||- - blackfin   Цитата(jojo @ Nov 29 2017, 08:39) Тем не ...   Nov 29 2017, 05:43
|- - Plain   Цитата(planetzeus @ Nov 28 2017, 23:05) П...   Nov 28 2017, 23:24
- - Shivers   Я там выше уже писал про систему остаточных классо...   Nov 29 2017, 05:15
|- - blackfin   Цитата(Shivers @ Nov 29 2017, 08:15) Все ...   Nov 29 2017, 05:36
- - vladec   И все таки, почему как предлагает Shivers не хотит...   Nov 29 2017, 07:29
- - Александр С.   Когда-то Mentor Graphics агитировал всем делать AS...   Dec 13 2017, 16:23
- - jojo   Цитата(Александр С. @ Dec 13 2017, 19:23)...   Dec 13 2017, 16:42
- - iosifk   Цитата(Александр С. @ Dec 13 2017, 19:23)...   Dec 13 2017, 19:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01731 секунд с 7
ELECTRONIX ©2004-2016