...
 
Commits (10)
......@@ -32,6 +32,13 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
message(STATUS "vendor found: ${VENDOR_TITLE}")
set(CPU_VENDOR "${VENDOR_TITLE}" CACHE STRING "cpu vendor")
##FIND VENDOR
STRING(FIND ${CPUINFO} "family" FAMILY_TITLE_OFFSET)
STRING(SUBSTRING ${CPUINFO} ${FAMILY_TITLE_OFFSET} 50 GUESSED_FAMILY_LINE)
STRING(REGEX REPLACE "^family.*: ([0-9]+)\n.*" "\\1" FAMILY_TITLE ${GUESSED_FAMILY_LINE})
message(STATUS "family found: ${FAMILY_TITLE}")
set(CPU_FAMILY "${FAMILY_TITLE}" CACHE STRING "cpu family")
##FIND MODEL NAME
STRING(FIND ${CPUINFO} "model name" MODEL_NAME_OFFSET)
STRING(SUBSTRING ${CPUINFO} ${MODEL_NAME_OFFSET} 100 GUESSED_MODEL_NAME_LINE)
......@@ -108,6 +115,12 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(AVX2_FOUND false CACHE BOOL "AVX2 available on host")
endif()
if("${CPUINFO}" MATCHES ".*avx512f .*")
set(AVX512F_FOUND true CACHE BOOL "AVX512F available on host")
else()
set(AVX512F_FOUND false CACHE BOOL "AVX512F available on host")
endif()
#
if(EXISTS "/sys/devices/system/cpu/cpu0/cache/index2/size")
EXEC_PROGRAM(cat ARGS "/sys/devices/system/cpu/cpu0/cache/index2/size" OUTPUT_VARIABLE L2_SIZE_KB_STRING)
......@@ -139,6 +152,9 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.leaf7_features" OUTPUT_VARIABLE
LEAF7_CPUINFO)
EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.family" OUTPUT_VARIABLE
CPU_FAMILY)
EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.vendor" OUTPUT_VARIABLE
VENDOR_TITLE)
......@@ -223,6 +239,16 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin")
endif()
endif()
if("${CPUINFO}" MATCHES ".*AVX512F .*")
set(AVX512F_FOUND true CACHE BOOL "AVX512F available on host")
else()
if("${LEAF7_CPUINFO}" MATCHES ".*AVX512F .*")
set(AVX512F_FOUND true CACHE BOOL "AVX512F available on host")
else()
set(AVX512F_FOUND false CACHE BOOL "AVX512F available on host")
endif()
endif()
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
#as an alternative to wmic, use
......@@ -236,6 +262,9 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
wmic_get("Manufacturer" MODEL_VENDOR)
set(CPU_VENDOR "${MODEL_VENDOR}" CACHE STRING "cpu model vendor")
wmic_get("Family" MODEL_FAMILY)
set(CPU_FAMILY "${MODEL_FAMILY}" CACHE STRING "cpu model family")
wmic_get("L2CacheSize" L2_CACHE_SIZE)
wmic_get("NumberOfCores" CPU_NPHYS_CORES)
......@@ -267,6 +296,7 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
list(FIND _available_vector_units_list "sse4.2" SSE4_2_INDEX)
list(FIND _available_vector_units_list "avx" AVX_INDEX)
list(FIND _available_vector_units_list "avx2" AVX2_INDEX)
list(FIND _available_vector_units_list "avx512f" AVX512F_INDEX)
if(${SSE_INDEX} GREATER -1)
set(SSE_FOUND true CACHE BOOL "SSE available on host")
......@@ -293,6 +323,10 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
set(AVX2_FOUND true CACHE BOOL "AVX2 available on host")
endif()
if(${AVX512F_INDEX} GREATER -1)
set(AVX512F_FOUND true CACHE BOOL "AVX512F available on host")
endif()
set(SSE_FOUND true CACHE BOOL "SSE available on host")
set(SSE2_FOUND false CACHE BOOL "SSE2 available on host")
set(SSE3_FOUND false CACHE BOOL "SSE3 available on host")
......@@ -301,6 +335,7 @@ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host")
set(AVX_FOUND false CACHE BOOL "AVX available on host")
set(AVX2_FOUND false CACHE BOOL "AVX2 available on host")
set(AVX512F_FOUND false CACHE BOOL "AVX512F available on host")
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
......@@ -332,6 +367,10 @@ if( AVX2_FOUND)
list(APPEND FOUND_FEATURES "avx2")
endif( AVX2_FOUND)
if( AVX512F_FOUND)
list(APPEND FOUND_FEATURES "avx512f")
endif( AVX512F_FOUND)
message(STATUS "found hardware features: ${FOUND_FEATURES}")
mark_as_advanced(SSE_FOUND SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND AVX_FOUND AVX2_FOUND CPU_VENDOR CPU_MODEL_NAME CPU_L2_SIZE_KB)
mark_as_advanced(SSE_FOUND SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND AVX_FOUND AVX2_FOUND AVX512F_FOUND CPU_VENDOR CPU_FAMILY CPU_MODEL_NAME CPU_L2_SIZE_KB)
......@@ -35,6 +35,13 @@ namespace compass {
}
static std::uint32_t family() {
using current_arch_t = ct::arch::type;
return detail::family(current_arch_t());
}
static std::string device_name() {
using current_arch_t = ct::arch::type;
......
......@@ -47,7 +47,7 @@ namespace compass {
};
template<>
struct has<feature::sse2>{
struct has<x86::feature::sse2>{
static const bool enabled=
#ifdef COMPASS_CT_HAS_SSE2
true;
......@@ -58,7 +58,7 @@ namespace compass {
};
template<>
struct has<feature::sse3>{
struct has<x86::feature::sse3>{
static const bool enabled=
#ifdef COMPASS_CT_HAS_SSE3
true;
......@@ -69,7 +69,7 @@ namespace compass {
};
template<>
struct has<feature::sse4>{
struct has<x86::feature::sse4>{
static const bool enabled=
#ifdef COMPASS_CT_HAS_SSE4
true;
......
......@@ -13,6 +13,7 @@ namespace compass {
struct unsupported_tag { static int dummy; };
struct through_os_tag {};
};
namespace runtime {
......
......@@ -37,6 +37,18 @@ namespace compass {
}
template <typename feature_t>
bool has(feature_t , ct::x86_tag){
auto regs = rt::cpuid(feature_t::leaf_id);
if(std::count(regs.cbegin(), regs.cend(),0) == regs.size()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[feature_t::reg_index]).test(feature_t::bit_index);
return value;
}
// //too difficult for now
// //https://stackoverflow.com/questions/2901694/programmatically-detect-number-of-physical-processors-cores-or-if-hyper-threadin
......@@ -54,78 +66,50 @@ namespace compass {
// }
/////////////////////////////////////////////////////////
// SPECIAL CASES
///////////////////
static bool has(feature::sse , ct::x86_tag){
auto regs = rt::cpuid(1);
if(std::count(regs.cbegin(), regs.cend(),0) == regs.size()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[ct::edx]).test(25);
return value;
}
static bool has(feature::sse2 , ct::x86_tag){
auto regs = rt::cpuid(1);
if(regs.empty()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[ct::edx]).test(26);
return value;
}
static bool has(feature::sse3 , ct::x86_tag){
auto regs = rt::cpuid(1);
if(regs.empty()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[ct::ecx]).test(9) |
bitview(regs[ct::ecx]).test(0) |
bitview(regs[ct::ecx]).test(3);
return value;
}
static bool has(feature::sse4 , ct::x86_tag){
static bool has(x86::feature::ssse3 , ct::x86_tag){
auto regs = rt::cpuid(1);
auto regs = rt::cpuid(x86::feature::ssse3::leaf_id);
if(regs.empty()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[ct::ecx]).test(19) |
bitview(regs[ct::ecx]).test(20);
bool value = bitview(regs[x86::feature::ssse3::reg_index]).test(9) |
bitview(regs[x86::feature::ssse3::reg_index]).test(0) |
bitview(regs[x86::feature::ssse3::reg_index]).test(3);
return value;
}
static bool has(feature::avx , ct::x86_tag){
auto regs = rt::cpuid(1);
if(regs.empty()){
std::cerr << "unsupported cpuid level detected\n";
}
bool value = bitview(regs[ct::ecx]).test(28);
static bool has(x86::feature::sse4 , ct::x86_tag){
bool value = has(x86::feature::sse4_1(), ct::x86_tag()) && has(x86::feature::sse4_2(), ct::x86_tag());
return value;
}
static bool has(feature::avx2 , ct::x86_tag){
auto regs = rt::cpuid(7,0,0,0);
bool value = bitview(regs[ct::ebx]).test(5);
static bool has(x86::feature::avx512 , ct::x86_tag){
auto regs = rt::cpuid(7);
bool value = true;
value &= has(x86::feature::avx512f () , ct::x86_tag());
value &= has(x86::feature::avx512cd () , ct::x86_tag());
value &= has(x86::feature::avx512er () , ct::x86_tag());
value &= has(x86::feature::avx512pf () , ct::x86_tag());
value &= has(x86::feature::avx512bw () , ct::x86_tag());
value &= has(x86::feature::avx512dq () , ct::x86_tag());
value &= has(x86::feature::avx512vl () , ct::x86_tag());
value &= has(x86::feature::avx512ifma () , ct::x86_tag());
value &= has(x86::feature::avx512vbmi () , ct::x86_tag());
value &= has(x86::feature::avx512vbmi2 () , ct::x86_tag());
value &= has(x86::feature::avx512vnni () , ct::x86_tag());
value &= has(x86::feature::avx512bitalg () , ct::x86_tag());
value &= has(x86::feature::avx512vpopcntdq() , ct::x86_tag());
value &= has(x86::feature::avx512_4vnniw () , ct::x86_tag());
value &= has(x86::feature::avx512_4vbmi2 () , ct::x86_tag());
return value;
}
......
......@@ -5,6 +5,7 @@
#include "detail/ct/detect_compiler.hpp"
#include "detail/ct/detect_arch.hpp"
#include "detail/bit_view.hpp"
#include "detail/rt/x86_cpuid.hpp"
#include <iostream>
......@@ -65,6 +66,12 @@ namespace compass {
}
//for details, see https://en.wikipedia.org/wiki/CPUID#EAX=80000002h,80000003h,80000004h:_Processor_Brand_String
static std::uint32_t family(ct::x86_tag) {
auto regs = rt::cpuid(1);
std::uint32_t value = compass::utility::bit_view<std::uint32_t>(regs[ct::eax]).range(8,11);
return value;
}
static std::string device_name(ct::x86_tag) {
......
#ifndef COMPASS_TAGS_H_
#define COMPASS_TAGS_H_
#include "detail/definitions.hpp"
namespace compass {
namespace feature {
namespace x86 {
namespace feature {
//SIMD instruction sets
//128bit wide
struct sse {};
struct sse2 {};
struct sse3 {};
struct sse4 {};
struct xsave { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 26; };
struct osxsave { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 27; };
//256bit wide
struct avx {};
struct avx2 {};
struct smx { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 6; };
struct cx16 { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 13;};
struct aes { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 25;};
struct f16c { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 29;};
struct sgx { static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 2; };
struct bmi1 { static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 3; };
struct bmi2 { static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 8; };
struct erms { static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 9; };
struct vpclmulqdq { static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 10;};
//SIMD instruction sets
//128bit wide
struct sse { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::edx; static constexpr std::uint32_t bit_index = 25; };
struct sse2 { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::edx; static constexpr std::uint32_t bit_index = 26; };
struct ssse3 { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = ~0; };
using sse3 = ssse3;
};
struct sse4_1 { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 19; };
struct sse4_2 { static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 20; };
struct sse4 {}; //logical and of sse4_1 and sse4_1
//256bit wide
struct fma3 {static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 12;};
struct avx {static constexpr std::uint32_t leaf_id = 1; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 28;};
struct avx2 {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 5;};
//512bit wide
struct avx512f {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 16;};
struct avx512cd {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 28;};
struct avx512er {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 27;};
struct avx512pf {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 26;};
struct avx512bw {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 30;};
struct avx512dq {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 17;};
struct avx512vl {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 31;};
struct avx512ifma {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ebx; static constexpr std::uint32_t bit_index = 21;};
struct avx512vbmi {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 1;};
struct avx512vbmi2 {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 6;};
struct avx512vnni {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 11;};
struct avx512bitalg {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 12;};
struct avx512vpopcntdq {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::ecx; static constexpr std::uint32_t bit_index = 14;};
struct avx512_4vnniw {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::edx; static constexpr std::uint32_t bit_index = 2;};
struct avx512_4vbmi2 {static constexpr std::uint32_t leaf_id = 7; static constexpr std::uint32_t reg_index = ct::edx; static constexpr std::uint32_t bit_index = 3;};
struct avx512 {}; //logical and of the above
};
}; //x86
};
#endif /* COMPASS_TAGS_H_ */
......@@ -13,6 +13,7 @@ struct host_reference
std::string expected_vendor ;
std::string expected_brand ;
std::uint32_t expected_family ;
std::string expected_device_name ;
bool expected_has_sse ;
......@@ -21,6 +22,8 @@ struct host_reference
bool expected_has_sse4 ;
bool expected_has_avx ;
bool expected_has_avx2 ;
bool expected_has_avx512f ;
std::uint32_t expected_L1d_linesize ;
std::uint32_t expected_L2_linesize ;
std::uint32_t expected_L3_linesize ;
......@@ -36,6 +39,7 @@ struct host_reference
host_reference():
hostname(""),
expected_vendor (""),
expected_family (0),
expected_brand (""),
expected_device_name (""),
expected_has_sse (false),
......@@ -44,6 +48,7 @@ struct host_reference
expected_has_sse4(false),
expected_has_avx (false),
expected_has_avx2(false),
expected_has_avx512f(false),
expected_L1d_linesize(0) ,
expected_L2_linesize(0) ,
expected_L3_linesize(0) ,
......@@ -56,6 +61,7 @@ struct host_reference
expected_vendor = "@CPU_VENDOR@";
expected_brand = "@CPU_MODEL_NAME@";
expected_family = @CPU_FAMILY@;
expected_device_name = "";
expected_has_sse= @SSE_FOUND@ ;
......@@ -65,6 +71,7 @@ struct host_reference
expected_has_avx = @AVX_FOUND@ ;
expected_has_avx2= @AVX2_FOUND@ ;
expected_has_avx512f = @AVX512F_FOUND@ ;
//check by `cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size`
// expected_L1d_linesize= 64 ;
......
......@@ -35,6 +35,16 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
}
SECTION( "vendor_right" ){
auto value = compass::runtime::vendor();
REQUIRE(value.empty()!=true);
REQUIRE_THAT(value, Catch::Matchers::Contains(expected_vendor) );
}
SECTION( "device_name_right" ){
auto value = compass::runtime::device_name();
......@@ -62,7 +72,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse_right_at_ct" ){
auto value = compass::compiletime::has<compass::feature::sse()>::enabled;
auto value = compass::compiletime::has<compass::x86::feature::sse()>::enabled;
REQUIRE(true);//this just needs to compile
......@@ -70,7 +80,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse_right" ){
auto value = compass::runtime::has(compass::feature::sse());
auto value = compass::runtime::has(compass::x86::feature::sse());
REQUIRE(value==expected_has_sse);
......@@ -79,46 +89,67 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse2_right" ){
auto value = compass::runtime::has(compass::feature::sse2());
auto value = compass::runtime::has(compass::x86::feature::sse2());
REQUIRE(value==expected_has_sse2);
if(expected_has_sse2){
REQUIRE(compass::compiletime::has<compass::feature::sse2>::enabled==expected_has_sse2);
REQUIRE(compass::compiletime::has<compass::x86::feature::sse2>::enabled==expected_has_sse2);
}
}
SECTION( "has_sse3_right" ){
auto value = compass::runtime::has(compass::feature::sse3());
auto value = compass::runtime::has(compass::x86::feature::sse3());
REQUIRE(value==expected_has_sse3);
if(expected_has_sse3)
REQUIRE(compass::compiletime::has<compass::feature::sse3>::enabled==expected_has_sse3);
REQUIRE(compass::compiletime::has<compass::x86::feature::sse3>::enabled==expected_has_sse3);
value = compass::runtime::has(compass::x86::feature::ssse3());
REQUIRE(value==expected_has_sse3);
}
SECTION( "has_sse4_right" ){
auto value = compass::runtime::has(compass::feature::sse4());
auto value = compass::runtime::has(compass::x86::feature::sse4());
REQUIRE(value==expected_has_sse4);
if(expected_has_sse4)
REQUIRE(compass::compiletime::has<compass::feature::sse4>::enabled==expected_has_sse4);
REQUIRE(compass::compiletime::has<compass::x86::feature::sse4>::enabled==expected_has_sse4);
}
SECTION( "has_sse4_1_right" ){
auto value = compass::runtime::has(compass::x86::feature::sse4_1());
REQUIRE(value==expected_has_sse4);
if(expected_has_sse4)
REQUIRE(compass::compiletime::has<compass::x86::feature::sse4>::enabled==expected_has_sse4);
}
SECTION( "has_avx_right" ){
auto value = compass::runtime::has(compass::feature::avx());
auto value = compass::runtime::has(compass::x86::feature::avx());
REQUIRE(value==expected_has_avx);
}
SECTION( "has_avx512f_right" ){
auto value = compass::runtime::has(compass::x86::feature::avx512f());
REQUIRE(value==expected_has_avx512f);
}
SECTION( "has_multiple_features" ){
auto value = compass::runtime::accumulate(compass::feature::avx(),compass::feature::sse4(),compass::feature::sse3());
auto value = compass::runtime::accumulate(compass::x86::feature::avx(),compass::x86::feature::sse4(),compass::x86::feature::sse3());
const bool expected = (expected_has_avx || expected_has_sse4 || expected_has_sse3 );
REQUIRE(bool(value) == expected );
......@@ -133,7 +164,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_avx2_right" ){
auto value = compass::runtime::has(compass::feature::avx2());
auto value = compass::runtime::has(compass::x86::feature::avx2());
REQUIRE(value==expected_has_avx2);
......
......@@ -62,7 +62,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse_right" ){
auto value = compass::runtime::has(compass::feature::sse());
auto value = compass::runtime::has(compass::x86::feature::sse());
REQUIRE(value==expected_has_sse);
......@@ -70,7 +70,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse2_right" ){
auto value = compass::runtime::has(compass::feature::sse2());
auto value = compass::runtime::has(compass::x86::feature::sse2());
REQUIRE(value==expected_has_sse2);
......@@ -78,7 +78,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse3_right" ){
auto value = compass::runtime::has(compass::feature::sse3());
auto value = compass::runtime::has(compass::x86::feature::sse3());
REQUIRE(value==expected_has_sse3);
......@@ -86,7 +86,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_sse4_right" ){
auto value = compass::runtime::has(compass::feature::sse4());
auto value = compass::runtime::has(compass::x86::feature::sse4());
REQUIRE(value==expected_has_sse4);
......@@ -94,7 +94,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_avx_right" ){
auto value = compass::runtime::has(compass::feature::avx());
auto value = compass::runtime::has(compass::x86::feature::avx());
REQUIRE(value==expected_has_avx);
......@@ -103,7 +103,7 @@ TEST_CASE_METHOD( host_reference, "machine_specific" ){
SECTION( "has_avx2_right" ){
auto value = compass::runtime::has(compass::feature::avx2());
auto value = compass::runtime::has(compass::x86::feature::avx2());
REQUIRE(value==expected_has_avx2);
......