반응형
여기에는 몇가지 이유가 있습니다.
첫번째이자 가장 중요한 이유는, inst(명령어) 캐시에 저장되는 정보(data)는 일반적으로 data 캐시에 저장되는 것과 다릅니다. - inst 캐시에 저장되는 정보는 디코더를 돕기 위해 명령어 자체와 함께, 다음에 실행될 명령어가 어디 있는지를 저장하고 있습니다. 어떤 프로세서는 (Netburst나 SPARCs, 인텔 펜티엄 4 ) "trace cache"란 기법을 사용하는데, 이것은 암호화된 상태의 명령어를 저장하기보다는 명령어를 디코딩 결과를 저장하는 것입니다.
( : trace cache 는 더 많은 명령어를 패치할 수 있게 하고, 전력 소비를 줄이는 효과가 있지만, 지금은 안쓰이는 것 같습니다. 패치를 많이 할 수록 스탭이 늘어나게 되고, 스탭이 늘어날 수록 발열이 심하기 때문일까요? 아시는 분 댓글 부탁드립니다! )
두번째로는, 회로에서 1비트를 절약하기 위해서 입니다. 데이터 캐시는 read와 write를 구분해서 다뤄야 하는데, 명령어 캐시는 그럴 필요가 없기 때문입니다. (이것은 왜 self-modifying code(스스로 수정하는 코드)는 매우 비용이 큰가에 대한 부분입니다. -- 명령어를 수정하게 되면, 명령어 캐시를 직접 덮어쓰지 않고, 그 쓰기연산은 데이터 캐시를 통해 L2캐시로 갑니다. 그리고 그 명령어 캐시 라인은 invalidated되고 L2캐시로부터 리로드 됩니다.)
반응형
'C++' 카테고리의 다른 글
C++20 : std::ranges #1 - views (0) | 2021.03.17 |
---|---|
C++ : shrink_to_fit() (1) | 2020.12.13 |
TBB - 병렬 컨테이너 사용 (concurrent_hash_map) : GameServer에서 유저의 <id, index> 정보 관리 (0) | 2020.12.13 |
cocos2d-x 3.0 draw line (선 그리기) (0) | 2020.12.13 |
cocos2d-x사용 시 rc.exe이(가) 종료되었습니다 해결법 (0) | 2020.12.13 |