Snabbaste sättet att köra matrismultiplikation för ARM?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Snabbaste sättet att köra matrismultiplikation för ARM?

Inlägg av DanielM »

Jag har behov utav att köra matrismultiplikationer hos ett ARM system. Jag vet att man kan själv skriva en egen C-kod som utför matrismultiplikationer. Jag har tittat på ett bibliotek som heter CMSIS och denna har stöd för matrismultiplikationer och mycket annat.

En intressant funktion är funktionen

Kod: Markera allt

arm_status arm_mat_mult_f32(const arm_matrix_instance_f32* pSrcA, const arm_matrix_instance_f32* pSrcB, arm_matrix_instance_f32* pDst);
Denna använder sig av typedef float float32_t för att utföra matrismultiplikationen
\(AB = D\)

Där \(A \in \Re^{m*n}, B \in \Re^{n*k}, D \in \Re^{m*k}\).
Om parametern k = 1 så är det matris- och vektormultiplikation. När jag kollar i funktionen arm_mat_mult_f32 för CMSIS så blev jag inte så imponerad. Det var bara vanlig C-kod. Jag ser inga unika datatyper som tar hänsyn till hårdvaran. Visst, koden är kanske skriven på ett optimalt sätt, men jag hade förväntat mig att koden skulle ta hänsyn till hårdvaran.

Frågor:
  1. Hur optimal är denna C-kod?
  2. Hur portabel är denna C-kod?
  3. Bör jag överväga ett annat bibliotek eller metod för att utföra matrismultiplikation?