C++

L1 캐시는 왜 Data와 Inst로 나뉘어 있나요? (번역)

Sorting 2020. 12. 13. 14:31
반응형

원문 : softwareengineering.stackexchange.com/questions/44731/why-are-there-separate-l1-caches-for-data-and-instructions

 

​여기에는 몇가지 이유가 있습니다. 

 

첫번째이자 가장 중요한 이유는, inst(명령어) 캐시에 저장되는 정보(data)는 일반적으로 data 캐시에 저장되는 것과 다릅니다. - inst 캐시에 저장되는 정보는 디코더를 돕기 위해 명령어 자체와 함께, 다음에 실행될 명령어가 어디 있는지를 저장하고 있습니다. 어떤 프로세서는 (Netburst나 SPARCs,  인텔 펜티엄 4 ) "trace cache"란 기법을 사용하는데, 이것은 암호화된 상태의 명령어를 저장하기보다는 명령어를 디코딩 결과를 저장하는 것입니다. 

 

( : trace cache 는 더 많은 명령어를 패치할 수 있게 하고, 전력 소비를 줄이는 효과가 있지만, 지금은 안쓰이는 것 같습니다. 패치를 많이 할 수록 스탭이 늘어나게 되고, 스탭이 늘어날 수록 발열이 심하기 때문일까요? 아시는 분 댓글 부탁드립니다! ) 

 

두번째로는, 회로에서 1비트를 절약하기 위해서 입니다. 데이터 캐시는 read와 write를 구분해서 다뤄야  하는데, 명령어 캐시는 그럴 필요가 없기 때문입니다. (이것은 왜 self-modifying code(스스로 수정하는 코드)는 매우 비용이 큰가에 대한 부분입니다. -- 명령어를 수정하게 되면, 명령어 캐시를 직접 덮어쓰지 않고, 그 쓰기연산은 데이터 캐시를 통해 L2캐시로 갑니다. 그리고 그 명령어 캐시 라인은 invalidated되고 L2캐시로부터 리로드 됩니다.) 

반응형