Bagikan melalui


/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:[IA32AVX10.1|AVX512|AVX2|||AVX|SSESSE2]

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 untuk AVX512 adalah 512 bit dan dapat diubah menjadi 256 bit menggunakan /vlen bendera .

  • AVX10.1 menambahkan lebih banyak instruksi di atas AVX-512. Panjang vektor default untuk AVX10.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

  1. Buka kotak dialog Halaman Properti untuk proyek. Untuk informasi selengkapnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Code Generation.

  3. Ubah properti Aktifkan Set Instruksi yang Ditingkatkan.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Lihat juga

/arch (Arsitektur CPU Minimum)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC