2014-09-11 2 views
2

약 30 개의 ARM 명령어와 20 개의 NEON 명령어가있는 코드가있는 경우. 제한된 명령 대기열로 인해 30 ARM 명령어가 완료 될 때까지 NEON 보조 프로세서가 정지합니까? 그렇다면 ARM 코드와 NEON 코드를 혼합하는 것이 더 낫습니까? 주목할 사항 : ARM 코드와 NEON 코드는 서로 독립적입니다.ARM NEON의 명령어 예약

. 
. 
str sl, [sp, #36] 
str fp, [sp, #84] 
add r8, r8, #1 ; 0x1 
lsl r9, r8, r7 
sub r9, r9, #1 ; 0x1 
ldr sl, [r5, r9, lsl #2] 
ldr fp, [r6, r9, lsl #2] 
str sl, [sp, #8] 
str fp, [sp, #56] 
lsl ip, r8, #1 
lsl ip, ip, r7 
sub ip, ip, #1 ; 0x1 
ldr sl, [r5, ip, lsl #2] 
ldr fp, [r6, ip, lsl #2] 
str sl, [sp, #24] 
str fp, [sp, #72] 
mov r9, #512 ; 0x200 
lsl ip, r8, #1 
add ip, ip, r8 
lsl ip, ip, r7 
sub ip, ip, #1 ; 0x1 
cmp ip, #512 ; 0x200 
sub r9, r9, #1 ; 0x1 
and ip, ip, r9 
ldr sl, [r5, ip, lsl #2] 
ldr fp, [r6, ip, lsl #2] 
rsbge sl, sl, #0 ; 0x 
rsbge fp, fp, #0 ; 0x 
str sl, [sp, #40] 
str fp, [sp, #88] 
add r8, r8, #1 ; 0x1 
lsl r9, r8, r7 
sub r9, r9, #1 ; 0x1 
ldr sl, [r5, r9, lsl #2] 
ldr fp, [r6, r9, lsl #2] 
str sl, [sp, #12] 
str fp, [sp, #60] 
lsl ip, r8, #1 
lsl ip, ip, r7 
sub ip, ip, #1 ; 0x1 
ldr sl, [r5, ip, lsl #2] 
ldr fp, [r6, ip, lsl #2] 
str sl, [sp, #28] 
str fp, [sp, #76] 
mov r9, #512 ; 0x200 
lsl ip, r8, #1 
add ip, ip, r8 
lsl ip, ip, r7 
sub ip, ip, #1 ; 0x1 
cmp ip, #512 ; 0x200 
sub r9, r9, #1 ; 0x1 
and ip, ip, r9 
ldr sl, [r5, ip, lsl #2] 
ldr fp, [r6, ip, lsl #2] 
rsbge sl, sl, #0 ; 0x 
rsbge fp, fp, #0 ; 0x 
str sl, [sp, #44] 
str fp, [sp, #92] 
add r8, r8, #1 ; 0x1 
vshr.s32 q0, q0, #2 
vshr.s32 q1, q1, #2 
vshr.s32 q2, q2, #2 
vshr.s32 q3, q3, #2 
vshr.s32 q4, q4, #2 
vshr.s32 q5, q5, #2 
vshr.s32 q6, q6, #2 
vshr.s32 q7, q7, #2 
vadd.i32 q8, q0, q4 
vadd.i32 q9, q2, q6 
vsub.i32 q10, q0, q4 
vsub.i32 q11, q2, q6 
vadd.i32 q12, q8, q9 
vsub.i32 q13, q8, q9 
vadd.i32 q8, q1, q5 
vsub.i32 q0, q1, q5 
vadd.i32 q9, q3, q7 
vsub.i32 q1, q3, q7 
vsub.i32 q2, q8, q9 
vsub.i32 q4, q10, q1 

답변

3

사용자가 삽입해야합니다.

NEON보다 ARM 명령어가 더 많습니다. ARM은 코드을 지배하는 입니다.

따라서 인터리브 할 경우 NEON 명령어는 6 개 항목 경계 내에서 FREE에 대해 실행됩니다.

CA7과 같은 약한 코어에는 이런 종류의 무료 점심 식사가 제공되지 않습니다.

+0

지침을 인터리빙 한 후 상당히 절약되었습니다. 감사! – vikasmk

+0

좋은 정보. 메커니즘이 어떻게 최대 이익을 얻는지를 자세히 설명 할 수 있습니까? "6 entries boundary"란 무엇을 의미합니까? – BitBank

+1

@BitBank 페치/디코드가 끝나면 NEON 명령어는 6 개의 엔트리가있는 자체 실행 큐에 저장됩니다. 연속해서 6 개 이상의 ARM 명령어가있는 경우 NEON의 대기열이 비어 NEON이 유휴 상태가됩니다. 이를 피하기 위해 5-5의 지침을 삽입 할 수 있습니다. 그럼에도 불구하고 1 대 1 방식으로이 작업을 수행하지 않을 이유는 없습니다. –

관련 문제