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

 
 
> Хранение и работа с большими матрицами в ПЛИС, Размера 1000х500
count_enable
сообщение Aug 6 2014, 18:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Есть большая матрица, размера эдак 1000х500 8-битных целых. Требуемые операции (в порядке приоритета по скорости):
- Сумма выбранных элементов из столбца А, типа А1+А5+А100+А512.
- Сумма выбранных элементов из строки B, типа B1+B5+B100+B512.
- К выбранному элементу добавить или отнять 8-битное целое.
- Заполнение матрицы начальными значениями.

Операций умножения нет. Решение в лоб это декларация двумерного массива и работа как с однопортовой ОЗУ с чтением-записью поэлементно. Но так как по грубым прикидкам операция суммирования в столбце или в строке будет занимать около 3/4 всех вычислений, хочется чего-то более умного. Целевое железо это Virtex 5.

Думаю над тем чтобы разбить столбцы (число строк всегда больше числа столбцов) на отдельные BRAM, тогда можно будет выбрать все элементы строки в один цикл, но обратная задача - все элементы столбца тогда опять получается O(N). Есть ли решения получше? Можно использовать внешнюю DDR, но вряд ли она здесь поможет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RobFPGA
сообщение Aug 6 2014, 23:05
Сообщение #2


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Ну с таким маленьким (чипом конечно же) будет большой секс sm.gif

Немного не понял - если у Вас в BRAM один - или 2 столбца - откуда появился 500 входной сумматор ???

Так как полная матрица внутрь не влезет то остается работать с внешней - а тут увы все упирается в полосу пропускания памяти.
Хорошо если это какая-нибудь *SRAM куда хочу туда и читаю, если же DRAM - то выборка на чтение только по одному направлению матрицы.

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

Я имел ввиду что 2 матрицы хранятся в разных половинах BRAM - старший бит адреса в порте A=0, а в B=1 поэтому как бы имеем 2 независимых блока 512х16 - но это уже не столь актуально.

На DSP удобно не только умножать - но и просто суммировать - один DSP48 может работать как один сумматор 48+48 или
как 2 24+24 или как 4 12+12

Успехов! Rob.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Aug 7 2014, 02:17
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



При диагональном расположении матрицы в памяти можно за один такт выбирать либо всю строку, либо весь столбец(устанавливая нулевую или единичную разность адресов между соседними BRAM), и сразу складывать все элементы строки/столбца на дереве сумматоров. Правда, из-за того, что в из одного BRAM придётся выбирать сразу два элемента, на выборке либо строк, либо столбцов придётся добавить ещё один такт.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- count_enable   Хранение и работа с большими матрицами в ПЛИС   Aug 6 2014, 18:04
- - Maverick   Цитата(count_enable @ Aug 6 2014, 21:04) ...   Aug 6 2014, 18:39
- - SFx   Начните с модели на языке С/С++   Aug 6 2014, 19:00
|- - Maverick   добавлю к словам Цитата(SFx @ Aug 6 2014, 22...   Aug 6 2014, 19:03
- - count_enable   В матлабе уже давно всё работает, матлаб вообще пр...   Aug 6 2014, 19:30
|- - Timmy   Если разместить элементы матрицы в памяти диагонал...   Aug 6 2014, 20:18
- - count_enable   А можно поподробнее, что значит диагонально? К том...   Aug 6 2014, 20:25
|- - Timmy   Цитата(count_enable @ Aug 7 2014, 00:25) ...   Aug 6 2014, 20:44
- - RobFPGA   Приветствую! Полет буйной фантазии - если у В...   Aug 6 2014, 20:49
- - count_enable   RobFPGA, у меня XC5VLX110T, 64 DSP, 296 BRAM18. На...   Aug 6 2014, 22:22
- - ASN   count_enable Уважаемый RobFPGA Вам посоветовал хор...   Aug 7 2014, 04:55
- - count_enable   Нутром чую, что советуете дельные вещи, но полност...   Aug 7 2014, 07:49
- - iiv   Цитата(count_enable @ Aug 7 2014, 00:04) ...   Aug 7 2014, 08:55
- - count_enable   Цитата(iiv @ Aug 7 2014, 12:55) Во-первых...   Aug 7 2014, 09:37
|- - ASN   count_enable Всё верно. Идея в том, что если у Вас...   Aug 7 2014, 10:37
|- - iiv   count_enable теперь конечно проще советовать, но ...   Aug 7 2014, 12:17
- - count_enable   Спасибо, уже начал потихоньку строчить код. Практи...   Aug 7 2014, 10:42
- - RobFPGA   Приветствую! Теоретически TC мог бы впихнуть ...   Aug 7 2014, 13:18
- - count_enable   Лиха беда начало... Существующие реализации RBM им...   Aug 7 2014, 13:58
|- - iiv   Цитата(count_enable @ Aug 7 2014, 18:58) ...   Aug 7 2014, 16:51
- - count_enable   Сразу практический вопрос: необходим ли RAMB18 при...   Aug 7 2014, 15:21
|- - SFx   Цитата(count_enable @ Aug 7 2014, 19:21) ...   Aug 7 2014, 16:10
- - dvladim   Я бы ещё добавил: 1. Идея использования двух порто...   Aug 7 2014, 17:34
- - count_enable   Цитатаесли есть желание, можете подъехать, лично р...   Aug 7 2014, 19:55
|- - iiv   Цитата(count_enable @ Aug 8 2014, 01:55) ...   Aug 7 2014, 22:02
- - count_enable   Да, конечно, будет или Микроблейз или Паверписишка...   Aug 8 2014, 09:34


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 11:24
Рейтинг@Mail.ru


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