이번에는 다음과 같은 예시 명령어를 보면서 메모리 리오더링에 대해 자세히 알아봅시다.

 

그림 17.4 메모리 리오더링의

 

01 ~ 04번째 줄은 모두 스토어 명령어입니다. 01 ~ 04번째 명령어가 실행될 , X1 레지스터의 값이 0x10000이라고 가정합시다. 또한 명령어가 실행될 워드의 단위는 8바이트입니다.

 

먼저 01번째 줄을 분석하겠습니다. X1 레지스터가 0x10000이니 0x10000 주소에 X0 레지스터의 (8바이트 크기) 저장합니다. 01번째 줄이 실행되면 바이트는 '1' 업데이트됩니다. 이는 '1' 표기된 박스에 해당합니다. 이어서 02번째 줄을 봅시다. 같은 0x10000 주소에 2바이트 사이즈의 데이터를 저장합니다. 여기서 01번째 줄에서 실행된 0x10000 주소의 데이터가 업데이트 됩니다. 부분은 2 표기된 박스에서 확인할 있습니다. 여기서 STRH 명령어는 2바이트만큼 데이터를 스토어하는 동작이므로 0x10000 0x10001 주소에 데이터(‘2’ 표시된 박스) 저장합니다.

 

이어서 03번째 줄을 봅시다. 0x10002 주소에 4바이트 사이즈의 데이터를 저장합니다. 이는 가운데 3으로 표기된 박스에 해당됩니다. 03번째 줄의 명령어가 STR이고 저장하는 W3 레지스터의 사이즈가 4바이트입니다. 따라서 0x10002 ~ 0x10005 주소에 W3 레지스터의 값이 저장됩니다. 여기서 다음과 같은 질문을 던지면서 예제 명령어에 대해 조금 생각해 봅시다.

 

    "02번째와 03번째 명령어 사이에 의존성이 있을까"?

 

질문에 답하려면 02번째와 03번째 명령어가 연달아 실행되면 어느 주소 공간에 데이터가 저장되는지 확인해야 합니다. 02번째 줄은 0x10000 ~ 0x10001 영역 주소에 2바이트 크기만큼 데이터(2) 저장하고, 03번째 줄은 0x10002 ~ 0x10005 구간 주소에 4바이트 사이즈 데이터(3) 저장합니다.

 

02번째와 03번째 줄을 실행한 결과 업데이트되는 주소 공간이 중복되지 않습니다. 따라서 "02 ~ 03번째 명령어 간에는 의존성이 없다"라고 답할 있습니다. 만약 Arm 프로세서 내부에서 03번째 명령어를 먼저 실행하고 02번째 명령어를 실행하면 결과가 달라지지 않습니다. 그래서 명령어의 순서를 바꿔서 실행할 있습니다. 이를 메모리 리오더링이라고 합니다.

 

여기서 걸음 나갈까요? Arm 프로세서는 내부에서 02 ~ 03번째 명령어를 번에 실행할 수도 있습니다. 이를 Arm 아키텍처에서는 머지 액세스라고 하는데 이번에 예시 명령어를 통해 머지 액세스가 무엇인지 자세히 알아봅시다.

 

02번째 줄은 0x10000 ~ 0x10001 범위의 주소에 접근합니다. 이를 메모리 액세스를 한번 수행했다고 말할 있습니다. 03번째 줄은 0x10002 ~ 0x10005 범위의 주소에 접근하며 역시 메모리 액세스를 처리했다고 있습니다. 02 ~ 03번째 줄을 순서대로 실행하면 2 메모리 액세스를 수행합니다.

 

만약 02번째 줄과 03번째 줄을 번에 실행하면 어떻게 될까요? 02 ~ 03번째 명령어 사이에 의존성이 없으니 번에 0x10000 ~ 0x10005 메모리 영역에 접근해 데이터를 스토어할 있습니다. 이를 머지 액세스라고 합니다.

 

 

[정보] 메모리 리오더링의 예시

 

명령어가 순차적으로 실행해도 프로세서 내부에서 메모리에 접근하는 순서는 순차적이지 않을 수도 있습니다.

 

이해를 돕기 위해 가지 예를 들겠습니다. 은행에 먼저 고객은 1 번호표를 받고 은행 직원과 상담을 시작했습니다. 그런데 다음에 2 번호표를 받은 고객이 창구에 왔는데, 은행 직원이 봤을 1번보다 2 번호표의 고객을 은행 직원이 먼저 처리할 있다고 판단합니다. 1 번호표의 고객의 요청 사항을 처리하려면 은행의 인프라 서버에 10 간격으로 접근할 있는 상황이기 때문입니다. 무엇보다 1 고객의 요청이 2 고객과 의존성이 없는 상황이니 고민할 필요가 없습니다. 이럴 2 번호표의 고객을 은행 직원이 먼저 처리할 있습니다.

 

1 고객과 2 고객의 요청을 모아 은행의 인프라 서버에서 처리하면 업무 시간을 줄일 수도 있습니다. 은행 직원도 메모리 리오더링과 유사한 방식을 적용해 업무를 최적화합니다.

 

 

+ Recent posts