2017-03-10 10 views
2

저는 메모리 장벽이 정확히 무엇인지 이해하려고합니다. 메모리 장벽 (예 : mfence)은 메모리 장벽의 전후에서 후방으로 지침 순서를 변경하지 못하도록 방지하는 데 사용됩니다.메모리 장벽은 CPU가 실행하는 명령어입니까, 아니면 단지 마커입니까?

이 사용중인 메모리 장벽의 예입니다

instruction 1 
instruction 2 
instruction 3 
mfence 
instruction 4 
instruction 5 
instruction 6 

이제 내 질문은 다음 mfence 명령은 명령을 실행하기 위해 어떤 순서로 CPU를 말하는 단지 마커인가? 또는 다른 명령 (예 : mov)을 실행하는 것처럼 CPU가 실제로 실행하는 명령입니까?

+3

CPU가 실행하는 명령입니다. 다른 종류의 명령은 없습니다. –

답변

7

CPU가 코드에서 발견하는 모든 바이트 시퀀스는 CPU가 실행하는 명령입니다. 다른 종류의 지시 사항은 없습니다.

Intel instruction set reference과 특정 페이지 for mfence에서이 내용을 명확하게 볼 수 있습니다.

MFENCE
에 직렬화가 작업을 수행하는 모든로드에서 메모리 이전 MFENCE 명령 발행 한 상점에 ​​메모리 명령을 포함한다. 이 직렬화 연산은 프로그램 순서의 MFENCE 명령어 앞에 오는 모든로드 및 저장 명령어가 MFENCE 명령어 뒤에 오는로드 또는 저장 명령어보다 먼저 전역 적으로 표시되도록 보장합니다.

MFENCE 명령어는 모든로드 및 저장 명령어, 기타 MFENCE 명령어, LFENCE 및 SFENCE 명령어 및 모든 직렬화 명령어 (예 : CPUID 명령어)에 대해 정렬됩니다. MFENCE는 명령 스트림을 직렬화하지 않습니다. 약하게 정렬 된 메모리 유형은 순서가 잘못된 문제, 추측 적 읽기, 쓰기 결합, 및 쓰기 축소와 같은 기술을 통해 더 높은 프로세서 성능을 달성하는 데 사용할 수 있습니다. 데이터의 소비자가 데이터를 약하게 주문한 정도를 인식하거나 알 수있는 정도는 응용 프로그램마다 다르며이 데이터를 생산하는 사람은 알 수 없습니다. MFENCE 명령은로드를 보장하는 성능 효율적인 방법을 에 제공하며 약한 순서의 결과와 해당 데이터를 사용하는 루틴을 생성하는 루틴간에 순서를 지정합니다.

프로세서는 WB, WC 및 WT 메모리 유형을 사용하는 시스템 메모리 영역에서 데이터를 추론하여 캐시 할 수 있습니다. 이 추측 적 인출은 언제든지 발생할 수 있으며 명령 실행에 종속되지 않습니다. 따라서 명령은 MFENCE 명령의 실행과 관련하여 주문되지 않습니다. 데이터는 MFENCE 명령의 실행 직전, 도중 또는 후에 추측 적으로 캐시로 가져올 수 있습니다.

MFence 명령어는 일종의 마커가 아닌 상당히 많은 작업을 수행합니다.