Перейти к содержанию

Есть ли на форуме спецы по программированию на HLS?

Народ!

Есть ли на форуме спецы по программированию на HLS?

Имеется в наличии:
- Xilinx Virtex UltraScale+ FPGA VCU118 Evaluation Kit (https://www.xilinx.com/products/boards-and-kits/vcu118.html#hardware);
- vivado 2017.4.
Нужно написать программу на Си, которая реализует алгоритм расчета, с большой степенью параллелизма.
Начинаю осваивать, возникли непонятки. Хочется посоветоваться. Понимаю, что это сплошная экзотика, но может есть живые спецы по этой части.
Изменено пользователем videoscan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Приветствую!

Цитата(videoscan @ Mar 1 2018, 16:24) <{POST_SNAPBACK}>
...
Есть ли на форуме спецы по программированию на HLS?
...
есть живые спецы по этой части.

Живой есть - но не скажу что спец - делал несколько небольших модулей для разных задач.
Уж очень эта тема специфическая, особенно в начале мозги выворачивает и ломает стереотипы программирования.

Успехов! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Тогда сформирую вопрос. Возможно в процессе этого и сам пойму.
Упрощенно:
Есть 2 функции на С. Мне надо чтобы они работали одновременно.
Но дело в том, что есть блок памяти (глобальный), используемый обеими функциями.
Я сделал так, чтобы использование общей памяти функциями происходило в разные моменты времени и не пересекается, однако vivado этого не понимает и запускает функции последовательно.
В головной программе, которая вызывает эти функции я поставил директиву DATAFLOW.
Не помогло. При Sythesis выдается предупреждение:
WARNING: [XFORM 203-713] All the elements of global array 'b1_1_1' should be updated in process function 'kernel1_0' (kernel_array.c:272), otherwise it may not be synthesized correctly.
И после C/RLT Cosimalation симулятор показывает, что функции выполняются последовательно.
Бьюсь, ставлю разные директивы - не помогает.
Буду благодарен за любые мысли и обсуждение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Приветствую!

Цитата(videoscan @ Mar 2 2018, 11:55) <{POST_SNAPBACK}>
Тогда сформирую вопрос. Возможно в процессе этого и сам пойму.
Упрощенно:
Есть 2 функции на С. Мне надо чтобы они работали одновременно.
..
Буду благодарен за любые мысли и обсуждение.


Неплохо все ж пример кода какой нибудь - всеж проще будет.

Зачем Вам ОДНОВРЕМЕННЫЙ доступ двух функций к одной памяти? Как Вы конролируете доступ между ними?
Можно ли сделать алгоритм с раздельной памятью и обработкой конвейером?

Ведь в отличии от sw в hw реально возможен одновременный доступ и при наличии зависимостей по переменной между двумя функциями синтезатор не знает как разруливать такое.
Поэтому я и говорил что будет ломать устоявшиеся привычки программирования.

Успехов! Rob.



Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за ответ.
Полезно поговорить даже с самим собой, а тем более с умным человеком.
Решение нашлось.
Пришлось производить чтение и запись во внешний блок памяти только в одной функции, используя промежуточную глобальную переменную для передачи данных на запись из другой функции.
Начинаю потихоньку понимать требуемый стиль программирования.
Директиву DATAFLOW в главной программе оставил и vivado перестал выдавать предупреждения, т.к. видел, что запись и чтение в блок памяти происходят при выполнении разных условий.
Исходники не привожу, потому, как описал я проблему в очень упрощенном виде, функций там не 2, а 4 , связаны через память они крест-на крест, блоков памяти не 2 или 4, а штук 50.
Такой исходник разобрать сложно.
Спасибо.

Цитата(RobFPGA @ Mar 2 2018, 10:29) <{POST_SNAPBACK}>
Зачем Вам ОДНОВРЕМЕННЫЙ доступ двух функций к одной памяти? Как Вы конролируете доступ между ними?


Одна функция обрабатывает данные и передает их другой в качестве входных данных для последующей обработки.
Все функции имеют по 2 блока памяти, с одним работают сами, а в другую в это время пишет сосед, потом они переключаются. Для переключения используется глобальная переменная, общая для всех.
На самом деле будет массив из 100 функций (10*10), работающих параллельно. Такой требуется алгоритм обработки.

Цитата
Можно ли сделать алгоритм с раздельной памятью и обработкой конвейером?

Ведь в отличии от sw в hw реально возможен одновременный доступ и при наличии зависимостей по переменной между двумя функциями синтезатор не знает как разруливать такое.
Поэтому я и говорил что будет ломать устоявшиеся привычки программирования.

Я пришел не из программистов, а из железячников, и писал на VHDL, и привычки, конечно приходится менять.
Изменено пользователем videoscan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Какой смысл делать это на HLS? Чем не подходит традиционный способ разработки?
Насколько сложен алгоритм?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(AVR @ Mar 2 2018, 12:25) <{POST_SNAPBACK}>
Какой смысл делать это на HLS? Чем не подходит традиционный способ разработки?
Насколько сложен алгоритм?

Решили попробовать на HLS ради ускорения. Алгоритм достаточно сложный, используется практически вся память чипа (ее там 20МБ), нужно чтобы это все тарахтело на хорошей частоте (не менее 100 МГц).
Кроме этого алгоритм "живой" в смысле сырой и будет меняться в процессе разработки.
Ну и используемый чип огромен, можно плюнуть на ресурсы (кроме памяти).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Собственно из рассылки electronix
Цитата
Vivado HLS – САПР компании Xilinx для создания цифровых устройств на базе ПЛИС с применением языков высокого уровня. Важным преимуществом САПР Vivado HLS является возможность для инженеров, разрабатывающих программы для ПЛИС, работать на более высоком уровне абстракции. Разработчики прикладного ПО благодаря Vivado HLS получают возможность реализации аппаратного ускорения вычислений при помощи ПЛИС с минимальными затратами времени и ресурсов.

Желающих познакомиться с Vivado HLS и начать его освоение приглашаем на вебинар.

На вебинаре вы узнаете:

1. языки программирования, поддерживаемые Vivado HLS
2. библиотеки, доступные для работы в Vivado HLS
3. как написать простой проект на языке высокого уровня для Vivado HLS
4. полный цикл разработки проекта – от скачивания САПР и получения лицензии и до изготовления файла прошивки и загрузки его в ПЛИС

В качестве демонстрационной платформы будет использоваться отладочный набор AES-A7EV-7A50T-G на чипе XC7A50T-1FTG256C, который Вы можете приобрести в компании «Макро Групп».

Ведущий вебинара – инженер по применению Xilinx Илья Александров.

Вебинар состоится 13 марта в 10:00. Повтор вебинара – 14 марта в 14:00. Время московское.

Участие в вебинаре бесплатное, по предварительной регистрации.


>>> ЗАРЕГИСТРИРОВАТЬСЯ >>> http://bit.ly/webinar-03-2018-xilinx
>>> ЗАРЕГИСТРИРОВАТЬСЯ >>> http://bit.ly/webinar-03-2018-xilinx
>>> ЗАРЕГИСТРИРОВАТЬСЯ >>> http://bit.ly/webinar-03-2018-xilinx


Любые вопросы по теме вебинара или любые другие вопросы по продукции Xilinx задавайте Илье Александрову по адресу fpga@macrogroup.ru или по телефону 8 (800) 333-06-05 доб. 786.

По вопросам, связанным с участием в вебинаре, пишите по адресу marketing@macrogroup.ru или звоните 8 (800) 333-06-05 доб. 255. Компания «Макро Групп» является официальным дистрибьютором Xilinx в России.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Mad_max @ Mar 6 2018, 06:54) <{POST_SNAPBACK}>
Собственно из рассылки electronix

