2016-07-22 5 views
2

사람들은 전에 이와 비슷한 질문을 한 적이 있습니다.하지만 정말 많은 상충되는 정보가있어서 한번 시도해보고 싶습니다. 필자는 ISA (instruction set architecture)와 실제 하드웨어 구현을 명확하게 구분하여 시도하려고합니다. 먼저 내 시도 해명 :intel과 amd의 ISA의 차이점은 무엇입니까?

2)는 ISA가 1 개 이상의 CPU의 이진 표현 인 점을 감안)

1.) 현재 다른 사람의 사이가 intel64 및 AMD64의 CPU의 아웃 (가 있지만이 초점이다 지시 사항은 ISA가 실제 하드웨어 구현과 완전히 별개임을 의미합니다.

내 질문 (들) :

는 인텔 64 및 AMD64 CPU를 사이의 차이를 서로 다른 또는 확장 - 64 ISA들과 관련이 있습니까? 또는 x86-64 ISA의 다른 하드웨어 구현은 무엇입니까? 아니면 둘다?

답변

4

예 ISA는 하드웨어가 아닌 문서/사양입니다. 이 모든 것을 올바르게 구현하면 x86과 비슷한 점이 아닌 x86 CPU를 만드는 것입니다.

공식 문서 (Intel의 설명서)에 대한 링크는 태그 위키를 참조하십시오.

Intel 및 AMD의 implementations of the x86 ISA differ은 주로 성능이 뛰어나며 명령 세트의 확장이 지원합니다. 소프트웨어는 CPUID 명령어를 사용하여 지원되는 항목을 쿼리 할 수 ​​있습니다.

이 연결된 질문에는이 질문에 대해 묻는 것과 동일한 몇 가지 답변이 있습니다. 여기에 주요 이견의


하나는 그 인텔, AMD와 VIA도 호환 가능하지 않습니다 each have their own hardware-virtualization extensions. Xen과 같은 VM은 이러한 각 확장에 대해 별도의 "드라이버"또는 "백엔드"코드가 필요합니다. 그러나 그것들은 여전히 ​​기본 x86의 일부가 아닌 확장입니다.

사용자 공간 프로그램에서 사용하기위한 SIMD 확장 프로그램은 모두 Intel's efforts to screw over AMD with anti-competitive practices 덕분에 두 프로그램 모두에서 사용할 수있게됩니다. 이는 다른 모든 사람들의 시간을 요하며 x86 환경 전반에 해로운 영향을 미칩니다 (예 : SSSE3가 현재는 더 많은 소프트웨어의 기준으로 간주 될 수 있음). 그러나 인텔의 수익에 도움이됩니다. 여기 좋은 예가 있습니다 : AMD Bulldozer는 FMA4를 지원하지만 인텔은 마지막 순간에 마음을 바꿔 Haswell의 FMA3을 구현했습니다. AMD는 다음 microarch (Piledriver)가 출시 될 때까지이를 지원하지 않았습니다.


는 ISA가 1 개 이상의 CPU 명령의 이진 표현임을 감안할 때.

아니요, ISA는 그 이상입니다. Intel 문서가 모든 x86 CPU에서 보장되는 것으로 간주되는 모든 것은 ISA의 일부입니다. 이것은 모든 명령어의 자세한 동작뿐만 아니라 어떤 제어 레지스터가 무엇을하는지, 메모리 순서 지정 규칙과 같은 것입니다. 기본적으로 Intel 및 AMD에서 발행 한 설명서의 모든 내용은 "특정 CPU 모델"에서 시작하지 않습니다.

Intel과 AMD의 시스템 프로그래밍 가이드가 x86의 작동 방식이 다른 경우가 있습니다. (그리고 VIA가 x86 CPU를 위해 자신의 것을 공개한다면).체크하지는 않았지만 사용자 공간이이 문제로 인해 어려움을 겪지 않는다고 확신합니다. 차이점이 있다면, 커널을 실행할 때만 작동하는 권한있는 명령어로 제한됩니다. 어쨌든,이 경우 x86 IA가 Intel 및 AMD 문서의 공통 하위 집합이라고 말할 수 있습니다.


실제 하드웨어가 실제로 무엇을 찾기 위해 실험을하면 문서를 이해하는데 유용하다는 것을 참고하지만, 그것들을 읽는하지 교체. 테스트 한 CPU에서 명령이 어떻게 작동하는지 코드에 의존하는 것을 원하지는 않습니다.

그러나 인텔은 윈도우의 기존 버전을 실행 할 수 없다는 것은 상업적으로 단점이 될 것이기 때문에, 실제 소프트웨어와 새로운 디자인을 테스트한다. 예 : Windows9x doesn't invalidate a TLB entry that could only have been filled speculatively (이 예제의 나머지 부분은 매우 자세한 블로그 게시물의 요약 및 외삽 일뿐입니다). 이것은 안전하다는 가정에 기반한 성능 해킹 (당시 하드웨어에서 안전함)이거나 눈에 띄지 않는 버그였습니다. 당시 하드웨어 테스트를 통해이를 감지하지 못했습니다.

현대 인텔 CPU는 투기 pagewalks을하지만, 심지어 최근 스웰 감지하고 잘못 추측 다운 촬영할이 여전히 작동 발생하지 않습니다 가정 코드 때문에.

프로세서는 실제로 발생하지 않을 것이라고 추측 실행의 결과 프리 페치과 액세스에 필요한 번역을 캐시 할 수 있습니다

이 실제 하드웨어가 말한다 ISA,보다 강한 주문 보증을 제공합니다 의미 실행 된 코드 경로에서.

이 강력한 동작은 알려진 마이크로 아키텍처에서만 수행하지 않는 한 실수가 될 수 있습니다. AMD K8/K10은 인텔과 비슷하지만, Bulldozer-family는 coherence를 제공하는 탐지 + 롤백 메커니즘이 없기 때문에 Win9x 커널 코드가 해당 하드웨어에서 안전하지 않다고 추측합니다. 그리고 미래의 Intel 하드웨어도 감지 + 롤백 메커니즘을 떨어 뜨릴 수 있습니다.

TL : DR은 : 모든 uarches가 86이 ISA의 말씀 구현할 수 있지만, 일부는 강한 보증을 제공합니다. 만약 당신이 마이크로 소프트만큼 크다면, 인텔과 AMD는 코드가 의존하는 비 ISA 지정 동작을 재현하는 CPU를 설계 할 것입니다. 적어도 소프트웨어가 오랫동안 사용되지 않을 때까지. 향후 Intel uarches가 롤백 메커니즘을 유지할 것이라는 보장은 없습니다.


다른 예 : 0이 입력 된 bsf instruction은 출력이 정의되지 않은 채로 있습니다. 그러나 특정 CPU에 대한 출력을 0으로 설정하거나 (I 인텔 메롬 (Core2Duo)에서 테스트 할 때 실제 동작) 그것을 변경을 떠나 같은 행동의 몇 가지 패턴이있을 것이다. 확실히 임의의 비트 패턴을 의미하지는 않습니다. 입력 종속성으로 출력 레지스터의 이전 값을 추적하지 않으면 순서가 잘못된 실행을하더라도 실제로 실제로 예측할 수 없습니다. (어쩌면 있지만 그것은 수행하고 the popcnt/lzcnt/tzcnt false dependency in later uarches came from! 곳이다)

는 아마도이이 동작에 따라 몇 가지 코드를 깨는 방지하는 것입니다.

게시물과 당신이 준 다른 링크에서 그래서
+0

플러스이 하나 http://stackoverflow.com/questions/29833938/what-is-the-compatible-subset-of-intels-and-amds-x86-64 -implementations? rq = 1 정말로 intel64와 amd64 ISAs가 95 % 동일하고 몇 가지 사소한 차이점과 확장자가 각각 추가되었다고 결론 지을 수 있습니까? – Jason

+0

@ Jason : 예, 물론입니다. 적어도 99 % 같은 것 같아요. Intel64 대 AMD64에 대해 동일한 프로그램의 다른 빌드를 제공하는 사람은 없습니다. 예 : 리눅스 배포판도 같은 커널을 사용합니다. "일반적인"커널 대"저급"커널이지만 Intel 대 AMD는 아닙니다. –

+1

@ Jason : ISA가 논문에서 말한 것과 HW 디자이너가 실제 CPU에서 구현하도록 선택한 것을 어떻게 다른지 보여주는 예제로 업데이트되었습니다. –