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


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

Обновлен: Ноябрь 2007

Этот параметр задает архитектуру для создания кода с помощью наборов инструкций Streaming SIMD Extensions (SSE) и Streaming SIMD Extensions 2 (SSE2).

 /arch:[SSE|SSE2]

Заметки

7t5yh4fd.alert_note(ru-ru,VS.90).gifПримечание.

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

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

При компиляции с параметром /clr (компиляция CLR) параметр /arch не будет влиять на создание кода управляемых функций. Параметр /arch влияет только на создание кода машинных функций.

Параметры /arch и /QIfist (Suppress _ftol) нельзя использовать для одного и того же объекта компиляции.

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

Установка данного параметра компилятора в среде разработки Visual Studio

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

  2. Щелкните папку C/C++.

  3. Щелкните страницу свойств Создание кода.

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

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

См. также

Ссылки

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

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