доки про MVE/Helium
https://arm-software.github.io/acle/mve_intrinsics/mve.html
HeliumTechnology_referencebook.pdf
чуток ранее я чупыхался подцепить stm32n657 и это было как то тяжко. удалось запустится в sram. как я понимаю в flash меня пока не пустили ... нужно разбиратся с TrustZone и Debug Authentication.
здесь мы немного это обсуждали
https://caxapa.ru/1551417.html
итак - имеем отладочную плату nucleo-n657x0-q микросхема ревизии B.
специфические для данного случая ключики компиляции
-mcpu=cortex-m55
-mcmse
-mfpu=fpv5-d16
-mfloat-abi=hard
-mthumb
код на С/С++
....
#include <arm_mve.h>
int32_t a[4] = { -5,6, 7,8} ; int32_t b[4] = { -5,6,-7,8} ; int32_t c[4] ; int main(void) { asm volatile ("nop") ; asm volatile ("nop") ; asm volatile ("nop") ; asm volatile ("nop") ; mve_pred16_t p = vctp32q (4); int32x4_t va = vldrwq_z_s32 (a, p); int32x4_t vb = vldrwq_z_s32 (b, p); int32x4_t vc = vmulq_x_s32 (va, vb, p); vstrwq_p_s32 (c, vc, p); asm volatile ("nop") ; asm volatile ("nop") ; asm volatile ("nop") ; asm volatile ("nop") ;
.....
после компиляции в асме, болдом выделены vme инструкции.
0: b508 push {r3, lr}
2: f7ff fffe bl 0 <HAL_Init>
6: f7ff fffe bl 0 <main>
a: bf00 nop
c: bf00 nop
e: bf00 nop
10: bf00 nop
12: 2004 movs r0, #4
14: f020 e801 vctp.32 r0
18: 490c ldr r1, [pc, #48] @ (4c <main+0x4c>)
1a: 4a0d ldr r2, [pc, #52] @ (50 <main+0x50>)
1c: fe71 0f4d vpst
20: ed91 5f00 vldrwt.u32 q2, [r1, #0]
24: fe71 0f4d vpst
28: ed92 3f00 vldrwt.u32 q1, [r2, #0]
2c: fe71 0f4d vpst
30: ef24 6952 vmult.i32 q3, q2, q1
34: 4b07 ldr r3, [pc, #28] @ (54 <main+0x54>)
36: fe71 0f4d vpst
3a: ed83 7f00 vstrwt.32 q3, [r3, #0]
3e: bf00 nop
40: bf00 nop
42: bf00 nop
44: bf00 nop

теперь более прикольный вариант для программиста - втоматическая векторизация (компиллер умный - пусть сам векторизирует код если с может и сгенерит истркции векторного ускорителя!)
asm volatile ("nop") ;
asm volatile ("nop") ;
asm volatile ("nop") ;
asm volatile ("nop") ;
for (int i = 0; i< 4; i++)
Dst[i] = A[i] * B[i];
asm volatile ("nop") ;
asm volatile ("nop") ;
asm volatile ("nop") ;
asm volatile ("nop") ;
выход компилятора
34: bf00 nop
36: bf00 nop
38: bf00 nop
3a: bf00 nop
3c: 4a0b ldr r2, [pc, #44] @ (6c <main+0x6c>)
3e: 4b0c ldr r3, [pc, #48] @ (70 <main+0x70>)
40: ed92 7f00 vldrw.u32 q3, [r2, #0]
44: ed93 5f00 vldrw.u32 q2, [r3, #0]
48: ff06 6d54 vmul.f32 q3, q3, q2
4c: 4b09 ldr r3, [pc, #36] @ (74 <main+0x74>)
4e: ed83 7f00 vstrw.32 q3, [r3, #0]
52: bf00 nop
54: bf00 nop
56: bf00 nop
58: bf00 nop

ляпота то какая - GCC веторизирует код .... как долго я об этом мечтал... вот. теперь не знаю че хотеть дальше.
также я проверил fpu на double операндах, приятно когда не нужно портить и отлаживать численные алгоритмы с даблов yf флоты если на даблах хватает скорости.
ну теперь прикрутим векторный сопроцессор к внешнему 16-битному АЦП .... ну теперь мы разгонимся, но это не точно :)
-
- Т.е. там есть все необходимое для работы с ПЗС/КМОП матрицами? Все эти нужные сдвиговые регистры через DMA, внешнее тактирование по нескольким каналам и т.д., и т.п.? Иначе какой смысл в этой мощи? - Eddy_Em(Сегодня, 22:55)
- Ух ты. Спасибо интересно. До чего дошел прогресс. framer_slacker(236 знак., Сегодня, 22:17,
, ссылка)