작성
·
40
0
안녕하세요,
4-2 강의 5분쯤되는 예시에서 질문이 있습니다.
명령어 셋들이 연관성이 있을 수도 있지 않나요?
포인터라면 memory 가 겹칠 수 도 있으니 사실 같은 주소를 그리킬 수도 있을 것 같아서요, (예, R1 이 R3+8 과 연관이 있다든지)
그렇게 되면 어떤 주소가 들어올 지 모르니 Out of Order Execution 알고리즘이 보수적으로 진행되는 것이 맞을 것 같은데,
Arm core 알고리즘 상에서는 레지스터 이름이 다르면 dependency 가 없는 것으로 파악하게 되나요?
답변 2
0
포인터를 사용해 구조체의 필드에 접근할 때 str이나 ldr 명령어가 실행됩니다. 이 과정에서 dependency를 확인하며, dependency가 없을 경우 메모리 리오더링이 일어날 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. platf님.
Out of Order Execution 알고리즘은 프로세서가 명령어 실행을 비순차적으로 진행하여 성능을 향상시키는 기술입니다. ARM 아키텍처에서 명령어들이 레지스터를 공유하지 않는 한, 일반적으로 데이터 의존성이 없다고 판단합니다. 그러나 명령어가 메모리를 참조하고 있을 때는 포인터의 겹침 가능성을 고려해야 하기 때문에 더 보수적인 접근이 필요합니다.
DMB
, DSB
, ISB
)를 사용하여 명령어 순서나 메모리 접근을 강제하는 방법도 있습니다.혹시 이와 관련하여 구체적인 차이가 궁금하시다면, 아래 질문에서 더 많은 정보를 확인하실 수 있습니다:
- ARMv7 범용레지스터
- GIC programmer model
자세한 알고리즘의 동작 방식을 이해하기 위해서는 구체적인 강의와 공식 문서를 참조하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.