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

|
Помогите пожалуйста с выбором. Нужно делать вычисления с длинной арифметикой - до 8 тысяч бит. Т.е нужно простое АЛУ, но числа очень длинные. Вычисления относительно простые - сложение, вычитание (сложение с отрицательным в обратном коде), сдвиг на бит и пара таких же длинных счетчиков. Никаких умножений или делений. Т.е задаем начальные значения и и девайс должен складывать (вычитать) числа в зависимости от знакового бита, пока не дойдет до конечного или не найдет совпадения с заданным длинным числом. На компьютере такие вычисления крайне медленные. На GPU тоже, так как в любом случае сложение вычисляется группами по 64 бита. Поэтому подумал, что идеальный вариант - собственное АЛУ, которое делает одну операцию со всеми битами за такт. Насколько я понимаю, самый правильный вариант - ПЛИС. Желательно делать перебор с максимальной скоростью - к примеру если есть возможность 1 или 2 Ггц, то именно это и нужно. Почитал про ПЛИС и есть желание разобраться, но не понятно с какого девайса начинать искать. Не хотелось бы покупать плату, которая в итоге не подойдет для этой задачи. Мне не нужны разные интерфейсы, USB и может быть микроконтроллер на плате пригодится, но остальное по большому счету не очень важно. Посоветуйте пожалуйста с чего начинать и какую плату для разработки выбрать. Самый главный критерий - максимальная производительность и возможность "зашить" свою логическую схему.
|
|
|
|
|
 |
Ответов
|
Nov 28 2017, 10:37
|
Группа: Участник
Сообщений: 9
Регистрация: 27-11-17
Пользователь №: 100 387

|
Цитата(_Ivan_33 @ Nov 28 2017, 12:29)  А что мешает написать это все на opencl под видеокарту, протестировать, а затем переписать код под ПЛИС, протестировать на хостинге, не покупая дорогие ПЛИС и карты и сравнить результаты. Всё, что мне нужно - это операция (2x+1), инкремент и сумма двух чисел. Я уже сказал, операция 2x + 1 на логике в любом случае будет быстрее, так как это можно сделать за единицу времни. Т.е есть на входе схемы число X из 8000 бит, на выходе X*2+1, простая логическая схема. Ни CUDA, ни OpenCL API не позволяют такого. Как можно другим способом сделать сдвиг 8000 бит за одну операцию? На CUDA (или OpenCL) можно распараллелить на блоки вычисления, но не разбить длинное число на биты и вычислять куски отдельными блоками/потоками, так как синхронизировать потом все это совсем нетривиальная задача. Суммирование можно попробовать оптимизировать логикой. По моему это в любом случае будет быстрее, чем вычислять суммы на GPU блоками. Например разбить все биты на группы по 8 бит и складывать байтами. Я не спец в электронике, вот например схема:  после такого сумматора первого уровня получаем два числа, которые затем складываем как в обычном сумматоре с итерациями и переносами... если A = 2543 , а B = 1052, два блока по 8 бит A = (9)(239) B = (4)(28) то после первого уровня получаем два числа C1 = (13)(11) C2 = (1)(0) (здесь всегда будут только 1 или 0) Складываем сумматором второго уровня (с циклом если нужно) Получаем (14)(11) = 3595 Первый уровень сумматора сразу выдает результат без необходимости переносов в пределах 8 битного блока. Второй уровень содержит меньше логики. В общем, есть надежда, что с помощью внутрисхемной логики можно ускорить решение задачи во много раз. Цитата(AVR @ Nov 28 2017, 14:08)  Не увидел, чтобы кто-то спросил автора темы: зачем это всё? Может реально решить поставленную задачу иными способами. Иного способа не нашел, к сожалению. Просто исследования, хочу попробовать решить эту задачу на ПЛИС. Компьютер решает задачу, но очень медленно.
|
|
|
|
|
Nov 28 2017, 11:21
|
Местный
  
Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695

|
Цитата(planetzeus @ Nov 28 2017, 13:37)  Всё, что мне нужно - это операция (2x+1), инкремент и сумма двух чисел. Я уже сказал, операция 2x + 1 на логике в любом случае будет быстрее, так как это можно сделать за единицу времни. Т.е есть на входе схемы число X из 8000 бит, на выходе X*2+1, простая логическая схема. Почему-то мне кажется что некорректно описано задание. "X*2+1" - сиё означает умножение на 2 те сдвиг и пририсовывание бита 1. Всё это реализуется "статическим сдвигом (т.е. реального сдвига нет)" и добавления вечной 1-цы. Таким образом схема будет работать на максимальной скорости в 500МГц. А на словах задание звучит как "А+Б+1". Что Автору требуется ?
|
|
|
|
|
Nov 28 2017, 11:38
|
Группа: Участник
Сообщений: 9
Регистрация: 27-11-17
Пользователь №: 100 387

|
Цитата(Alex77 @ Nov 28 2017, 15:21)  "X*2+1" - сиё означает умножение на 2 те сдвиг и пририсовывание бита 1. Всё это реализуется "статическим сдвигом (т.е. реального сдвига нет)" и добавления вечной 1-цы. Таким образом схема будет работать на максимальной скорости в 500МГц. А на словах задание звучит как "А+Б+1". Что Автору требуется ?  Именно! Нужна максимальная скорость - все операции, которые можно реализовать схемой вход->[схема]->выход (с нужным значением). Операций нужно несколько, я ж написал. (2х+1) - одна операция. А+Б - другая операция. Сравнение с 0 - третья операция, которая тоже решается логической схемой. Мне требуется только грамотный совет) Какой девайс выбрать чтобы все это пробовать? Т.е чтобы хватило логических элементов, чтобы была максимальная скорость. Девайсы недешевые, не хотелось бы потратить деньги и понять, что полностью реализовать не получится потому что мало элементов, или другие ограничения. Цитата(blackfin @ Nov 28 2017, 15:21)  Как вы собираетесь загружать в ПЛИС 8000-разрядные числа? Я думаю последовательно. Т.е если будут например 4 регистра по 8000 бит, то 2 внешних пина на выбор регистра, один пин для data, один на синхронизацию. Еще раз говорю, я не спец в электронике. Максимум, что я делал - это RPi и на уровне "помигать светодиодом". Вот хочу освоить ПЛИС, спрашиваю у людей с опытом совета.
|
|
|
|
Сообщений в этой теме
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  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       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
Перенос в FPGA "только АЛУ", ... Nov 28 2017, 17:09 planetzeus Цитата(krux @ Nov 28 2017, 21:09) в FPGA ... Nov 28 2017, 18:01  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
|
|
|