Taeho Oh ( ohhara@postech.edu, ohhara@plus.or.kr ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
PLUS ( Postech Laboratory for Unix Security ) http://www.plus.or.kr
http://kldp.org/node/71045

performance가 매우 중요한 상황이라면 src와 dst의 memory를 64bit나 128bit align으로 맞춰 주고 move를 assembly로 해당 platform에 맞춰서 해 주는 것이 좋습니다. ( IA32의 경우에는 MMX instruction 등을 사용 ) 그리고 src는 prefetch를 해서 cache에 미리 올려 놓고 dst는 cache를 건드리지 않고 직접 dram에 write하도록 해서 불피요한 cache fill이 일어나는 것을 피해주는 것이 좋습니다.


cpu마다 다른 이야기이지만 일단 IA32를 기준으로 살펴보면 movntq라는 cache를 거치지 않고 직접 메모리에 write하는 뵨태(!) instruction이 존재합니다. 그리고 prefetch를 data에 대고 수동으로 때리는 prefetchnta라는 놈도 존재합니다.

그리고 data를 대량으로 메모리안에서 복사할 때는 movntq를 사용하는 방법이 cache를 사용하는 것보다 더 빠르다고 합니다. 당연히 소량으로 복사할 때 movntq를 사용하면 말씀하신 대로 다시 메모리에서 cache로 읽어야 되니까 시간이 더 오래 걸리겠지만 대량일 경우에는 cache miss가 연속적으로 일어날 것이 뻔히 예상되기 때문에 메모리에 직접 write하는 것이 빠른 듯(?) 합니다. 그리고 아마 이거는 제 추측인데 write-back으로 메모리에 한꺼번에 기록하는 것이 메모리에 직접 write하는 것보다 빠를 수도 있겠지만 write-back을 하기에 앞서 메모리의 내용을 cache로 가져오는 작업도 있기 때문에 상쇄되지 않나 생각됩니다.




http://mail-index.netbsd.org/tech-perform/2002/10/16/0000.html

'KB > Win32/x86' 카테고리의 다른 글

Windows MP issue (특히 memory out of order)  (0) 2006.06.30
윈도우즈 NT 부팅 과정  (0) 2006.06.16
Optimization Techniques  (0) 2006.06.12
Programming Optimization  (0) 2006.06.12
Researchers in Computer Architecture and Compilers  (0) 2006.06.12

+ Recent posts