/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|SSE|SSE2|AVX|AVX2|AVX512]

Bağımsız değişkenler

/arch:IA32
Gelişmiş yönergeler ve kayan nokta hesaplamaları için x87 belirtir.

/arch:SSE
SSE yönergelerinin kullanımını etkinleştirir.

/arch:SSE2
SSE2 yönergelerinin kullanımını etkinleştirir. Bu seçenek belirtilmemişse /arch x86 platformlarında ayarlanan varsayılan yönergedir.

/arch:AVX
Intel Gelişmiş Vektör Uzantıları yönergelerinin kullanılmasını sağlar.

/arch:AVX2
Intel Advanced Vector Extensions 2 yönergelerinin kullanılmasını sağlar.

/arch:AVX512
Intel Advanced Vector Extensions 512 yönergelerinin kullanılmasını sağlar.

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örlere ve isteğe bağlı diğer bazı özelliklere izin veren başka bir yönerge kodlama formu eklendi. Diğer işlemlere yönelik yönergeler de eklendi.

İ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ı, 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 aynı compiland üzerinde 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ışı bırakılmıştı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__, __AVX512DQ____AVX512BW__ve __AVX512VL__ makroları, varsa derleyici /arch seçeneğinin kullanıldığını belirtir. Daha fazla bilgi için bkz . Önceden tanımlanmış makrolar. Seçenek /arch:AVX2 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.

Visual Studio'da AVX, AVX2, AVX512, IA32, SSE veya SSE2 için bu 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