sqrt(2) 0 7 октября, 2017 Опубликовано 7 октября, 2017 · Жалоба Ситуация представлена на картинке. Есть блок с условным названием 1 и множество однотипных блочков 2. Выходы блоков 2 записываются в некий массив (я назвал этот блок MUX) и подаются на входы блоков 2. Полагаю, что правило соответствия элемента массива блоку 2 в контексте вопроса несущественно. Итак, есть блоки, которые рекурсивно что-то вычисляют. Вычисления занимают несколько тактов, поэтому данные от блока 1 на входе блока 2 нельзя обновлять каждый такт. Следовательно, создаётся очередь из данных от блока 1. На самом деле, копятся не выходные данные для блока 1, а то, что поступает ему на вход - поскольку выход блока 1 на самом деле не одна шина с одним и тем же значением для всех блоков 2, а достаточно большой массив, поэтому с точки зрения ресурсов ПЛИС разумнее копить вх. отсчеты с АЦП, которые и поступают на блок 1. То есть, получается следующая схема: отсчеты с АЦП -> RAM -> блок 1 -> блок 2. Таким образом, чтение из RAM происходит каждые M тактов, где M = K+L; K - число тактов на обработку данных в блоке 1, L - число тактов на обработку в блоке 2. А вх. отсчеты поступают каждый такт, и поэтому какую бы большую память не взять - рано или поздно запись новых данных догонит чтение и результаты будут некорректными. Догадываюсь, что подобная проблема возникла не вчера и даже не лет 10 назад. Проблема в том, что не знаю даже по каким словам гуглить. Прошу подсказки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 7 октября, 2017 Опубликовано 7 октября, 2017 · Жалоба Параллелизм и конвееризация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 8 октября, 2017 Опубликовано 8 октября, 2017 · Жалоба Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2. Либо миритесь с частичной потерей входных данных Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sqrt(2) 0 8 октября, 2017 Опубликовано 8 октября, 2017 (изменено) · Жалоба Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2. Либо миритесь с частичной потерей входных данных Да, блоки 2 работают параллельно. Увеличить количество блоков 2 не получится - потому что их и так наставлено столько, что они полностью покрывают входные данные. То есть, входные данные для блоков 2 - вектор из 1024 элементов, каждому блоку 2 надо 4 элемента из этого вектора (для всех блоков это уникальный набор из 4х элементов вектора). Соответственно, делаю 256 параллельно работающих блоков 2. Вся проблема именно в рекурсии. А вообще есть какие-нибудь примеры параллелизации и конвейеризации рекурсивных алгоритмов под ПЛИС или DSP процы? Желательно, чтобы и вх. данные при этом не терялись, или терялись по минимум и можно было бы как-то оценить эти потери. Вообще, у меня есть на примете одна идея как это можно сделать, но при таком раскладе получится ~256*200 блоков 2 + ещё некоторый дополнительный расход памяти, и есть сильное подозрение, что это будет из разряда невпихаемого в никакой ПЛИС. Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС. Если все же пытаться реализовать вариант с 256*200 блоков 2... Имеем: -) 4096 параллельно выполняющихся умножений и вычитаний -) 4*256*200 параллельных сложений -) + еще 256 параллельных сложений, но уже в другом блоке -) 256*200 определений наибольшего из 4х чисел -) +еще 4 определения наибольшего числа из 256 чисел Есть надежда? Изменено 8 октября, 2017 пользователем sqrt(2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 8 октября, 2017 Опубликовано 8 октября, 2017 · Жалоба Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС. Есть надежда? ..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sqrt(2) 0 8 октября, 2017 Опубликовано 8 октября, 2017 · Жалоба ..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна. Ну, например, чтобы не тратить впустую несколько часов, а то и десяток часов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 8 октября, 2017 Опубликовано 8 октября, 2017 · Жалоба Какая у вас частота сэмплирования АЦП? Если все же пытаться реализовать вариант с 256*200 блоков 2... Имеем: -) 4096 параллельно выполняющихся умножений и вычитаний -) 4*256*200 параллельных сложений -) + еще 256 параллельных сложений, но уже в другом блоке -) 256*200 определений наибольшего из 4х чисел -) +еще 4 определения наибольшего числа из 256 чисел Есть надежда? Может, невнимательно читал. А что есть элемент и о каких числах идет речь (тип, разрядность)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться