Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задает архитектуру для создания кода на платформе x86. Эти переключатели применяются к x86 (32-разрядной) целевой версии компилятора. Дополнительные сведения о других целевых архитектурах см. в /arch статьях /arch и /arch (ARM).
Синтаксис
/arch:[IA32AVX10.2|AVX10.1|AVX512|AVX2|||AVX|SSESSE2]
Аргументы
/arch:IA32
Указывает на то, что расширенные инструкции не используются. Также указывает на использование инструкций x87 для вычислений с плавающей запятой.
/arch:SSE
Включает расширения SIMD для потоковой передачи Intel.
/arch:SSE2
Включает расширения SIMD для потоковой передачи Intel 2. Набор инструкций по умолчанию — SSE2, если параметр не /arch указан.
/arch:AVX
Включает расширения расширенного вектора Intel.
/arch:AVX2
Включает расширения расширенного вектора Intel 2.
/arch:AVX512
Включает расширения расширенного вектора Intel 512.
/arch:AVX10.1
Включает расширения Расширенного вектора Intel 10 версии 1.
/arch:AVX10.2
Включает расширения Расширенного вектора Intel 10 версии 2.
Замечания
Параметр /arch включает или отключает использование определенных расширений наборов инструкций, особенно для вычислений векторов, доступных в процессорах Intel и AMD. Как правило, недавно появившиеся процессоры могут поддерживать расширения за пределами тех, которые поддерживаются старыми процессорами. Перед выполнением кода с помощью расширения набора инструкций необходимо ознакомиться с документацией по конкретному обработчику или проверить поддержку __cpuid расширения набора инструкций. Вы также можете использовать встроенные __check_isa_support функции ЦП для проверки часто используемых функций ЦП.
/arch влияет только на создание кода для собственных функций.
/clr При компиляции /arch не влияет на создание кода для управляемых функций.
Параметры /arch относятся к расширениям набора инструкций со следующими характеристиками:
IA32— это устаревший 32-разрядный набор инструкций x86 без векторных операций и использование x87 для вычислений с плавающей запятой.SSEпозволяет вычислять с векторами до четырех значений с плавающей запятой с одной точностью. Добавлены соответствующие скалярные инструкции с плавающей запятой.SSE2позволяет вычислять с 128-разрядными векторами одноточия, двойной точности и 1, 2, 4 или 8-байтовых целочисленных значений. Кроме того, были добавлены скалярные инструкции с двойной точностью.AVXввел альтернативную кодировку инструкций для векторных и скалярных инструкций с плавающей запятой. Он позволяет векторам либо 128 бит, либо 256 битам, и ноль расширяет все результаты вектора до полного размера вектора. (Для устаревшей совместимости векторные инструкции в стиле SSE сохраняют все биты за пределами бита 127.) Большинство операций с плавающей запятой расширяются до 256 бит.AVX2Расширяет большинство целых операций до 256-разрядных векторов и позволяет использовать инструкции Fused Multiply-Add (FMA).AVX512появилась другая форма кодирования инструкций, которая позволяет использовать 512-разрядные векторы, маскирование, внедренное округление и трансляцию, а также новые инструкции. ДлинаAVX512вектора по умолчанию составляет 512 битов и может быть изменена на 256 бит с помощью флага/vlen.AVX10.1добавляет дополнительные инструкции поверхAVX-512. ДлинаAVX10.1вектора по умолчанию составляет 256 битов и может быть изменена на 512 бит с помощью флага/vlen. Этот параметр был представлен в Visual Studio 2022 17.13.AVX10.2расширяет набор инструкций, представленный вAVX10.1. ДлинаAVX10.2вектора по умолчанию составляет 256 битов и может быть увеличена до 512 бит с помощью флага/vlen.AVX10.2добавляет инструкции, которые являются усовершенствованиями устаревших инструкций и инструкций по ускорению мультимедиа. Дополнительные сведения о новых инструкциях см. в разделе 3.1.4 в спецификации архитектуры Расширенного вектора Intel Advanced Vector Extensions 10.2 . Инструкции, связанные с ИИ, поддерживаются с помощью встроенных функций MSVC, а не непосредственно создаются, так как MSVC не поддерживает их типы данных. Этот параметр компилятора появился в Visual Studio 2026.
Оптимизатор выбирает, когда и как использовать векторные инструкции в зависимости от указанного /arch значения. Скалярные вычисления с плавающей запятой обычно выполняются с инструкциями SSE или AVX при наличии. Некоторые соглашения о вызовах указывают передачу аргументов с плавающей запятой в стеке x87, и в результате код может использовать сочетание инструкций x87 и SSE/AVX для вычислений с плавающей запятой. Инструкции целочисленного вектора также можно использовать для некоторых 64-разрядных целых операций при наличии.
Помимо векторных и скалярных инструкций с плавающей запятой, каждый /arch параметр также может включать использование других невекторных инструкций, связанных с этим параметром. Примером является семейство инструкций CMOVcc, которое впервые появилось на процессорах Intel Intel Xeon Pro. Так как инструкции SSE были введены с последующим процессором Intel Intel III, инструкции CMOVcc могут создаваться, за исключением случаев, когда /arch:IA32 указано.
Операции с плавающей запятой обычно округляются до двойной точности (64-разрядная версия) в коде x87, но можно использовать _controlfp для изменения слова элемента управления FP, включая настройку элемента управления точностью для расширенной точности (80-разрядная) или одноточие (32-разрядная). Дополнительные сведения см. в разделе _control87, _controlfp__control87_2. SSE и AVX имеют отдельные инструкции по одноточию и двойной точности для каждой операции, поэтому для кода SSE/AVX нет эквивалента. Он может изменить, как результаты округляются, когда результат операции с плавающей запятой используется непосредственно в дальнейшем вычислении, а не присваивает ей переменную пользователя. Рассмотрим следующие операции:
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
// whether x87 stack is used or SSE/SSE2 is used.
/arch и /QIfist не может использоваться вместе. Параметр /QIfist изменяет поведение округления с плавающей запятой на целочисленное преобразование. Поведение по умолчанию — усечение (округление к нулю), в то время как /QIfist параметр указывает использование режима округления среды с плавающей запятой. Так как параметр изменяет поведение всех значений с плавающей запятой на целочисленные преобразования, /QIfist не рекомендуется. При компиляции для SSE или AVX можно округить значение с плавающей запятой до целого числа с помощью режима округления среды с плавающей запятой с помощью встроенной последовательности функций:
int convert_float_to_int(float x) {
return _mm_cvtss_si32(_mm_set_ss(x));
}
int convert_double_to_int(double x) {
return _mm_cvtsd_si32(_mm_set_sd(x));
}
Макросы _M_IX86_FP, __AVX____AVX2____AVX512F____AVX512CD____AVX512BW____AVX512DQ____AVX512VL____AVX10_VER__ и макросы, указывающие, /arch какой параметр компилятора был использован. Дополнительные сведения см. в разделе "Предопределенные макросы". Этот /arch:AVX2 параметр и __AVX2__ макрос были представлены в Visual Studio 2013 с обновлением 2 версии 12.0.34567.1. Добавлена ограниченная поддержка /arch:AVX512 в Visual Studio 2017 и расширена в Visual Studio 2019.
/arch:AVX10.1 Поддержка добавлена в Visual Studio 2022.
Установка параметра компилятора /arch в Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Создание кода.
Измените свойство Enable Enhanced Instruction Set .
Установка данного параметра компилятора программным способом
- См. раздел EnableEnhancedInstructionSet.
См. также
/arch (Минимальная архитектура ЦП)
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC