2009-05-06 2 views
9

내가 이해할 수없는 한 가지는 Intel CPU 용으로 컴파일 된 코드가 어떻게 AMD CPU에서 작동하는지입니다.기성품 응용 프로그램이 Intel 및 AMD 프로세서 모두에서 작동하는 이유는 무엇입니까?

내 기본적인 이해는 C 코드를 컴파일하면 컴파일러가 소스 코드를 특정 프로세서에 대한 지침이있는 기계어로 변환한다는 것입니다. 따라서 응용 프로그램에서 사용할 플랫폼을 컴파일러로 컴파일해야합니다. AMD 대 Intel 용 컴파일러가 필요없고 특정 프로세서 용 소프트웨어를 구입해야하는 이유는 무엇입니까?

AMD 프로세서와 인텔 프로세서가 이전 x86 명령어에서 일부 호환성을 공유한다는 것을 알고 있습니다. 제가 알고 싶습니다. 어떻게 그 일을합니까? 내 말은, AMD 나 인텔이 서로 전화를 걸어 서로의 영업 비밀을 말하고있는 것과는 다르다는 것입니다. 그렇다면 어떻게 호환 가능한 명령어 세트를 만들 수 있습니까?

386 명령어 세트를 기반으로 한 모든 호환성은 "IF AMD CPU라면이 경우 인텔이 그렇게합니까?"

답변

18

AMD와 Intel x86 및 x86-64 CPU는 거의 전적으로 호환됩니다. 그들은 모두 x86과 x86-64를 모두 구현합니다. 그들 각각은 (MMX와 3DNow와 같은) 그들 자신의 확장을 가지고 있지만, 컴파일러는 당신이 그들에게 말하지 않으면 일반적으로 그것을 사용하지 않습니다. 요즘, AMD와 Intel은 서로의 거의 모든 확장 기능을 지원합니다. 차이점에 대해 걱정할 필요가있는 유일한 시간은 정말로 낮은 수준의 커널 작업을 수행 할 때입니다.

한편 지침 세트는 실제로 "영업 비밀"이 아닙니다. 구현은 다음과 같습니다. 두 회사 모두 지침 세트에 대한 문서를 작성하므로 각각이 지침 세트를 복사 할 수 있습니다. 그 이유는 아마도 더 많은 회사가 호환 가능한 칩을 생산한다면 더 많은 소프트웨어가이 명령어 세트 용으로 쓰여지므로 더 많은 사람들이이 칩을 구입할 것입니다. x86/x86-64는 기본적으로 데스크탑의 표준 아키텍처로서 사람들이 Intel 및 AMD 칩을 계속 구매할 수 있도록 보장합니다. Intel과 AMD는 매우 다른 구현 방식을 사용하며, 동일한 코드를 실행합니다.

+1

그래서 bdonlan의 대답과 함께 명령 세트가 Intel이나 AMD에 공개적으로 게시 된 다음 다른 명령 세트는 해당 명령 세트와 동일한 (또는 일부 확장 된) 명령 세트를 지원합니까? 그 차이점은 이러한 지침의 특정 하드웨어 구현 내에 있습니다. 그게 옳은가? – romandas

+0

@romandas : 예, 이해가 정확합니다. 칩 제조업체는 명령어 세트를 문서화하여 다른 사람들이 명령어 세트를 복사 할 수있게한다. – Zifre

+0

나는 그 정보를 당신의 대답에 추가하거나 bdonlan을 당신의 것에 추가 할 것을 제안합니다, 그래서 나는 합병 된 대답을 최종적인 것으로 받아 들일 수 있습니다. – romandas

6

사실 그들은 크로스 라이센스 계약을 맺고 있습니다. AMD가 386과 486 프로세서의 두 번째 소스였던 90 년대에는 인텔에서 AMD로 정보와 혁신이 돌아 왔고, 인텔이 x86-64 확장을 채택했을 때 AMD에서 인텔로 옮겨갔습니다.

6

이러한 프로세서의 명령어 세트는 공개적으로 문서화되어 있음을 기억하십시오. 일반적으로 한 벤더가 새로운 명령어 세트를 발명 할 것이고, 한두 세대는 다른 벤더가 호환 확장을 구현할 것이다. 그렇기 때문에 IF 386보다는 ... 특정 공급 업체와 관계없이 IF SSE4가 지원되는 라인을 따라 뭔가가 있습니다.

+0

바로 이러한 것들은 일반적으로 고급 CPUID 쿼리라고합니다. –

+0

+1 좋은 답변; Zifre가이 정보를 답에 추가했습니다. – romandas

1

두 벤더 모두 동일한 명령어 세트를 구현하므로 컴파일 된 코드가 기계 명령어로 바뀌면 두 칩 모두에서 작동합니다. 그러나 한 벤더 또는 다른 벤더에 고유 할 수있는 SSE와 같은 특수 명령 세트가 있습니다. 응용 프로그램의 성능을 향상 시키려면 사용 가능한 경우 이러한 기능을 사용하기 위해 런타임 검사를 수행 할 수 있습니다.

관련 문제