2016-09-29 8 views
-2

내 컴퓨터 그래픽 아키텍쳐에서 교수는 MIPS에서 파이프 라이닝에 대해 이야기했으나 x86 명령어 세트 (일부 기억이 안 나는 것) 때문에 x86 프로세서에 사전 논리를 추가해야 할 필요가 있다고 말했습니다. 어셈블리 명령과 파이프 라인을 처리합니다.파이프 라인을 구축하기 위해 실제 Intel x86 프로세서의 오버 헤드가 얼마나됩니까?

차라리 주제에 대한 설명서를 참조하거나 힌트를보다, 직접 숫자 대답을 찾고 있지 않다 : 파이프 라인을 허용하기 위해 86 지침을 번역하기 위해 수행되는 내용, 수행 방법이 논리 작업 등

감사합니다 무리.

+0

https://en.wikipedia.org/wiki/Micro-operation 참조 용어는 마이크로 운영 또는 마이크로 운영입니다. 또한, Agner Fog의 모든 것이 좋을 것입니다. http://www.agner.org/optimize/ –

답변

-1

MIPS 명령어 세트는 파이프 라인을 쉽게 만들 수 있도록 설계된 RISC 명령어 세트 인 반면 x86 명령어 세트는 악성 종양처럼 성장했습니다. 파이프 라인 된 x86 구현은 일반적으로 각 x86 명령어를 하나 이상의 RISC와 같은 연산으로 변환 한 다음 파이프 라인 처리합니다.

3

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)는 하드웨어를 사용하는 것이 멀티 스레드 코드의 장벽을 필요로하지 않는다는 것을 의미합니다. 그리고 배리어 명령을 갖는 것은 "저렴한"것입니다 (저장소 버퍼를 완전히 비우지 않아도됩니다). 하드웨어가 메모리 순서를 추적 할 수있을만큼 자세하게 설명해야합니다.

+1

또한 MIPS 명령어 세트에 기존 유산 가방이 추가되었습니다. 예를 들어, 지사 지연 슬롯은 고전 5 상태 파이프 라인과 연결되어 있으며 현대 디자인에서는 이해가되지 않습니다. –

+0

@RossRidge : 맞아, 좋은 지적이야. ISA에서 마이크로 아키텍처 세부 사항을 드러내는 것은 상황이 변화 할 때 항상 부담이됩니다. 예 : VLIW 아키텍처는 재 컴파일하지 않으면 더 넓어 질 수 없습니다. IA-64를 실제로 배운 적이 없지만 분명히 많이 노출됩니다. ARM CPU에 대한 설계 및 제조가 향상되고 Intel의 프로세스 이점으로 인해 x86 세금을 더 이상 지불 할 수 없게되면이 인수에 대한 논의가 시작됩니다. 그리고 다른 쪽은 x86 세금이 고정 비용이라고 주장했다. 나는이 질문에 근거하여 MIPS를 대체했다. –