/arch
(x86)
x86 üzerinde kod oluşturma mimarisini belirtir. Diğer hedef mimariler hakkında /arch
daha fazla bilgi için bkz /arch
. (ARM64),/arch
(x64)ve /arch
(ARM).
Sözdizimi
/arch:
[IA32
AVX10.1
|AVX512
|AVX2
|||AVX
|SSE
SSE2
]
Bağımsız değişkenler
/arch:IA32
Gelişmiş yönergeler ve kayan nokta hesaplamaları için x87 belirtir.
/arch:SSE
Intel Streaming SIMD Uzantılarını etkinleştirir.
/arch:SSE2
Intel Streaming SIMD Extensions 2'yi etkinleştirir. Seçenek belirtilmezse /arch
varsayılan yönerge kümesi SSE2'dir.
/arch:AVX
Intel Gelişmiş Vektör Uzantıları'nı etkinleştirir.
/arch:AVX2
Intel Advanced Vector Extensions 2'i etkinleştirir.
/arch:AVX512
Intel Advanced Vector Extensions 512'i etkinleştirir.
/arch:AVX10.1
Intel Advanced Vector Extensions 10 sürüm 1'i etkinleştirir.
Açıklamalar
bu /arch
seçenek, Özellikle vektör hesaplaması için Intel ve AMD işlemcilerinde kullanılabilen belirli yönerge kümesi uzantılarının kullanımını etkinleştirir veya devre dışı bırakır. Genel olarak, daha yakın zamanda tanıtılan işlemciler, eski işlemciler tarafından desteklenenlerin ötesinde uzantıları destekleyebilecektir. Yönerge kümesi uzantısını kullanarak __cpuid
kod yürütmeden önce kullanarak belirli bir işlemcinin belgelerine veya yönerge kümesi uzantısı desteği için teste başvurmanız gerekir.
/arch
yalnızca yerel işlevler için kod oluşturmayı etkiler. Derlemek için kullandığınızda /clr
, /arch
yönetilen işlevler için kod oluşturma üzerinde hiçbir etkisi olmaz.
Seçenekler, /arch
aşağıdaki özelliklere sahip yönerge kümesi uzantılarına başvurur:
IA32
, herhangi bir vektör işlemi olmadan ve kayan nokta hesaplamaları için x87 kullanan eski 32 bit x86 yönerge kümesidir.SSE
en fazla dört tek duyarlıklı kayan nokta değeri vektörleriyle hesaplamaya izin verir. Buna karşılık gelen skaler kayan nokta yönergeleri de eklendi.SSE2
tek duyarlıklı, çift duyarlıklı ve 1, 2, 4 veya 8 baytlık tamsayı değerlerinden oluşan 128 bit vektörlerle hesaplamaya izin verir. Çift duyarlıklı skaler yönergeler de eklendi.AVX
vektör ve kayan nokta skaler yönergeleri için alternatif bir yönerge kodlaması kullanıma sunulmuştur. 128 bit veya 256 bit vektörlere izin verir ve tüm vektör sonuçlarını tam vektör boyutuna sıfır genişletir. (Eski uyumluluk için, SSE stili vektör yönergeleri bit 127'nin ötesindeki tüm bitleri korur.) Kayan nokta işlemlerinin çoğu 256 bit'e genişletilir.AVX2
çoğu tamsayı işlemini 256 bit vektörlere genişletir ve Birleşik Çarpma-Ekle (FMA) yönergelerinin kullanılmasını sağlar.AVX512
512 bit vektörler, maskeleme, katıştırılmış yuvarlama/yayın ve yeni yönergelere izin veren başka bir yönerge kodlama formu eklendi. içinAVX512
varsayılan vektör uzunluğu 512 bittir ve bayrağı kullanılarak 256 bit olarak/vlen
değiştirilebilir.AVX10.1
üzerine daha fazla yönergeAVX-512
ekler. içinAVX10.1
varsayılan vektör uzunluğu 256 bittir ve bayrağı kullanılarak 512 bit olarak/vlen
değiştirilebilir.
İyileştirici, hangilerinin /arch
belirtildiğine bağlı olarak vektör yönergelerinin ne zaman ve nasıl kullanılacağını seçer. Skaler kayan nokta hesaplamaları genellikle kullanılabilir olduğunda SSE veya AVX yönergeleriyle gerçekleştirilir. Bazı çağrı kuralları x87 yığınında kayan nokta bağımsız değişkenlerini geçirmeyi belirtir ve sonuç olarak kodunuz kayan nokta hesaplamaları için hem x87 hem de SSE/AVX yönergelerinin bir karışımını kullanabilir. Tamsayı vektör yönergeleri, kullanılabilir olduğunda bazı 64 bit tamsayı işlemleri için de kullanılabilir.
Vektör ve kayan nokta skaler yönergelerine ek olarak, her /arch
seçenek bu seçenekle ilişkili diğer vektör dışı yönergelerin de kullanılmasını sağlayabilir. İlk olarak Intel Pentium Pro işlemcilerde görünen CMOVcc yönerge ailesi buna örnek olarak verilmiştir. Sonraki Intel Pentium III işlemciyle birlikte SSE yönergeleri sunulduğundan, cmovcc yönergeleri belirtilmediğinde /arch:IA32
oluşturulabilir.
Kayan nokta işlemleri normalde x87 kodunda çift duyarlıklı (64 bit) olarak yuvarlanabilir, ancak duyarlık denetimini genişletilmiş duyarlık (80 bit) veya tek duyarlıklı (32 bit) olarak ayarlamak da dahil olmak üzere FP denetim sözcüğünü değiştirmek için kullanabilirsiniz _controlfp
. Daha fazla bilgi için bkz. _control87
, _controlfp
, __control87_2
. SSE ve AVX her işlem için ayrı tek duyarlıklı ve çift duyarlıklı yönergelere sahiptir, bu nedenle SSE/AVX kodu için eşdeğeri yoktur. Kayan nokta işleminin sonucu bir kullanıcı değişkenine atamak yerine doğrudan daha fazla hesaplamada kullanıldığında sonuçların yuvarlanma şeklini değiştirebilir. Aşağıdaki işlemleri göz önünde bulundurun:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Açık atama ile:
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
ve /QIfist
birlikte kullanılamaz. seçeneği kayan /QIfist
noktanın yuvarlama davranışını tamsayı dönüştürmeye değiştirir. Varsayılan davranış, kayan noktalı ortam yuvarlama modunun kullanımını belirtirken/QIfist
( sıfıra doğru yuvarlama) şeklindedir. seçeneği tüm kayan nokta dönüştürmelerinin davranışını tamsayıya değiştirdiğinden kullanım /QIfist
dışıdır. SSE veya AVX için derleme yaparken, iç işlev dizisi kullanarak kayan nokta ortamı yuvarlama modunu kullanarak kayan nokta değerini bir tamsayıya yuvarlayabilirsiniz:
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__
ve __AVX10_VER__
makroları, varsa derleyici /arch
seçeneğinin kullanıldığını belirtir. Daha fazla bilgi için bkz . Önceden tanımlanmış makrolar. /arch:AVX2
seçeneği ve __AVX2__
makro, Visual Studio 2013 Güncelleştirme 2, sürüm 12.0.34567.1'de sunulmuştur. için /arch:AVX512
sınırlı destek Visual Studio 2017'ye eklendi ve Visual Studio 2019'da genişletildi. desteği /arch:AVX10.1
Visual Studio 2022'ye eklendi.
Visual Studio'da /arch
derleyici seçeneğini ayarlamak için
Proje için Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Kod Oluşturma özellik sayfasını seçin.
Gelişmiş Yönerge Kümesini Etkinleştir özelliğini değiştirin.
Bu derleyici seçeneğini program üzerinden ayarlamak için
Ayrıca bkz.
/arch
(En Düşük CPU Mimarisi)
MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi