Пользовательские инструкции Arm идут на встроенные процессоры Armv8-M

До сих пор компания Arm определяла все инструкции для своих ядер с преимуществом переносимости кода между решениями, поэтому код, скомпилированный для микроконтроллера на основе Arm Cortex-M33, будет работать на другом без изменений (речь идет о коде, работающем непосредственно на ядре).

Но, благодаря архитектуре с открытым исходным кодом RISC-V многие увидели преимущество пользовательских инструкций для конкретных задач, несмотря на риски фрагментации. На проходящей в эти дни Arm Techcon 2019, компания Arm объявила о поддержке пользовательских инструкций для встраиваемых процессоров ARMv8-M, начиная с ядер Arm Cortex-M33.

Внедрение пользовательских инструкций Arm для конкретных встраиваемых приложений и приложений IoT начнется в первом полугодии 2020 года без дополнительных затрат для лицензиатов и без риска фрагментации программного обеспечения с использованием исключения NOCP, если инструкции недоступны.

Сотрудники компании Arm далее объясняют:

Настраиваемые пользовательские инструкции активируются благодаря модификациям ЦП, которые резервируют пространство кодирования для проектировщиков, чтобы легко добавлять пользовательские расширения канала данных при сохранении целостности существующей программной экосистемы. Эта функция вместе с существующим интерфейсом сопроцессора позволяет расширять процессоры Cortex-M33 ускорителями различных типов, оптимизированными для использования в периферийных вычислениях, включая машинное обучение (ML) и искусственный интеллект (AI).

В частности, пользовательские инструкции Arm для Armv8-M добавляют настраиваемый модуль внутри процессора, который имеет тот же интерфейс, что и стандартное арифметико-логическое устройство (ALU) ЦПУ. Существует несколько областей пространства кодирования, доступных для настройки, и вы можете выбрать до восьми областей в зависимости от типа инструкций, которые вы хотите реализовать.

Разработчикам SoC все равно придется следовать классам расширения команд для общего назначения и FPU/M-Profile Vector Extension (MVE). В объявлении приводятся цитаты из STMicro, NXP и Silicon Labs, поэтому, с большой вероятностью, в 2020 или 2021 годах, стоит ожидать нового микроконтроллера Arm Cortex-M33 с пользовательскими инструкциями от этих компаний.

Вот пример кода (функция подсчета населения), который можно оптимизировать с помощью пользовательских инструкций:

int popcount(uint32_t x) { 
  int n = 0; 
  for (int i = 0; i < 32; ++i) {
    n += (x >> i) & 1; 
  }
  return n;
}

Рукописная, оптимизированная сборка будет выглядеть следующим образом:

MOV.W    r1, #0x55555555
AND.W    r1, r1, r0, LSR #1
SUBS     r0, r0, r1
MOV.W    r1, #0x33333333
AND.W    r1, r1, r0, LSR #2
BIC      r0, r0, #0xCCCCCCCC
ADD      r0, r1
MOV.W    r1, #0x01010101
ADD.W    r0, r0, r0, LSR #4
BIC      r0, r0, #0xF0F0F0F0
MULS     r0, r1, r0 
LSRS     r0, r0, #24

Этот код может быть заменен одной пользовательской инструкцией, которая экономит место, повышает производительность и эффективность, выполняя всего один цикл:

CX1A p0, r0, #0 // population in r0, return r0

Более подробную информацию, включая технические документы, можно найти на странице продукта

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments