2012-06-19 4 views
0

저는 C++을 처음 사용합니다. 최근에 우리 회사에서 X86_64 AMD Vs와 같은 다른 기계 아키텍처 용 코드를 컴파일하는 토론이 시작되었습니다. Intel기계 아키텍처에 따라 달라지는 것은 무엇을 의미합니까?

이제 응용 프로그램을 컴파일하기 위해 gcc 플래그를 살펴 보았습니다. x86_64에서 AMD 대 Intel.

기술적 인 측면에서 컴파일 된 코드와 시스템 아키텍처 간의 종속성을 설명해 주실 수 있습니까?

AMD에서 gcc-86_64를 사용하여 코드를 컴파일하고 Intel x86_64에서 이진 코드를 실행할 수 있습니까?

+0

아니요, 할 수 없습니다. 적어도 내가 아는 바로는 .... – Neal

+0

JVM은 어느 머신에서나 자바를 실행할 수있는 것으로 유명한 곳 이었습니까? – Kristian

+0

AMD의 x86-64는 대부분 인텔 EM64T와 완벽하게 호환됩니다. – Mysticial

답변

2

x86 32 비트 프로세서 이후에 Intel은 64 비트로 이동하고 HP와 공동 작업하여 64 비트 Itanium 프로세서를 개발했습니다. 안타깝게도 명령 세트와 아키텍처가 x86과 차별화되어 매우 민첩하지 않았습니다.

AMD는 x86 아키텍쳐를 64 비트로 확장했으며, 처음에는 EM64T라고 불렀지 만, AMD64라고합니다. AMD가 인텔을 32 비트 프로세서로 따라 붙인 것처럼, 인텔의 64 비트 프로세서는 아이태니엄 64 비트 프로세서보다 훨씬 더 대중적 이었기 때문에 인텔은 이제 64 비트 프로세서로 AMD를 따라야했다.

물론 인텔은 AMD64라고 부르는 것을 좋아하지 않으므로 x64라고 부릅니다.하지만 AMD64와 인텔의 x64는 호환됩니다 (사소한 차이점 제외, http://en.wikipedia.org/wiki/X86-64#Differences_between_AMD64_and_Intel_64 참조). x64 또는 AMD64 용으로 컴파일하면 생성 된 코드가 이러한 차이점을 피할 수 있으므로 실제로는 두 가지 모두에서 실행할 수 있습니다.

어떤 경우이든 완전히 다른 종류의 프로세서이므로 Itanium (IA-64라고도 함) 생성을 피하십시오.

1

gcc -march 플래그를 사용하여 특정 아키텍처/프로세서에 대해 컴파일 할 수 있습니다. 하지만 경고를 받으면, 머신의 다른 CPU/아키텍처 용으로 컴파일 된 바이너리를 실행하려고해서는 안됩니다. 작동하지만 대부분의 경우 바이너리 최적화 방법으로 인해 무작위로 실패합니다.

덜 공격적인 -mtune 플래그를 사용하여 특정 대상 CPU에 대해 최적화 할 수 있지만 모든 CPU에서 실행될 수있는 기능은 유지됩니다. - 인텔의 아이테니엄 64 비트 아키텍처는 있지만 What's optimal march & mtune options for gcc for "Pentium4 and above" processors http://en.gentoo-wiki.com/wiki/Safe_Cflags

0

당신은 다르게 - 64와 AMD64에 대한 optomize 수 있지만 그들 중 하나에서 누락 된 (AFAIK) 명령이 없습니다 :

다음 링크를 참조하십시오 다른.

0

SSE4A와 같은 명령어는 인텔 프로세서에서 실행되지 않습니다. 그것은 일이 잘못 될 수있는 곳 중 하나입니다.

관련 문제