__check_isa_support, __check_arch_support
Microsoft'a Özgü
__check_isa_support
- işlemcinin çalışma zamanında belirtilen ISA özelliğini ve AVX10 sürümünü destekleyip desteklemediğini algılar.
__check_arch_support
- Kemer bayrağının (bkz /arch
. (x86), /arch
(x64)) derleme zamanında belirtilen ISA özelliğini ve AVX10 sürümünü destekleyip desteklemediğini algılar.
Sözdizimi
_Bool __check_isa_support(
unsigned feature,
unsigned avx10_version
);
_Bool __check_arch_support(
unsigned feature,
unsigned avx10_version
);
bool __check_isa_support(
unsigned feature,
unsigned avx10_version
);
bool __check_arch_support(
unsigned feature,
unsigned avx10_version
);
Parametreler
özellik
[in] Denetlenecek ISA özelliği.
avx10_version
[in] Denetlenecek AVX10 sürümü. AVX10 sürüm denetimi gerekli değilse 0.
Dönüş değeri
__check_isa_support
, işlemcinin ve çalıştırma zamanında destekleyip desteklemediğini feature
avx10_version
döndürürtrue
, false
aksi takdirde.
__check_arch_support
bayrağını /arch
desteklerse feature
ve avx10_version
derleme zamanında döndürürtrue
, false
aksi takdirde.
Gereksinimler
Içsel | Mimari |
---|---|
__check_isa_support |
x86, x64 |
__check_arch_support |
x86, x64 |
Üst bilgi dosyası <immintrin.h>
Açıklamalar
iç __check_isa_support
, en sık kullanılan CPU özelliklerini dinamik olarak denetlemek için iç özelliklere daha hızlı bir alternatif __cpuid
sağlar. iç __check_arch_support
, ISA uzantılarını temel alan derleme zaman kodu seçimine bir alternatif predefined macros
sağlar.
Aşağıdaki özellik değerleri bu iç bilgilerde kullanılabilir. Bu değerler içinde isa_availability.h
tanımlanır.
Özellik Değeri Adı | Açıklama |
---|---|
__IA_SUPPORT_VECTOR128 |
Uzunluğu 128 bit'e kadar olan vektör yönergeleri. Bu özellik SSE2 veya sonraki uzantılar için etkinleştirilmiştir |
__IA_SUPPORT_VECTOR256 |
256 bit uzunluğa sahip vektör yönergeleri. Bu özellik AVX2 veya sonraki uzantılar için etkinleştirilmiştir |
__IA_SUPPORT_VECTOR512 |
Uzunluğu 512 bit'e kadar olan vektör yönergeleri. Bu özellik AVX-512 veya üzeri uzantılar için etkinleştirilmiştir |
__IA_SUPPORT_AVX10 |
AVX10 desteği. Bu özellik AVX10.1 veya üzeri uzantılar için etkinleştirilmiştir |
__IA_SUPPORT_SSE42 |
SSE4.2 desteği |
__IA_SUPPORT_SV128X |
128 bit skaler için AVX-512 yönergeleri. Dönüşümler gibi bazı yararlı AVX-512 yönergelerinin skaler kodda kullanılabileceğini belirtmek için kullanılabilir |
__IA_SUPPORT_AVX10_2 |
AVX10.2 desteği |
__IA_SUPPORT_APX |
APX desteği |
__IA_SUPPORT_FP16 |
Yarım duyarlıklı kayan nokta yönerge desteği |
OR(|) işleci kullanılarak birden çok özellik değeri birleştirilebilir.
İç __check_arch_support
her zaman derleme zamanında değerlendirilebilir, bu nedenle iyileştirilmiş kodda kullanılması, yürütülecek ek yönergeler eklemez.
Visual Studio 2022 sürüm 17.10'da bu iç ayrıntılar için destek eklendi.
Örnek
Bu örnek, çift duyarlıklı değerlerin 64 bit işaretli tamsayı değerlerine dönüştürülmesi vektörleştirmek için 256 bit AVX-512 yönergelerini kullanır. Vektör kodu tarafından işlenmeyen kaynak değerleri dönüştürmeye yönelik kuyruk döngüsü, vektör kodunun yürütülememesi durumunda da kullanılır. Derleme zamanı desteği çalışma zamanı desteğinden önce denetlenerek mümkünse çalışma zamanı denetiminden kaçınılabilir.
// Compile this test with: /EHsc /O2
#include <iostream>
#include <vector>
#include <immintrin.h>
#include <isa_availability.h>
using namespace std;
#define CHECK_INSTRUCTION_SUPPORT(a,v) \
(__check_arch_support((a),(v)) || __check_isa_support((a),(v)))
int main()
{
vector<double> input = {0.3, 1.4, 2.5, 3.6, 4.7, 5.8, 6.9, 8.0, 9.1, 11.14};
vector<__int64> output(10, 0);
int i = 0;
if (CHECK_INSTRUCTION_SUPPORT(__IA_SUPPORT_SV128X | __IA_SUPPORT_VECTOR256, 0))
{
for (; i < input.size() - 4; i += 4)
{
__m256i values = _mm256_cvttpd_epi64(_mm256_load_pd(&input[i]));
_mm256_storeu_epi64((void*)&output[i], values);
}
}
for (; i < input.size(); i++)
{
output[i] = input[i];
}
for (i = 0; i < output.size(); i++) {
cout << "output[" << i << "] = " << output[i] << endl;
}
}
output[0] = 0
output[1] = 1
output[2] = 2
output[3] = 3
output[4] = 4
output[5] = 5
output[6] = 6
output[7] = 8
output[8] = 9
output[9] = 11
END Microsoft'a Özgü