Введение¶
Средства разработки программного обеспечения ELcore-50 включают в себя:
компилятор, компоновщик, ассемблер и другие инструменты для сборки исполняемого файла, пригодного для выполнения на DSP;
библиотеку ElcoreCL, реализующую API похожее на OpenCL, которая позволяет запускать задания на DSP, а также обмениваться данными между пользовательским процессом и заданием;
вспомогательную статическую библиотеку elcore-runtime для DSP, содержащую код, необходимый для запуска заданий, работы с DMA и кэшем DSP.
драйвер elcore50, реализующий запуск заданий и управление памятью.
Примерный сценарий разработки ПО для ELcore-50:
Код, который планируется выполнять на DSP, пишется на ассемблере или другом поддерживаемом инструментами языке.
Код из п.1 собирается в виде статически скомпонованного исполняемого файла. Как правило это
*.so
-библиотека. Функции, которые планируется вызывать, должны быть объявлены глобальными.Исполняемые файлы из п.2 загружаются при помощи библиотеки ElcoreCL и глобальные функции, экспортируемые библиотекой, видны пользователю как ядра ElcoreCL (кернелы).
Библиотека ELcoreCL поддерживает два сценария запуска кернелов на DSP:
стандартный: для выполнения кернела назначается один DSP;
spawn/sync: для выполнения кернела назначается несколько DSP с целью распараллеливания вычислений. Один из DSP является основным и выполняют основную программу. Остальные ядра — вспомогательные и подключаются к вычислениям при вызове основным ядром специальных функций (подробнее см. Модель параллельного программирования spawn/sync).
На рисунке ниже приведен пример временной диаграммы использования различных сценариев при запуске
кернелов на DSP, при условии наличия в системе 16 DSP. Обозначение DSPs 0c,1,2,3
означает,
что кернел запускается в режиме spawn/sync, причем DSP0 является основным, а DSP1, DSP2 и
DSP3 — вспомогательными.
Все экспортируемые функции из библиотеки с кодом для ELcore-50 должны следовать документу «Компилятор С/С++ Clang для DSP Elcore50 (32-х битный режим). Соглашение о вызовах».
Диаграмма вызовов¶