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

Не получается ограничить число копий подпрограммы.

Народ!

 

Проблема следующая.

Есть программа на Vivado HLS со структурой как на рисунке:

Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3.

Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных.

Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков).

Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции.

Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена.

 

Кто-нибудь с этой проблемой сталкивался? Это решаемо?

 

post-82826-1535632921_thumb.png

Изменено пользователем videoscan

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


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

Народ!

 

Проблема следующая.

Есть программа на Vivado HLS со структурой как на рисунке:

Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3.

Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных.

Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков).

Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции.

Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена.

 

Кто-нибудь с этой проблемой сталкивался? Это решаемо?

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

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


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

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

 

Т. е. так как на рис?

А что помешает Vivado создать заодно и 3 экземпляра Function4 ?

 

На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем?

post-82826-1535636150_thumb.png

Изменено пользователем videoscan

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


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

Т. е. так как на рис?
Да
А что помешает Vivado создать заодно и 3 экземпляра Function4 ?
Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.
На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем?

В том и проблема что программерский подход к плис однозначно будет приводить к подобным проблемам. Си заточен для последовательного выполнения. ПЛИС же структура по определению параллельная и по этому к ней нужно подходить с другой логикой.

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


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

Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.

 

Но если он создаст 3 экземпляра Function4, то к каждому их них он присоединит по одному экземпляру kernel и все останется по-прежнему.

Но будет время - попробую.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...