2017-03-08 4 views
3

나는 메모리 장벽 후 이후의에로 이전과 명령의 재정렬을 방지 함을 알고있는 메모리 장벽 전에, 예를 들어, 나는 다음과 같은 지시 사항이있는 경우 :이 지침에서 실행할 수 있습니다지침의 순서 변경을 방지하는 것 이외에 메모리 배리어는 어떤 작업을 수행합니까?

instruction 1 
instruction 2 
instruction 3 
memory barrier 
instruction 4 
instruction 5 
instruction 6 

을 다음과 같은 순서 :

instruction 3 
instruction 1 
instruction 2 
memory barrier 
instruction 6 
instruction 5 
instruction 4 

는하지만 그들은 다음과 같은 순서로 실행되지 않습니다 :

instruction 1 
instruction 2 
instruction 5 
memory barrier 
instruction 4 
instruction 3 
instruction 6 

하지만 다음 작업이 메모리 장벽에 의해 시행되는지 확실하지 않습니다.

  • 메모리 장벽이 완료되기 전에 보류중인 모든 작업이 완료되었습니다.
  • 메모리 배리어 이전에 쓰기 작업으로 캐시에 남아있는 모든 데이터는 플러시됩니다.
+0

이것은 흥미로운 질문이지만 매우 광범위합니다. 각 아키텍처에는 고유 한 장벽이 있습니다. 일반적으로 열거 된 작업 중 어느 것도 장벽에 필수 사항은 아닙니다. –

답변

0

적어도 IBM의 powerPC의 경우, 마감은 보증되지 않습니다. c.f. IBM's documentation :

[The] eieio 명령의 실행 또는 완료가 eieio 앞의 명령으로 인해 야기 된 저장 장치 액세스가 완료되었음을 의미하지 않습니다. 명령에 의해 생성 된 장벽은 장벽에 의해 분리 된 모든 액세스가 지정된 순서대로 수행되도록 보장하지만 eieio 명령이 완료된 후에도 장벽 이전에 발급 된 액세스가 수행되지 않을 수도 있습니다.

0

기술적으로 메모리 장벽 명령 실행에 대한 명령을 시행하지 않습니다. 명령 실행의 순서가 다른 관찰자에게 이 표시되도록으로 표시되도록 제한합니다.

메모리로의 플러시가 필요하지 않으며 실제로 캐시 기반 아키텍처의 속도를 크게 저하시킵니다. 예를 들어 보류중인 메모리 조작의 개인 대기열을 유지하고 다른 코어와 공유되는 일관된 캐시가있는 코어를 생각해보십시오. 장벽에 도달하면 대기열에 더 이상 메모리 작업을 허용하기 전에 메모리 작업 큐를 비울 수 있습니다. 캐시를 유출 할 필요가 없습니다. 캐시 일관성은 나머지를 처리 ​​할 것입니다. 이 프로토콜이 작동하는 방법에 대한 자세한 설명은 A Primer on Memory Consistency and Cache Coherence을 참조하십시오.