2011-09-14 3 views
2

아마 바보 같은 질문을 할 수 있지만 다음과 같은 경우입니다 :AMD 인텔 프로세서 대 실행

우리의 개발 기계 우리가 32 비트를 생산하고 현재 모든 64 비트 인텔 기반 시스템이다 64 우리의 응용 프로그램의 비트 버전. AMD 기반 시스템과 달리 Intel 기반 시스템을 사용하도록 고객에게 권장합니다.

이제 우리 IT 관리자는 새로운 개발 시스템을 구입하고 그가 (64 비트) AMD 기반 시스템을 구입하는 데 드는 비용을 절감하고자합니다. Visual Studio (2010)는 어떤 프로세서가 실행되고 있는지 신경 쓰지 않고 생성 된 코드는 동일하지만 확실한 것은 : 생성 된 실행 파일 (프로세서와 AMD)에 어떤 차이가 있는지, 그것은 지어졌다?

+0

시스템에서 공급 업체 최적화 라이브러리 (예 : MKL 또는 ACML 수학 라이브러리. 일반적으로 차이는별로 없습니다. OTOH, [비 윤리적이거나 불법적 인 컴파일러가 존재합니다.] (http://www.agner.org/optimize/blog/read.php?i=49#49). – Iterator

+0

@Iterator : MKL 등에 대한 CPU 디스 패칭이 런타임에 수행되기 때문에 컴파일 된 바이너리에는 영향을 미치지 않습니다. – Mysticial

+0

@Mystical : 컴파일 관련 수정. 나는 OP가 바이트 코드보다는 전체적인 차이 (퍼포먼스 포함)에 관심이 있다고 생각했다. – Iterator

답변

2

. NET과 Visual Studio 컴파일러는 전에 AFAIK를 사용해 본 적이 없으므로 AFAIK는 전에 실험했기 때문에 AFAIK가 튀어 나오는 어셈블리는 무엇이든 상관 없습니다. ICC와 GCC의 경우, AMD와 Intel (매우 구체적인 것들)에 대해 차별화되어야하는 특정 호출 경로가 있습니다. 이러한 호출 경로는 처음에는 걱정할 필요가 없을 것입니다. GCC는 Intel에서 많은 SSE 및 분기 예측 힌트를 사용하여 최적화하려고 시도하지만 ICC (Intel C Compiler)만큼이나 특정 기능을 지원하지 않을 수있는 AMD를 일부 남겨 둡니다.

인텔이나 AMD와 같은 특정 아키텍처 유형에 의존하는 라이브러리가 있지만 매우 복잡한 부동 소수점 병렬 라이브러리 및 복잡한 스레딩 라이브러리와 같이 매우 전문화되어 있습니다 (그리고 연구 목적으로 만 사용 된 것으로 나타났습니다). .

2

구성 방법에 따라 다릅니다. 나는 기본적으로 아무 문제가 없다고 생각합니다.

인텔 컴파일러를 사용 중이고 /QxHost 또는 /fast으로 컴파일하는 경우 시스템에서 가능한 기능을 명확하게 보여주기 때문에 중요합니다.

그러나 /arch:XXX 또는 옵션을 지정하면 시스템과 독립적입니다. GCC의 경우 기본적으로 호스트 컴퓨터를 보지 않습니다.

편집 :

가 늘어나는만큼 MKL 같은 라이브러리가 가서, 호스트 시스템은 여전히 ​​MKL의 버전은 컴파일 된 효과가 없습니다. 일반적으로 MKL의 다중 코드 경로는 관계없이 이진 파일에 저장되며 CPU 디스패치는 런타임에 수행됩니다.

1

중요하지 않습니다. 소프트웨어 측면에서 볼 때 AMD와 인텔은 x86 기반 CPU와 동일한 칩을 사용합니다. 예, 서로 다른 확장 명령어 세트를 가질 수 있습니다. 하지만 다른 세대에 속한 인텔 CPU에 대해서도 마찬가지입니다. Visual Studio 컴파일러는 모두 실행되며 동일한 코드를 생성합니다.

관련 문제