/arch
(x86)
Menentukan arsitektur untuk pembuatan kode pada x86. Untuk informasi selengkapnya tentang /arch
arsitektur target lainnya, lihat /arch
(ARM64), /arch
(x64), dan /arch
(ARM).
Sintaks
/arch:
[IA32
AVX10.1
|AVX512
|AVX2
|||AVX
|SSE
SSE2
]
Argumen
/arch:IA32
Menentukan tidak ada instruksi yang ditingkatkan dan juga menentukan x87 untuk perhitungan floating-point.
/arch:SSE
Mengaktifkan Ekstensi SIMD Streaming Intel.
/arch:SSE2
Mengaktifkan Intel Streaming SIMD Extensions 2. Set instruksi default adalah SSE2 jika tidak ada /arch
opsi yang ditentukan.
/arch:AVX
Mengaktifkan Ekstensi Vektor Tingkat Lanjut Intel.
/arch:AVX2
Mengaktifkan Intel Advanced Vector Extensions 2.
/arch:AVX512
Mengaktifkan Intel Advanced Vector Extensions 512.
/arch:AVX10.1
Mengaktifkan Intel Advanced Vector Extensions 10 versi 1.
Keterangan
Opsi ini /arch
mengaktifkan atau menonaktifkan penggunaan ekstensi set instruksi tertentu, terutama untuk perhitungan vektor, tersedia dalam prosesor dari Intel dan AMD. Secara umum, prosesor yang diperkenalkan baru-baru ini dapat mendukung ekstensi di luar yang didukung oleh prosesor yang lebih lama. Anda harus berkonsultasi dengan dokumentasi untuk prosesor tertentu atau menguji dukungan ekstensi set instruksi menggunakan __cpuid
sebelum menjalankan kode menggunakan ekstensi set instruksi. Anda juga dapat menggunakan __check_isa_support
intrinsik untuk memeriksa fitur CPU yang lebih sering digunakan.
/arch
hanya memengaruhi pembuatan kode untuk fungsi asli. Saat Anda menggunakan /clr
untuk mengkompilasi, /arch
tidak berpengaruh pada pembuatan kode untuk fungsi terkelola.
Opsi /arch
mengacu pada ekstensi set instruksi dengan karakteristik berikut:
IA32
adalah set instruksi x86 32-bit warisan tanpa operasi vektor dan menggunakan x87 untuk perhitungan floating-point.SSE
memungkinkan perhitungan dengan vektor hingga empat nilai floating-point presisi tunggal. Instruksi titik mengambang skalar yang sesuai juga ditambahkan.SSE2
memungkinkan perhitungan dengan vektor 128-bit presisi tunggal, presisi ganda dan nilai bilangan bulat 1, 2, 4, atau 8 byte. Instruksi skalar presisi ganda juga ditambahkan.AVX
memperkenalkan pengodean instruksi alternatif untuk instruksi vektor dan skalar floating-point. Ini memungkinkan vektor 128 bit atau 256 bit, dan nol memperluas semua hasil vektor ke ukuran vektor penuh. (Untuk kompatibilitas warisan, instruksi vektor gaya SSE mempertahankan semua bit melebihi bit 127.) Sebagian besar operasi floating-point diperpanjang hingga 256 bit.AVX2
memperluas sebagian besar operasi bilangan bulat ke vektor 256-bit, dan memungkinkan penggunaan instruksi Fused Multiply-Add (FMA).AVX512
memperkenalkan formulir pengodean instruksi lain yang memungkinkan vektor 512-bit, masking, pembulatan/siaran tersemat, dan instruksi baru. Panjang vektor default untukAVX512
adalah 512 bit dan dapat diubah menjadi 256 bit menggunakan/vlen
bendera .AVX10.1
menambahkan lebih banyak instruksi di atasAVX-512
. Panjang vektor default untukAVX10.1
adalah 256 bit dan dapat diubah menjadi 512 bit menggunakan/vlen
bendera .
Pengoptimal memilih kapan dan bagaimana menggunakan instruksi vektor tergantung pada yang /arch
ditentukan. Komputasi floating-point skalar biasanya dilakukan dengan instruksi SSE atau AVX jika tersedia. Beberapa konvensi panggilan menentukan meneruskan argumen floating-point pada tumpukan x87, dan sebagai hasilnya, kode Anda dapat menggunakan campuran instruksi x87 dan SSE/AVX untuk komputasi floating-point. Instruksi vektor bilangan bulat juga dapat digunakan untuk beberapa operasi bilangan bulat 64-bit jika tersedia.
Selain instruksi vektor dan skalar floating-point, setiap /arch
opsi juga dapat mengaktifkan penggunaan instruksi non-vektor lain yang terkait dengan opsi tersebut. Contohnya adalah keluarga instruksi CMOVcc yang pertama kali muncul pada prosesor Intel Pentium Pro. Karena instruksi SSE diperkenalkan dengan prosesor Intel Pentium III berikutnya, instruksi CMOVcc dapat dihasilkan kecuali ketika /arch:IA32
ditentukan.
Operasi floating-point biasanya dibulatkan ke presisi ganda (64-bit) dalam kode x87, tetapi Anda dapat menggunakan _controlfp
untuk memodifikasi kata kontrol FP, termasuk mengatur kontrol presisi ke presisi yang diperluas (80-bit) atau presisi tunggal (32-bit). Untuk informasi selengkapnya, lihat , , __control87_2
_controlfp
._control87
SSE dan AVX memiliki instruksi presisi tunggal dan presisi ganda terpisah untuk setiap operasi, sehingga tidak ada yang setara untuk kode SSE/AVX. Ini dapat mengubah bagaimana hasil dibulatkan ketika hasil operasi floating-point digunakan langsung dalam perhitungan lebih lanjut alih-alih menetapkannya ke variabel pengguna. Pertimbangkan operasi berikut:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Dengan penugasan eksplisit:
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
dan /QIfist
tidak dapat digunakan bersama-sama. Opsi mengubah /QIfist
perilaku pembulatan dari konversi floating-point ke bilangan bulat. Perilaku default adalah memotong (membulatkan ke arah nol), sedangkan /QIfist
opsi menentukan penggunaan mode pembulatan lingkungan floating-point. Karena opsi mengubah perilaku semua konversi floating-point menjadi bilangan bulat, /QIfist
tidak digunakan lagi. Saat mengkompilasi untuk SSE atau AVX, Anda dapat membulatkan nilai floating-point ke bilangan bulat menggunakan mode pembulatan lingkungan floating-point dengan menggunakan urutan fungsi intrinsik:
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));
}
Opsi _M_IX86_FP
, , __AVX2__
__AVX__
, __AVX512F__
__AVX512CD__
, __AVX512BW__
, __AVX512DQ__
, , __AVX512VL__
, dan __AVX10_VER__
menunjukkan mana, jika ada, /arch
opsi pengkompilasi digunakan. Untuk informasi selengkapnya, lihat Makro yang telah ditentukan sebelumnya. Opsi /arch:AVX2
, dan __AVX2__
makro diperkenalkan di Visual Studio 2013 Update 2, versi 12.0.34567.1. Dukungan terbatas untuk /arch:AVX512
ditambahkan di Visual Studio 2017, dan diperluas di Visual Studio 2019. Dukungan untuk /arch:AVX10.1
ditambahkan di Visual Studio 2022.
Untuk mengatur /arch
opsi pengkompilasi di Visual Studio
Buka kotak dialog Halaman Properti untuk proyek. Untuk informasi selengkapnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Code Generation.
Ubah properti Aktifkan Set Instruksi yang Ditingkatkan.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat EnableEnhancedInstructionSet.
Lihat juga
/arch
(Arsitektur CPU Minimum)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC