SyntaxHighlighter.all();

mfence는 해당 명령어 이전에 위치한 모든 메모리 로드, 저장, 명령에 대해 직렬화 연산을 수행합니다.

 

프로세서는 out-of-order execution, Speculative execution과 같은 연산 고속화 기술에 의해 연산의 순서를 바꾸어 수행할 수 있는데, 이 때 mfence명령어를 통해 프로세서가 명령어의 순서를 지키도록 강제합니다.

 

요약하자면 x86, x86-64에서는 속도 향상을 위한 기술들 때문에 메모리 연산의 순서가 보장되지 않는데 이 순서를 보장하기 위한 명령어가 mfence입니다.

 

mfence 예시

 

반응형

'컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] clflush instruction  (0) 2019.05.03
[컴퓨터구조] Stride Prediction (보폭 예측)  (0) 2019.05.01

[설명]

clflush는 x86 instruction set reference중 하나로 intel c/c++ 컴파일러의 내장 함수로서 사용할 수 있습니다.

 

clflush는 프로세서의 모든 레벨의 캐시에서 피연산자로 지정된 주소를 포함하는 캐시라인을 제거합니다.

* 전부 삭제하는 것이 아니라 파라미터로 넘겨진 주소만 해당된다.

 

clflush 명령어는 모든 권한수준에서 사용할 수 있는 명령어입니다.

 

[동작]

프로세서가 clflush 명령어를 통해 받아온 메모리 주소를 수신한다. 이후 해당 주소가 캐시에 존재하는지 식별합니다.

만약 메모리 주소가 식별되면, 해당 주소는 캐시에서 제거(flush)합니다.

 

[참고]

- cache coherency (캐시 일관성)

 

각 프로세서별로 별도의 캐시 메모리를 가지고 있는 공유 메모리 멀티프로세서에서, 한 명령어 피연산자의 복제본이 주기억장치에 하나, 그리고 각 코어의 캐시 메모리에 하나씩, 여러 개 존재할 수 있습니다.  이러한 상황에서 피연산자가 변경되면, 나머지 복제본 역시 반드시 변경되어야만 합니다.

  즉, 캐시 일관성은 공유된 피연산자의 값이 변경되면, 그 사실이 전체 캐시에 즉시 전파되어 일관성을 유지하는 규칙입니다.

 

 * 캐시일관성을 유지하는 프로토콜은 MSI, MESI, 시냅스, 버클리 프로토콜 등이 있다.

 

반응형

+ Recent posts