|
ПЛИС для вычислений с длинной арифметикой |
|
|
|
Nov 27 2017, 15:18
|
Группа: Участник
Сообщений: 9
Регистрация: 27-11-17
Пользователь №: 100 387

|
Помогите пожалуйста с выбором. Нужно делать вычисления с длинной арифметикой - до 8 тысяч бит. Т.е нужно простое АЛУ, но числа очень длинные. Вычисления относительно простые - сложение, вычитание (сложение с отрицательным в обратном коде), сдвиг на бит и пара таких же длинных счетчиков. Никаких умножений или делений. Т.е задаем начальные значения и и девайс должен складывать (вычитать) числа в зависимости от знакового бита, пока не дойдет до конечного или не найдет совпадения с заданным длинным числом. На компьютере такие вычисления крайне медленные. На GPU тоже, так как в любом случае сложение вычисляется группами по 64 бита. Поэтому подумал, что идеальный вариант - собственное АЛУ, которое делает одну операцию со всеми битами за такт. Насколько я понимаю, самый правильный вариант - ПЛИС. Желательно делать перебор с максимальной скоростью - к примеру если есть возможность 1 или 2 Ггц, то именно это и нужно. Почитал про ПЛИС и есть желание разобраться, но не понятно с какого девайса начинать искать. Не хотелось бы покупать плату, которая в итоге не подойдет для этой задачи. Мне не нужны разные интерфейсы, USB и может быть микроконтроллер на плате пригодится, но остальное по большому счету не очень важно. Посоветуйте пожалуйста с чего начинать и какую плату для разработки выбрать. Самый главный критерий - максимальная производительность и возможность "зашить" свою логическую схему.
|
|
|
|
|
 |
Ответов
|
Nov 28 2017, 17:09
|
Профессионал
    
Группа: Свой
Сообщений: 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, но думать конкуррентно-параллельно при создании алгоритма всё равно придется.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Nov 28 2017, 18:01
|
Группа: Участник
Сообщений: 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, чтобы можно было экспериментировать не только на этой задаче, но и возможно на других.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|