2011-12-11 2 views

답변

1

이것이 올바른지 잘 모르겠지만 IIRC에서는 임의로 정렬 할 수있는 약하게 정렬 된 메모리 액세스가있는 아키텍처가 있으며 IIRC에서는 메모리 배리어를 삽입하여 특별한 주문.

현대 프로세서는 메모리 순서 재 지정을 숨기는 "로드 저장 대기열"을 사용하여 프로그램 순서대로 진행되는 것처럼 보이게합니다. 읽기는 순서가 바뀌지 만 (일부주의가 필요함), 쓰기는 순서대로 이루어질 수 있지만 순서대로 커밋됩니다 (동일한 위치에 여러 번 쓰기가 통합 됨에도 불구하고). 읽기와 쓰기는 신중하고 신중한 방식으로 서로 재정렬됩니다. 후자는 "호이 스팅 (hoisting)"이라고 불리는데, 읽기가 추측 적으로 (명령 시퀀스의 앞부분에 나타나는) 쓰기에 앞서 추측 적으로 수행되고 선행 쓰기가 영향을 미쳤다면 잘못 예측 된 분기와 같이 취소 될 수 있습니다.

또한 메모리가 캐시되지 않은 것으로 표시되면 CPU는 일반적으로 메모리가 I/O 공간을 의미하고 액세스 순서를 수행하지 않는다고 추론합니다. x86과 SPARC는 이것과 같습니다. 그러나 PowerPC는 여전히 I/O 메모리 공간에 대한 읽기 순서를 바꿀 것이므로 특정 순서를 강제하려면 EIEIO (I/O 실행 순서를 보장) 명령을 사용해야합니다. IIRC에서는 PA-RISC 및 Alpha에서도 메모리 장벽을 사용해야했습니다. 또한 x86에는 메모리 장벽이 있지만 캐시 메모리 공간에 대한 액세스 순서를 보장하기 위해 사용 방법에 익숙하지 않습니다.

멀티 코어 시스템을 언급했습니다. 일반적으로 정교한 캐시 일관성 프로토콜을 사용하여 모든 메모리 액세스가 특정 인터리빙 규칙을 따르는 것처럼 보이므로 캐싱이없는 경우 액세스가 마지막 수준의 캐시와 주 메모리를 순서대로 수행합니다.

1

많은 현대 프로세서는 메모리 지연을 숨김으로써 성능을 향상시키기 위해 순서가 잘못된 실행을 사용합니다. 이것은 다중 프로세서/코어와 관련이 없으며, 단독 코어 프로세서를 사용하여 수행 할 수 있습니다. 이러한 이유로 메모리 주문에 의존해서는 안됩니다.