http://realworldtech.com/에있는 많은 포럼 스레드는 MIPS와 같이 단순한 디코드 ISA보다 트랜지스터 수/성능/전력면에서 x86 CPU의 비용이 얼마나 많은지에 대해 논쟁했습니다.
10 %는 자연스럽게 추측되는 숫자입니다. 이 비용 중 일부는 고정되어 있으며 CPU를보다 강력하게 만들면 확장되지 않습니다. 예 : x86 명령어를 MIPS 명령어를 분리하기 위해 복잡성이 비슷한 uops 스트림으로 디코딩하는 데는 아마 3 단계의 추가 파이프 라인 단계가 필요하다. 메모리 목적지가있는 ADD는로드, ADD 및 저장으로 디코딩 될 수 있습니다. (파이프 라인의 일부 부분에서 마이크로 융합이 복잡해집니다.)
가변 길이의 x86 명령어 디코딩은 병렬로 수행하는 데 전력이 많이 소모됩니다 (현재 설계에서는 최대 4 개). x86은 길이가 결정 (즉, 다음 명령의 시작)하기 위해서는 가변적 인 길이 일뿐만 아니라 선택적인 접두어 및 다양한 다른 복잡성이 있기 때문에 많은 비트를 조사해야합니다. Intel과 AMD 사이의 Agner Fog's blog post about the "instruction set war"은 x86 opcode 코딩 공간의 지저분한 상태의 비용에 대해 설명합니다. (실제 코드에서 병목 현상을 발견하고 성능 카운터를 이해하기 위해 AMD와 인텔의 최신 x86 디자인에서 파이프 라인에 대해 배우려면 그의 microarch pdf을 참조하십시오. 그러나 CPU가 어떻게 작동하는지 궁금하면 흥미 롭습니다.)
x86 명령어 디코딩 비용은 전통 L1 캐시뿐만 아니라 Intel's Sandybridge microarchitecture family uses a small/fast decoded-uop cache보다 높습니다. 큰 루프조차도 일반적으로 uop 캐시에 맞춰 레거시 디코더에서 실행되는 것보다 전력을 절약하고 프론트 엔드 처리량을 증가시킵니다. 다른 대부분의 ISA는 디코딩 된 명령어 캐시에서 얻을 수있는 많은 이점을 얻을 수 없으므로 사용하지 않습니다. (인텔은 이전에 펜티엄 4에서 디코딩 된 uop 추적 캐시 (L1 I 캐시가없고 디코더가 약함)를 실험했지만 SnB의 uop 캐시는 이 아니고은 추적 캐시이고 레거시 디코더는 여전히 빠름)
OTOH, 일부 FLAGS 업데이트와 같이 x86의 기존 수하물 중 일부는 나머지 파이프 라인 및 주문 불량 코어에 비용을 부과합니다. 최신 x86 CPU는 DEC/JNZ와 같은 것에 대한 잘못된 의존성을 피하기 위해 FLAGS의 다른 부분을 개별적으로 이름을 바꿔야합니다. (DEC doesn't modify CF). 인텔은 이것을하지 않는 것으로 실험했다 (펜티엄 4에서는 넷 버스트 마이크로 아키텍처 제품군). 그들은 모든 사람들에게 INC/DEC을 피한 컴파일러로 코드를 다시 컴파일하도록 강요하고 add eax, 1
(모든 플래그를 수정 함)을 사용한다고 생각했습니다. (This optimization advice stuck around for ages in their official optimization manual, long after P4 was obsolete, and many people think it's still relevant.)
어떤 사람들은, 86의 강력한 메모리 주문 의미가 파이프 라인 CPU가 악용 할 수있는 병렬 처리를 감소 "86 세"의 일부로 간주되어야한다고 주장하지만, 다른 사람 (예를 들어,Linus Torvalds)는 하드웨어를 사용하는 것이 멀티 스레드 코드의 장벽을 필요로하지 않는다는 것을 의미합니다. 그리고 배리어 명령을 갖는 것은 "저렴한"것입니다 (저장소 버퍼를 완전히 비우지 않아도됩니다). 하드웨어가 메모리 순서를 추적 할 수있을만큼 자세하게 설명해야합니다.
https://en.wikipedia.org/wiki/Micro-operation 참조 용어는 마이크로 운영 또는 마이크로 운영입니다. 또한, Agner Fog의 모든 것이 좋을 것입니다. http://www.agner.org/optimize/ –