Aracılığıyla paylaş


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

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çin AVX512 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önerge AVX-512ekler. için AVX10.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

  1. 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.

  2. Yapılandırma Özellikleri>C/C++>Kod Oluşturma özellik sayfasını seçin.

  3. 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