added SKX target definition
This commit is contained in:
69
ispc.cpp
69
ispc.cpp
@@ -165,7 +165,7 @@ lGetSystemISA() {
|
||||
(info2[1] & (1 << 28)) != 0 && // AVX512 CDI
|
||||
(info2[1] & (1 << 30)) != 0 && // AVX512 BW
|
||||
(info2[1] & (1 << 31)) != 0) { // AVX512 VL
|
||||
return "skx";
|
||||
return "avx512skx-i32x16";
|
||||
}
|
||||
else if ((info2[1] & (1 << 26)) != 0 && // AVX512 PF
|
||||
(info2[1] & (1 << 27)) != 0 && // AVX512 ER
|
||||
@@ -239,10 +239,24 @@ typedef enum {
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
// KNL. Supports AVX512.
|
||||
// Knights Landing - Xeon Phi.
|
||||
// Supports AVX-512F: All the key AVX-512 features: masking, broadcast... ;
|
||||
// AVX-512CDI: Conflict Detection;
|
||||
// AVX-512ERI & PRI: 28-bit precision RCP, RSQRT and EXP transcendentals,
|
||||
// new prefetch instructions.
|
||||
CPU_KNL,
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
// Skylake Xeon.
|
||||
// Supports AVX-512F: All the key AVX-512 features: masking, broadcast... ;
|
||||
// AVX-512CDI: Conflict Detection;
|
||||
// AVX-512VL: Vector Length Orthogonality;
|
||||
// AVX-512DQ: New HPC ISA (vs AVX512F);
|
||||
// AVX-512BW: Byte and Word Support.
|
||||
CPU_SKX,
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
// Late Atom-like design. Supports SSE 4.2 + POPCNT/LZCNT.
|
||||
CPU_Silvermont,
|
||||
@@ -327,6 +341,10 @@ public:
|
||||
names[CPU_KNL].push_back("knl");
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
names[CPU_SKX].push_back("skx");
|
||||
#endif
|
||||
|
||||
#ifdef ISPC_ARM_ENABLED
|
||||
names[CPU_CortexA15].push_back("cortex-a15");
|
||||
|
||||
@@ -353,6 +371,13 @@ public:
|
||||
CPU_Haswell, CPU_Broadwell, CPU_None);
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
compat[CPU_SKX] = Set(CPU_SKX, CPU_Bonnell, CPU_Penryn,
|
||||
CPU_Core2, CPU_Nehalem, CPU_Silvermont,
|
||||
CPU_SandyBridge, CPU_IvyBridge,
|
||||
CPU_Haswell, CPU_Broadwell, CPU_None);
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // LLVM 3.2, 3.3, 3.4 or 3.5
|
||||
#define CPU_Broadwell CPU_Haswell
|
||||
#else /* LLVM 3.6+ */
|
||||
@@ -513,6 +538,12 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
case CPU_SKX:
|
||||
isa = "avx512skx-i32x16";
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6
|
||||
case CPU_Broadwell:
|
||||
#endif
|
||||
@@ -915,7 +946,26 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
CPUfromISA = CPU_KNL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
else if (!strcasecmp(isa, "avx512skx-i32x16")) {
|
||||
this->m_isa = Target::SKX_AVX512;
|
||||
this->m_nativeVectorWidth = 16;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
// ?? this->m_dataTypeWidth = 32;
|
||||
this->m_vectorWidth = 16;
|
||||
this->m_maskingIsFree = true;
|
||||
this->m_maskBitCount = 1;
|
||||
this->m_hasHalf = true;
|
||||
this->m_hasRand = true;
|
||||
this->m_hasGather = this->m_hasScatter = true;
|
||||
this->m_hasTranscendentals = false;
|
||||
// For MIC it is set to true due to performance reasons. The option should be tested.
|
||||
this->m_hasTrigonometry = false;
|
||||
this->m_hasRsqrtd = this->m_hasRcpd = false;
|
||||
this->m_hasVecPrefetch = false;
|
||||
CPUfromISA = CPU_SKX;
|
||||
}
|
||||
#endif
|
||||
#ifdef ISPC_ARM_ENABLED
|
||||
else if (!strcasecmp(isa, "neon-i8x16")) {
|
||||
this->m_isa = Target::NEON8;
|
||||
@@ -1144,6 +1194,9 @@ Target::SupportedTargets() {
|
||||
"avx2-i32x8, avx2-i32x16, avx2-i64x4, "
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
"avx512knl-i32x16, "
|
||||
#endif
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
"avx512skx-i32x16, "
|
||||
#endif
|
||||
"generic-x1, generic-x4, generic-x8, generic-x16, "
|
||||
"generic-x32, generic-x64, *-generic-x16, "
|
||||
@@ -1219,8 +1272,8 @@ Target::ISAToString(ISA isa) {
|
||||
case Target::KNL_AVX512:
|
||||
return "avx512knl";
|
||||
#endif
|
||||
case Target::SKX:
|
||||
return "skx";
|
||||
case Target::SKX_AVX512:
|
||||
return "avx512skx";
|
||||
case Target::GENERIC:
|
||||
return "generic";
|
||||
#ifdef ISPC_NVPTX_ENABLED
|
||||
@@ -1267,8 +1320,10 @@ Target::ISAToTargetString(ISA isa) {
|
||||
case Target::KNL_AVX512:
|
||||
return "avx512knl-i32x16";
|
||||
#endif
|
||||
case Target::SKX:
|
||||
return "avx2";
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_8 // LLVM 3.8+
|
||||
case Target::SKX_AVX512:
|
||||
return "avx512skx-i32x16";
|
||||
#endif
|
||||
case Target::GENERIC:
|
||||
return "generic-4";
|
||||
#ifdef ISPC_NVPTX_ENABLED
|
||||
|
||||
Reference in New Issue
Block a user