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, 시냅스, 버클리 프로토콜 등이 있다.

 

반응형

프로세서는 성능 향상을 위해 보폭 예측을 사용합니다. 보폭 예측은 많은 양의 상수를 생성하는 명령을 최적화합니다.

 

예를 들어 number를 십만번 더하는 코드가 수행된다고 가정해봅시다.

 

 

 

 

 

 

 

 

 

프로세서는 여러 개의 파이프라인으로 구성되어 고도의 병렬 연산을 수행하는데, number의 경우

 

이전 number에 1을 더해야 하기 때문에 dependency가 발생, 병렬 연산이 불가능하여 성능저하를 유발합니다.

 

이때 프로세서는 성능 향상을 위해 number를 일일이 더하지 않고 1씩 값이 증가하는 것을 예측하여 연산합니다.

 

[Stride]

stride는 값이 변화하는 보폭입니다. 예를 들어 수열 1,2,3,4,5,6 ~ 99, 100이 있습니다. 이 때 수열의 stride는 1입니다.

 

[Stride State Diagram]

value : 계산한 결과값

stride : 보폭, value1(선행 계산 결과) - value2(후행 계산 결과)

 

- Init state

처음 명령이 수행되었을 때의 상태. 해당 명령의 결과는 value에 저장됩니다.

 

- Transient state

Init 상태에서 다음 명령이 발생하면 결과를 value2에 저장. 이때, stride(value1 – value2)가 계산. 해당 상태를 transient(일시적 보폭) 라고 합니다.

transient상태에서 다음 명령이 수행되었을 때 stride값이 같다면 steady로 상태변화합니다.

 

- Steday state

보폭이 안정된 상태로 변수를 정확히 예측하여 수행 시간이 감소합니다.

새로운 명령을 수행한 뒤 stride가 같다면 steady state를 유지합니다. 만약 stride가 틀리면 transient상태로 변화합니다.

 

 

[참조]

"Data Value Prediction",  Jumnit Hong,  Elias Khair ... 

during "stride predicator".

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.8888&rep=rep1&type=pdf

 

반응형

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

[컴퓨터구조] mfence (Memory Fence)  (0) 2019.05.03
[컴퓨터구조] clflush instruction  (0) 2019.05.03

+ Recent posts