좋아요, 똑같은 것을 보니 매우 흥미 롭습니다. 내가 그렇게 R2에 엉망이 스택에 저장해야합니다 테스트중인 코드에서 R4로 깨끗이 그래서 만약
@ nop
.globl test
test:
mov r0,#1
MCR p15, 0, r0, c15, c12, 0
mov r0,#5
MCR p15, 0, r0, c15, c12, 0
MRC p15, 0, r0, c15, c12, 1
add r3,#3
add r2,#1
MRC p15, 0, r1, c15, c12, 1
sub r0,r1,r0
bx lr
나는 C에서이 호출하고있다. add r2 라인이 없으면 리턴 값은 8이고 add r2 라인의 경우 리턴 값은 0x68이었고 0x65였습니다. 이 점은 파이 제로에 있음에 유의하십시오. 그래서 약간의 시계는 당신보다 약간 빠릅니다.
이것은 드럼과 드럼에서 실행된다는 것을 기억하십시오. 고통스럽게 느립니다. 그래서 당신은 그 중 일부를 볼 수 있습니다.
코드의
초기 정렬 :
00008024 <test>:
8024: e3a00001 mov r0, #1
8028: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
802c: e3a00005 mov r0, #5
8030: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
8034: ee1f0f3c mrc 15, 0, r0, cr15, cr12, {1}
8038: e2833003 add r3, r3, #3
803c: e2822001 add r2, r2, #1
8040: ee1f1f3c mrc 15, 0, r1, cr15, cr12, {1}
8044: e0410000 sub r0, r1, r0
8048: e12fff1e bx lr
네를, 나는 .globl 시험의 앞에 NOP의 주석을 해제하고, 나는 단지 테스트중인 코드와 추가 R3를 추가 R2를 주석 경우 만 nop은 전체 코드 블록의 정렬을 푸시합니다. r3을 추가하고 nop을 사용하지 않으면 r3을 추가하여 8 카운트를 얻고 nop을 사용하면 0x67 카운트를 얻습니다.
그래서 이것은 가져 오기를 측정하는 경우에 불과하다고 생각합니다. 나는 암 캐시를 활성화하지 않았지만이 램이 암과 GPU간에 공유되기 때문에 더 깊은 캐시 나 mmu 또는 기타가있을 수 있습니다.
한 단계 더 나아가 nop을 주석 처리하지 않은 경우 r3을 추가하고 r2를 추가하면 0x69가됩니다. 또는 근본적으로 동등하거나 간신히 하나의 명령보다 길기 때문에 우리는 거기에서 페치를 강요했습니다.
는 그래서 계산의 초기 읽기는 8 워드 경계에 정렬되도록 좀 더 NOP를 추가, 나는 두 개의 지침이있는 경우 제 경우는 내가 8의 수를 얻을
00008030 <test>:
8030: e3a00001 mov r0, #1
8034: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
8038: e3a00005 mov r0, #5
803c: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
8040: ee1f0f3c mrc 15, 0, r0, cr15, cr12, {1}
8044: e2833003 add r3, r3, #3
8048: e2822001 add r2, r2, #1
804c: ee1f1f3c mrc 15, 0, r1, cr15, cr12, {1}
8050: e0410000 sub r0, r1, r0
8054: e12fff1e bx lr
를 I 측정된다. 나는 거기에 3 번째 명령을 넣고 r3을 추가하고 2 번째 명령을 r2s를 추가한다. 여전히 카운트가 8입니다.
이 부분으로 돌아 가면 적어도 부분적으로 다른 페치 라인에 있습니다.
00008024 <test>:
8024: e3a00001 mov r0, #1
8028: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
802c: e3a00005 mov r0, #5
8030: ee0f0f1c mcr 15, 0, r0, cr15, cr12, {0}
8034: ee1f0f3c mrc 15, 0, r0, cr15, cr12, {1}
8038: e2833003 add r3, r3, #3
803c: e2822001 add r2, r2, #1
8040: ee1f1f3c mrc 15, 0, r1, cr15, cr12, {1}
8044: e0410000 sub r0, r1, r0
8048: e12fff1e bx lr
그리고 난 아무것도 변경하지 않고 3 실점을 한 다음 L1 캐시 (명령)를 사용하고 그래서 난 당신이 느린 DRAM 다루고있는 생각 세 이상 실행 내가
00000068
0000001D
0000001D
0000001F
00000008
00000008
을받을 수 있나요 라인 페치, 캐시 미스 및 히트 및 결과 캐시 라인 페치.
명령어를 실행하는 데 걸린 클럭 수를 예상하는 경우 l1 캐시에서 테스트중인 전체 코드를 유지할 수 없다면 대기 상태 메모리가 없습니다.
나는이 칩/보드를 위해 이런 종류의 것을 사용할 수있는 칩 sram이 없다고 생각한다. 결국 당신은 드럼을 치는 것을 끝낼 것이며 그 드럼은 gpu와 공유된다. 그래서 기본적으로 프로그램 실행 시간은 결정적 일 것으로 예상되지 않으며 컴퓨터 나 전화 또는 다른 컴퓨터와 마찬가지로 병목 현상이 오랫동안 발생하지 않았기 때문에 데이터 또는 지침을 제공 받기 위해 대기 중입니다.