문제

우리는 항상 인텔 가게였습니다. 모든 개발자는 인텔 머신을 사용하고 최종 사용자를위한 권장 플랫폼은 인텔이며 최종 사용자는 AMD에서 실행하려는 경우 전망대입니다. 어쩌면 테스트 부서에 AMD 기계가 어딘가에 있었을 수도 있습니다.

몇 년 전까지 우리는 방금 MSVC 컴파일러를 사용했으며 SSE 레벨을 넘어서 많은 프로세서 튜닝 옵션을 제공하지 않기 때문에 코드가 한 X86 공급 업체보다 다른 X86 공급 업체를 선호 할 수 있는지에 대해 너무 걱정하지 않았습니다. 그러나 최근에는 인텔 컴파일러를 많이 사용하고 있습니다. 우리의 내용은 (인텔 하드웨어에서) IT로부터 상당한 성능 이점을 얻을 수 있으며, 벡터화 기능은 ASM/Intrinsics로 이동할 필요가 줄어 듭니다. 그러나 사람들은 인텔 컴파일러가 실제로 AMD 하드웨어에 대해 좋은 일을하지 않을 수 있는지에 대해 약간 긴장하기 시작했습니다. 확실히 Intel CRT 또는 IPP 라이브러리에 들어가면 최적화 된 기능에 점프 테이블을 설정할 수있는 많은 CPUID 쿼리가 표시됩니다. 인텔이 AMDS 칩에 좋은 일을하는 데 많은 어려움을 겪지 않을 것 같습니다.

이 분야에서 경험이있는 사람이 실제로 큰 문제인지 아닌지에 대해 언급 할 수 있습니까? (우리는 아직 AMD 자신에 대해 실제로 성능 테스트를하지 않았습니다).

업데이트 2010-01-04: AMD를 지원할 필요성은 결코 자신이 스스로 테스트 할 수있을만큼 구체적이되지 않았습니다. 이 문제에 대한 흥미로운 독서가 있습니다 여기, 여기 그리고 여기 그렇지만.

업데이트 2010-08-09: Intel -FTC Settlement는이 문제에 대해 할 말이있는 것 같습니다. "컴파일러 및 더러운 트릭"섹션을 참조하십시오. 이 기사.

도움이 되었습니까?

해결책

AMD 상자를 사서 실행하십시오. 그것은 인터넷에서 낯선 사람을 신뢰하기보다는 유일한 책임있는 일처럼 보입니다.)

그 외에도 인텔에 대한 AMD 소송의 일부는 인텔의 컴파일러가 AMD 프로세서에서 비효율적으로 실행되는 코드를 생성한다는 주장에 근거한 것이라고 생각합니다. 그것이 사실인지 아닌지는 모르겠지만 AMD는 그렇게 믿는 것 같습니다.

그러나 그들이 고의적으로 그렇게하지 않더라도 인텔의 컴파일러가 인텔 프로세서에 대해 특별히 최적화된다는 것은 의심의 여지가 없습니다.

그것이 말하면, 나는 그것이 큰 차이를 만들 것이라고 의심합니다. AMD CPU는 여전히 컴파일러의 모든 자동 벡터화 및 기타 영리한 특징으로부터 이점을 얻을 수 있습니다.

다른 팁

우리가 본 것은 인텔 컴파일러가 가용 명령어 세트에 대해 런타임 선택을 해야하는 경우 인텔 CPU를 인식하지 못하면 "표준"코드로 들어가는 것입니다 (예상대로 최적이 아닐 수도 있습니다. ).

위의 "컴파일러"라는 단어를 사용하더라도 주로 명령어 세트를 확인하고 최상의 코드를 호출하는 제공된 (사전 컴파일 된) 라이브러리 및 내장에서 발생합니다.

분명히 성능이 애플리케이션에 중요하다면 분명히 하드웨어/컴파일러의 모든 조합에서 일부 테스트를 수행하는 것이 좋습니다. 보장이 없습니다. 외부인으로서, 우리는 당신에게 우리의 추측/편견을 줄 수 있습니다. 소프트웨어는 우리가 본 것과는 다른 고유 한 특성을 가질 수 있습니다.

내 경험:

나는 인텔에서 일했고 성능이 중요한 곳에서 사내 (C ++) 응용 프로그램을 개발했습니다. 우리는 인텔의 C ++ 컴파일러를 사용하려고했습니다. 언제나 수행 된 GCC에서-프로파일 실행을 수행 한 후에도 프로파일 링 된 정보 (ICC가 최적화하기 위해 사용하는)를 사용하여 다시 컴파일하고 정확히 동일한 데이터 세트 (2005-2007 년에 상황이 다를 수 있음)에서 다시 실행합니다. 따라서 내 경험을 바탕으로 GCC (ICC 및 MSVC 외에)를 사용해 볼 수 있습니다. 그런 식으로 더 나은 성능을 얻고 질문을 심을 수 있습니다. 컴파일러를 전환하는 것은 너무 어렵지 않아야합니다 (빌드 프로세스가 합리적 인 경우).

이제 저는 다른 회사에서 일하고 IT 사람들은 광범위한 하드웨어 테스트를 수행하며 한동안 Intel과 AMD 하드웨어는 비교적 비교할 수 있었지만 최신 Intel 하드웨어는 AMD를 상당히 능가했습니다. 결과적으로, 나는 그들이 상당한 양의 Intel CPU를 구매했으며 소프트웨어를 운영하는 고객에게 동일하게 추천합니다.

