Примечания к выпуску

1.3

Главное

Данный релиз содержит значительную переработку внутреннего управления очередью исполнения заданий в драйвере elcore50.

До этого с каждым DSP была связана своя очередь заданий, а назначение заданий на DSP-ядра осуществлялось программистом статически с помощью функции ELcoreCL eclEnqueueNDRangeKernel().

В данном релизе в драйвере elcore50 добавлена глобальная (общая) очередь. Назначение заданий из этой очереди осуществляется динамически на первое свободное ядро DSP. Такой подход позволяет более эффективно использовать ядра DSP.

Для использования нового режима использовать eclEnqueueSharedKernel() вместо eclEnqueueNDRangeKernel(). Подробнее см. документацию.

Новый функционал

  • Добавлена поддержка глобальных очередей для динамического назначения DSP-ядер для выполнения кернелов.

  • В утилиту elcorectl для команды ps добавлен вывод текущего состояния заданий.

  • Память для стека теперь используется из ELF-файла, а не выделяется отдельно. Добавлена поддержка изменения положения и размера стека через пользовательские линковочные скрипты (ранее выделялся стек фиксированного размера: 2 МБ). По умолчанию используется линковочный скрипт, входящий в состав тулчейна.

Изменения совместимости

  • Для работы новой версии требуется обновление DTS ядра версии не старше 5d725da215dd6d5299b53fc45f5a1163dc7903f7.

  • Утилита elcorecl-run перенесена из пакета elcorecl-extra в пакет elcorecl.

Улучшения

  • Накладные расходы на запуск кернелов снижены на ~35% для MCom-03 и на ~20% для Solaris (без учета передачи аргументов).

  • Оптимизирована производительность функций инициализации VDMA.

  • Усилена проверка выхода за пределы кучи при выделении динамической памяти в системном вызове sbrk.

  • Повышена производительность обращений к регистрам DSP со стороны CPU в MCom-03 за счет повышения частоты SDR_CLK_CFG со 100 до 200 МГц (определяется DTS из состава ядра).

Исправления ошибок

  • Понижена частота DSP с 432 МГц до 405 МГц в MCom-03 (определяется DTS из состава ядра) для повышения стабильности в нагруженных задачах.

  • Исправлена утечка памяти в утилите elcorecl-run.

  • Исправлена ошибка при использовании eclEnqueueKernelWithSpawn() для кернелов, в которых не вызываются функции elcore_spawn() и elcore_sync().

  • Передача аргументов локальной памяти в кернел в рамках модели spawn/sync теперь гарантирует одинаковое состояние L2-кэша основного и вспомогательных DSP-ядер.

1.2

Новый функционал

  • Реализована поддержка системного вызова getrandom().

  • Изменены настройки кэш-памяти DSP:

    • Отключена программная предвыборка кэш-памяти L1 из-за конфликтов и низкой производительности.

    • Размер предвыборки для кэш-памяти L1 увеличен с 8 строк до 64 строк.

    • Граница предвыборки изменена с 4 КБ до 2 МБ.

    Справочно: скорость копирования из DDR в DDR (memcpy()) выросла с 1260 МБ/c до 2280 МБ/с на MCom-03 и с 1400 МБ/с до 3080 МБ/c для RoboDeus (по результатам запуска бенчмарка tinymembench).

  • Реализована поддержка отображения произвольных областей физической памяти в адресное пространство DSP с помощью системных вызовов pmmap() и pmunmap().

  • Добавлена поддержка штатного завершения программы DSP при вызове функции exit().

Изменения совместимости

  • Из исходных кодов elcore50/km удален драйвер QLIC, для работы драйвера требуется ядро Linux:

    • sha: d566883f705928b0812cea980fc8a03e4f8a771f или выше для RoboDeus

    • sha: 1b83066b936c2a9bedcb040041fd15648bcf2dd7 или выше для MCom-03

Исправления ошибок

  • В драйвере DSP исправлены ошибки установки частоты devfreq.

  • Исправлена ошибка возврата неправильного кода возврата в случае успешного завершения функции eclCreateCommandQueueWithProperties().

  • В системный вызов sbrk добавлена проверка выхода за пределы кучи при выделении динамической памяти.

  • Исправлена ошибка в определении размера VDMA-пересылок.

1.1

Новый функционал

  • Реализована поддержка запуска кернелов в режиме spawn/sync, который позволяет выполнять распараллеливание DSP-программы на нескольких DSP, используя специальные функции.

Исправления ошибок

  • Убраны условия возникновения гонок между драйверами драйверами elcore50 и qlic путем добавления явной зависимости.

  • Исправлены ошибки при инициализации прерываний в драйвере elcore50.

  • Для MCom-03 больше не выполняется установка сброса в момент выгрузки драйвера DSP с целью обхода бага с зависанием обращений DSP к своим регистрам после снятия сброса DSP отдельно от подсистемы SDR. Снятие сброса DSP осуществляется при первой загрузке драйвера.