Поделиться через


/arch (минимальная архитектура ЦП)

Задает архитектуру для создания кода с помощью инструкций SSE, SSE2 и AVX.

/arch:[SSE|SSE2|AVX]

Заметки

Примечание

/arch:SSE и /arch:SSE2 доступны только при компиляции для платформы x86./arch:AVX доступен только для платформ x86 и x64.При компиляции для целевых платформ Itanium этот параметр недоступен.

Наборы инструкций SSE и SSE2 имеются в различных процессорах Intel и AMD. Инструкции AVX существуют в процессорах Intel Sandy Bridge и процессорах AMD Bulldozer.

/arch:SSE позволяет компилятору использовать инструкции SSE. /arch:SSE2 позволяет компилятору использовать инструкции SSE2. /arch:AVX указывает компилятору использовать кодировки инструкции AVX.

_M_IX86_FP указывает, какой параметр компиляции /arch использовался, если использовался. Дополнительные сведения см. в разделе Predefined Macros.

Если указан параметр /arch, то оптимизатор выбирает, где и как применять наборы инструкций SSE и SSE2. Наборы инструкций SSE и SSE2 будут использоваться при некоторых скалярных вычислениях с плавающей запятой, если будет обнаружено, что регистры и инструкции SSE или SSE2 дают выигрыш во времени по сравнению со стеком регистров с плавающей запятой x87. В результате код будет использовать для вычислений с плавающей запятой как инструкции x87, так и SSE/SSE2. Кроме того, с параметром /arch:SSE2 набор инструкций SSE2 может использоваться для операций с целыми 64-разрядными значениями.

В дополнение к наборам инструкций SSE и SSE2 компилятор будет также использовать другие инструкции, имеющиеся в редакциях процессоров, поддерживающих SSE и SSE2. Примером может служить инструкция CMOV, которая впервые появилась в редакции Pentium Pro процессоров Intel.

Компиляция с помощью /clr, /arch не оказывает влияния на создание кода для управляемых функций. /arch влияет только на создание кода для собственных функций.

Нельзя использовать /arch и /QIfist в одном объекте компиляции.

В частности, если пользователь не применяет _controlfp для изменения контрольного слова FP, то код запуска времени выполнения установит 53 бита для поля управления точностью контрольного слова FPU x87. Поэтому каждая операция с типами float и double в выражении выполняется с 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, будут недоступны.

Установка параметра компилятора для SSE или SSE2 в Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Откроите папку C/C++.

  3. Выберите страницу свойств Создание кода.

  4. Измените свойство Включить расширенный набор инструкций.

Установка параметра компилятора /arch:AVX в Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Откроите папку C/C++.

  3. Выберите страницу свойств Командная строка.

  4. В поле Дополнительные параметры добавьте /arch:AVX.

Установка этого параметра компилятора программным способом

См. также

Ссылки

Параметры компилятора

Настройка параметров компилятора