그러나 인텔 컴파일러가 구체적으로 AMD 하드웨어를 천천히 실행하는지 여부에 대한 질문으로 돌아갑니다. 나는 인텔이 그것으로 귀찮게 의심합니다. Intel CPU 아키텍처 또는 칩셋의 내부에 대한 지식을 사용하는 특정 최적화는 AMD 하드웨어에서 느리게 실행될 수 있지만 AMD 하드웨어를 구체적으로 타겟팅하는 것은 의심 스럽다.

내 일반 버튼을 누르면 죄송합니다.

이것은 낮은 수준의 최적화의 주제에 관한 것이므로 코드는 1) 프로그램 카운터가 많은 시간을 소비하고 2) 컴파일러가 실제로 보는 것만으로도 중요합니다. 예를 들어, PC가 컴파일하지 않는 라이브러리 루틴에서 대부분의 시간을 보내면 그다지 중요하지 않습니다.

조건 1과 2가 충족되는지 여부에 관계없이 여기에 최적화가 어떻게 진행되는지에 대한 나의 경험이 있습니다.

샘플링 및 고정의 몇 가지 반복이 수행됩니다. 이들 각각에서 문제가 식별되고 대부분 프로그램 카운터가 어디에 있는지가 아닙니다. 오히려 콜 스택의 중간 레벨에 기능 호출이있어 성능이 가장 중요하기 때문에 교체 할 수 있습니다. 빨리 찾기 위해 나는 이것을한다.

몇 번의 긴 호출 또는 많은 짧은 짧은 일에 관계없이 실행 시간의 상당 부분을 위해 스택에있는 함수 통화 명령이있는 경우 해당 호출이 해당 시간의 일부로 책임이 있으므로 제거합니다. 또는 덜 실행하면 많은 시간을 절약 할 수 있습니다. 그리고 저축은 낮은 수준의 최적화를 훨씬 초과합니다.

이제 프로그램이 될 수 있습니다 여러 번 시작보다 빠릅니다.나는 아무리 신중하게 작성 하더라도이 과정에서 혜택을 볼 수없는 좋은 크기의 프로그램을 본 적이 없습니다.프로세스가 수행되지 않은 경우 저수준 최적화가 프로그램 속도를 높이는 유일한 방법이라고 가정해서는 안됩니다.

이 프로세스가 더 이상 수행 할 수없는 지점까지 수행 된 후, 샘플이 PC가 컴파일러가 보는 코드에 있음을 보여 주면 저수준 최적화가 차이를 만들 수 있습니다.

이 스레드가 시작될 당시 Microsoft C ++는 코드 생성에 기본값으로 AMD의 경우에도 좋았고 Intel에게는 좋지 않았습니다. 최근의 CPU 브랜드가 독특한 성능 버그를 해결 한 후에도 최신 컴파일러가 블렌드 옵션에 적합합니다. 인텔에서 처음 일할 때 컴파일러는 인텔 별 아키텍처 설정에 대한 최적화를 예약했습니다. 나는 그것이 10 시간의 증언에서 나오지 않았지만 FTC 증언의 주제일지도 모르지만, 최신 CPU 모델과 컴파일러 개발 시간을보다 생산적으로 사용해야합니다. 최신 인텔 CPU에서 해당 쓸모없는 컴파일러 중 하나를 사용한 경우 동일한 성능 결함이 표시 될 수 있습니다.

행동 할 수 없다면 걱정하는 것은 무의미합니다. 가능한 조치는 다음과 같습니다. AMD를 구매하지 않거나 다른 컴파일러를 사용하지 않습니다. 그래서해야 할 분명한 일은 다음과 같습니다.

(1) 하나의 AMD 상자를 구입하고 인텔 컴파일러로 컴파일 된 코드의 속도를 측정하십시오. 충분히 빠르나요? 그렇다면 완료되면 AMD를 구입할 수 있습니다. 걱정하지 마십시오.

(2) 아니오 인 경우 : 다른 컴파일러로 코드를 컴파일하고 AMD 상자에서 실행하십시오. 충분히 빠르나요? 아니요, 완료되면 AMD를 살 수 없습니다. 걱정하지 마세요.

(3) 예일 경우 : 인텔 상자에서 동일한 코드를 실행하십시오. 충분히 빠르나요? 그렇다면 완료되면 AMD를 구입할 수 있지만 컴파일러를 전환해야합니다. 걱정하지 마십시오.

(4) 아니오 인 경우 : 가능성은 다음과 같습니다. 하나를 선택.

공급 업체가 연꽃 제품이 제품을 제공하기 전에 시장에 도달하는 것을 막으려 고 시도했을 때 나는 의도적 인 기술을 직접 경험했습니다. 작업 기술을 사용할 수 있었지만 Lotus는 사용하는 것이 금지되었습니다. 아 잘 ...

몇 년 전, 인텔 컴파일러에서 단일 바이트를 패치하면 AMD에 사용될 때 절름발이가되지 않은 "최적"코드를 방출 한 블로그가있었습니다. 나는 몇 년 동안 그 블로그 항목을 찾지 못했습니다.

나는 그러한 경쟁 행동이 계속된다고 믿는 경향이있다. 제공 할 다른 증거가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top