ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
797180 Топик полностью
йцукен (25.11.2017 14:01, просмотров: 478) ответил lloyd на Общеизвестно, что ARM-архитектуры хуже дружат с типами, отличающимися по размеру от размера регистра.
Поскольку мне это не было известно, проделал эксперимент. Функция складывает два вектора длиной 1024. Процессор F303, частота 72МГц, компилятор IAR8.11. Время выполнения в тактах не зависит signed/unsigned, но зависит от битности: 8 - 7425, 16 - 7423, 32 - 8187. Исходник и листинг: #define SZ 1024 uint8_t a[SZ], b[SZ], c[SZ]; int cyc_count; void vector_add( void ) { int t0 = DWT->CYCCNT; for ( int j = 0; j < SZ; j++ ) a[j] = b[j] + c[j]; cyc_count = DWT->CYCCNT - t0; } 295 void vector_add( void ) 296 { \ _Z10vector_addv: (+1) \ 00000000 0xB4F0 PUSH {R4-R7} 297 int t0 = DWT->CYCCNT; \ 00000002 0x.... 0x.... LDR.W R1,??DataTable9_5 ;; 0xe0001004 298 for ( int j = 0; j < SZ; j++ ) \ 00000006 0x.... 0x.... LDR.W R3,??DataTable9_1 \ 0000000A 0x680A LDR R2,[R1, #+0] \ 0000000C 0x.... 0x.... LDR.W R6,??DataTable9_6 \ 00000010 0xF203 0x7414 ADDW R4,R3,#+1812 \ 00000014 0xF603 0x3514 ADDW R5,R3,#+2836 \ 00000018 0xF44F 0x7080 MOV R0,#+256 299 a[j] = b[j] + c[j]; \ ??vector_add_0: (+1) \ 0000001C 0xF815 0x7B01 LDRB R7,[R5], #+1 \ 00000020 0xF816 0xCB01 LDRB R12,[R6], #+1 \ 00000024 0x4467 ADD R7,R12,R7 \ 00000026 0xF804 0x7B01 STRB R7,[R4], #+1 \ 0000002A 0x1E40 SUBS R0,R0,#+1 \ 0000002C 0xF815 0x7B01 LDRB R7,[R5], #+1 \ 00000030 0xF816 0xCB01 LDRB R12,[R6], #+1 \ 00000034 0x4467 ADD R7,R12,R7 \ 00000036 0xF804 0x7B01 STRB R7,[R4], #+1 \ 0000003A 0xF816 0xCB01 LDRB R12,[R6], #+1 \ 0000003E 0xF815 0x7B01 LDRB R7,[R5], #+1 \ 00000042 0x4467 ADD R7,R12,R7 \ 00000044 0xF804 0x7B01 STRB R7,[R4], #+1 \ 00000048 0xF816 0xCB01 LDRB R12,[R6], #+1 \ 0000004C 0xF815 0x7B01 LDRB R7,[R5], #+1 \ 00000050 0x4467 ADD R7,R12,R7 \ 00000052 0xF804 0x7B01 STRB R7,[R4], #+1 \ 00000056 0xD1E1 BNE.N ??vector_add_0 300 cyc_count = DWT->CYCCNT - t0; \ 00000058 0x6808 LDR R0,[R1, #+0] \ 0000005A 0x1A82 SUBS R2,R0,R2 \ 0000005C 0xF8C3 0x2F14 STR R2,[R3, #+3860] 301 } \ 00000060 0xBCF0 POP {R4-R7} \ 00000062 0x4770 BX LR ;; return