2009. 9. 23. 15:24

asm as "memory barrier"

최근의 CPU들은 프로그램의 명령어를 효율적으로 처리하기 위해

 

명령어들을 "재배치"해서execution한다... 물론 Runtime 시의 이야기...

 

이런 기법은 꽤 오래전부터 적용되어 있고 Out-of-order Execution이라 한다.

 

참고로 ATOM 같은 CPU는 In-Order 방식, -> 그래서 저전력 저성능이 가능했던것

(아톰의 1Ghz와 다른 인텔의 1Ghz는 이런 곳에서 차이가 난다)

 

우리 말로 순차실행방식.위에것은 비순차실행방식정도가 되겠지.

 

이 때 물론 결과가 똑같도록 Order를 바꾸지만, 여러 CPU간에도 서로가 서로를 볼 때도

 

바꾼 결과가 영향을 미쳐서는 안된다.

 

그래서 Memory Barrier를 사용해서 Re-Ordering을 막는다.

 

S/W적인 방법과 H/W적인 방법이 있다고함.

 

ARM에서 제공하는 것도 있고, GCC에서만 가능한 asm volatile같은 것..

 

관련 링크들

http://www.embeddedrelated.com/usenet/embedded/show/17547-1.php

http://lksas4-arm11.springnote.com/pages/899194

http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html