Спасибо. Поучаствую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В сети нашел видеозаписи вебинаров предыдущих лет (надеюсь ничьих авторских прав не нарушил). Посмотрел. В общем все что там сказано уже освоил, а для совсем начинающих - да полезно.
Изменено пользователем videoscan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Если вы еще свои функции на С не написали, то возможно есть смысл попробовать System Generator вместо HLS? Это тоже более высокий уровень абстракции и позволяет вдобавок промоделировать ваши алгоритмы. HLS предназначен для переделки готовых Си программ под FPGA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Mar 7 2018, 16:30) <{POST_SNAPBACK}>
Если вы еще свои функции на С не написали, то возможно есть смысл попробовать System Generator вместо HLS? Это тоже более высокий уровень абстракции и позволяет вдобавок промоделировать ваши алгоритмы. HLS предназначен для переделки готовых Си программ под FPGA.

С System Generator совсем не знаком. Боюсь разбрасываться, сейчас что-то стал понимать в HLS, а тут опять куча новой информации. Времени для этого совсем нет. Я наверное попробую продолжать копать в сторону С.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Если работали с симулинком и можете описать свой алгоритм в виде блоков, то System Generator будет прост в освоении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Mar 8 2018, 20:08) <{POST_SNAPBACK}>
Если работали с симулинком и можете описать свой алгоритм в виде блоков, то System Generator будет прост в освоении.

С симулинком не знаком, в МатЛабе не работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(videoscan @ Mar 2 2018, 11:55) <{POST_SNAPBACK}>
Есть 2 функции на С. Мне надо чтобы они работали одновременно.
Но дело в том, что есть блок памяти (глобальный), используемый обеими функциями.
Я сделал так, чтобы использование общей памяти функциями происходило в разные моменты времени и не пересекается, однако vivado этого не понимает и запускает функции последовательно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация