Memory Type
ARM architecture에서 memory는 크게 두 가지 type으로 분류 됨.
Normal Memory
일반적으로 data나 code가 load되어 처리되는 영역으로서 R/W나 RO로 동작
ARM processor는 해당 영역에 대하여 cache 기법을 적용할 수 있음
또한 성능 향상이나 최적화를 위해 하기와 같은 기법을 사용할 수 있음.
Merge access
연속된 메모리 공간에 접근하는 2개 이상의 명령어를 한번에 처리.
ex) 0xF000_0000. 0xF000_0004, 0xF000_0008의 연속된 메모리에 대해 4byte씩 접근하는 경우 3번의 access를 수행하여야 하는데, 이때 다수의 access를 merge하여 0xF000_0000으로 부터 한번의 transaction을 통해 data에 접근할 수 있음.
Re-ordering
ARM architecture에서 명령어 간에 의존성이 없는 경우 최적화를 위해 명령어의 순서를 바꿔 처리할 수 있는데 이를 weakly-ordered라고 함.
즉, 메모리에 접근하는 R/W동작에 대하여 프로그램 순서와 항상 동일하지 않게 assembly 실행순서가 구성될 수 있음
ex)
// 첫 번째 줄의 X0는 두 번째 줄의 X0에 영향을 미침. 이와 같이 의존성이 있는 경우 re-ordering 발생x
01 LDR X0, [X1]
02 LDR X2, [X0, #8]
/*
* 다음 경우에는 2번째 줄과 3번째 줄 code가 서로 의존성을 가지고 있지 않아
* re-ordering과 merge access이 적용될 수 있음.
*/
01 str x0, [x1]
02 strh w2, [x1, #0]
03 str w3, [x1, #2]
04 strb w4, [x1, #3]
05 ldr x5, [x1]
Re-ordering: 3 번째 줄 명령어를 실행하고 2 번째 줄 명령어를 실행 함.
Merge access: 2~3번째 줄 명령어를 동시에 실행
명확한 re-ordering rule을 위해 core에 memory type attribute 정보나 translation table을 제공할 수 있음 (e.g. MMU table)
Speculative memory read
자주 접근하는 데이터를 미리 예측해 loading하는 동작
Multiple issue of instructions
cycle 당 다수의 명령어를 발행하고 실행할 수 있음.
이와 같은 기법들은 성능향상을 이끌어내지만, ARM processor 내부에서 프로그래머의 의도와는 다르게 code실행을 구성하므로 S/W bug를 유발할 수 있음. 이를 방지하기 위해 Barrier를 사용함.
Device Memory
Memory-Mapped I/O라고 불리는 peripherals에 대한 control을 담당하는 memory 영역.
해당 영역에 대하여 re-ordering 기법이 적용되면 원하는 동작이 실행되지 않을 수도 있으며(r/w 행위 하나 하나가 peripheral에 대한 특정 동작을 수행할 수도 있기 때문) 이를 위해 코드가 실행되지 않는 속성(non-executable)이 지정되어야 하며, 또한 non-cacheable 속성도 지정되야 향후 cache 동작 간 해당 device memory 영역은 cache 동작의 하위 영역에서 제외되므로 cache 성능이 향상.
Device memory properties
- Gathering / Non-Gathering: 특정 메모리 영역에 대해 다수의 access가 merged되어 single transaction으로 동작할 수 있는지 없는지
ex) 0xF000_0000, 0xF000_0004, 0xF000_0008에 대하여 연속된 메모리에 4byte씩 접근하는 경우 3번의 access를 수행하게 되는데, 이와 같이 연속된 영역에 대한 다수의 access를 merge하여 0xF000_0000부터 한번의 transaction을 통해 접근할 수 있는데 이를 Gathering 속성이라고 함. - Reordering / Non-Reordering: 동일한 장치에 대한 액세스를 re-ordering 할 수 있는지 여부
- Early Write Acknowledgement / Non Early Write Acknowledgement: 프로세서와 접근하는 device 사이에서 중간 write buffer가 쓰기 완료 알림을 보낼 수 있는지 여부, E로 지정된 경우 end device에서 실제 write를 수신하기 전에 interconnect logic 내의 버퍼가 쓰기 승인 신호를 보낼 수 있음.
위와 같은 속성들의 조합으로 하기와 같이 구성됨
- Device-nGnRnE(가장 제한적인 device memory)
- Device-nGnRE
- Device-nGRE
- Device-GRE
'ARM Architecture > Memory System' 카테고리의 다른 글
Cache(1) (0) | 2024.08.09 |
---|