다음을 통해 공유


/arch(최소 CPU 아키텍처)

업데이트: 2007년 11월

스트리밍 SIMD Extensions(SSE) 및 스트리밍 SIMD Extensions 2(SSE2) 명령을 사용한 코드 생성을 지원하는 아키텍처를 지정합니다.

/arch:[SSE|SSE2]

설명

참고:

/arch는 x86 플랫폼을 대상으로 하여 컴파일할 때만 사용할 수 있습니다. x64 또는 Itanium을 대상으로 하여 컴파일할 때는 이 컴파일러 옵션을 사용할 수 없습니다.

SSE 명령은 여러 Pentium 및 AMD Athlon 프로세서에서 사용됩니다. SSE2 명령은 Pentium 4 프로세서에서만 사용됩니다.

/arch:SSE는 컴파일러에서 SSE 명령을 사용할 수 있게 하고, /arch:SSE2는 컴파일러에서 SSE2 명령을 사용할 수 있게 합니다.

_M_IX86_FP는 사용된 /arch 컴파일러 옵션을 나타냅니다(있는 경우). 자세한 내용은 Predefined Macros를 참조하십시오.

/arch를 지정하면 최적화 프로그램에서 SSE 및 SSE2 명령의 사용 시기와 방법을 선택합니다. x87 부동 소수점 레지스터 스택을 사용하는 것보다 SSE/SSE2 명령을 사용하면 더 빠르다고 판단될 때는 일부 스칼라 부동 소수점 계산에 SSE 및 SSE2 명령을 사용합니다. 따라서 코드가 부동 소수점 계산에 x87과 SSE/SSE2를 함께 사용하게 됩니다. 뿐만 아니라 /arch:SSE2를 지정하면 일부 64비트 정수 연산에 SSE2 명령을 사용합니다.

컴파일러는 SSE 및 SSE2 명령 뿐만 아니라 SSE 및 SSE2를 지원하는 프로세서에 있는 다른 명령도 사용합니다. 이러한 예로는 Intel Pentium Pro 프로세서에서 처음 소개된 CMOV 명령을 들 수 있습니다.

/clr(공용 언어 런타임 컴파일)를 사용하여 컴파일할 경우에는 /arch를 지정하더라도 관리되는 함수의 코드 생성에 영향을 주지 않습니다. /arch는 네이티브 함수의 코드를 생성할 때만 적용됩니다.

/arch/QIfist(_ftol 사용 안 함)는 같은 컴파일에서 사용할 수 없습니다.

특히 사용자가 _controlfp를 사용하여 FP 제어 단어를 수정하지 않은 경우, 런타임 시작 코드가 x87 FPU 제어 단어 정밀도 제어 필드를 53비트로 설정하므로 식 내의 모든 부동 소수점 및 배정밀도 연산이 53비트 기호 및 15비트 지수를 사용하여 수행됩니다. 그러나 모든 SSE 단정밀도 연산은 24비트 기호 및 8비트 지수를 사용하고 SSE2 배정밀도 연산은 53비트 기호 및 11비트 지수를 사용합니다. 자세한 내용은 _control87, _controlfp, __control87_2를 참조하십시오.

예를 들어, 다음 코드에서와 같이 이러한 차이는 각 하위 식 뒤에 사용자 할당이 있는 경우가 아니라 단일 식 트리 내에서 발생할 수 있습니다.

r = f1 * f2 + d;  // Different results are possible on SSE/SSE2.

아래와 비교

   t = f1 * f2;   // Do f1 * f2, round to the type of t.
   r = t + d;     // This should produce the same overall result 
                  // regardless whether x87 stack or SSE/SSE2 is used.

controlfp는 MXCSR 제어 비트를 변경하지 않으므로 /arch:SSE2를 사용하면 controlfp 사용과 관련된 모든 기능이 작동하지 않습니다.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오.

  2. C/C++ 폴더를 클릭합니다.

  3. 코드 생성 속성 페이지를 클릭합니다.

  4. 고급 명령어 집합 사용 속성을 수정합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

참조

컴파일러 옵션

컴파일러 옵션 설정