From 27e640d640579cf898c7f10ace04a763a2cf43d2 Mon Sep 17 00:00:00 2001 From: Karthik Gururaj Date: Thu, 6 Mar 2014 08:49:52 -0800 Subject: [PATCH] Modified SSE4.1 and 4.2 checks with _may_i_use_cpu_feature() --- .../src/main/c++/pairhmm-1-base.cc | 1 - public/VectorPairHMM/src/main/c++/utils.cc | 34 +++++++++--------- .../utils/pairhmm/libVectorLoglessPairHMM.so | Bin 443867 -> 443931 bytes 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/public/VectorPairHMM/src/main/c++/pairhmm-1-base.cc b/public/VectorPairHMM/src/main/c++/pairhmm-1-base.cc index 2528fd152..7ff219b88 100644 --- a/public/VectorPairHMM/src/main/c++/pairhmm-1-base.cc +++ b/public/VectorPairHMM/src/main/c++/pairhmm-1-base.cc @@ -33,7 +33,6 @@ using namespace std; int main(int argc, char** argv) { - cout << "AVX supported? " << _may_i_use_cpu_feature(_FEATURE_AVX) << endl ; #define BATCH_SIZE 10000 if(argc < 2) { diff --git a/public/VectorPairHMM/src/main/c++/utils.cc b/public/VectorPairHMM/src/main/c++/utils.cc index dd72fc512..b3de2c259 100644 --- a/public/VectorPairHMM/src/main/c++/utils.cc +++ b/public/VectorPairHMM/src/main/c++/utils.cc @@ -59,26 +59,28 @@ bool is_avx_supported() bool is_sse41_supported() { - int ecx = 0, edx = 0, ebx = 0; - __asm__("cpuid" - : "=b" (ebx), - "=c" (ecx), - "=d" (edx) - : "a" (1) - ); - return ((ecx >> 19)&1) == 1; + return (_may_i_use_cpu_feature(_FEATURE_SSE4_1) > 0); + //int ecx = 0, edx = 0, ebx = 0; + //__asm__("cpuid" + //: "=b" (ebx), + //"=c" (ecx), + //"=d" (edx) + //: "a" (1) + //); + //return ((ecx >> 19)&1) == 1; } bool is_sse42_supported() { - int ecx = 0, edx = 0, ebx = 0; - __asm__("cpuid" - : "=b" (ebx), - "=c" (ecx), - "=d" (edx) - : "a" (1) - ); - return ((ecx >> 20)&1) == 1; + return (_may_i_use_cpu_feature(_FEATURE_SSE4_2) > 0); + //int ecx = 0, edx = 0, ebx = 0; + //__asm__("cpuid" + //: "=b" (ebx), + //"=c" (ecx), + //"=d" (edx) + //: "a" (1) + //); + //return ((ecx >> 20)&1) == 1; } uint64_t get_machine_capabilities() diff --git a/public/sting-utils/src/main/resources/org/broadinstitute/sting/utils/pairhmm/libVectorLoglessPairHMM.so b/public/sting-utils/src/main/resources/org/broadinstitute/sting/utils/pairhmm/libVectorLoglessPairHMM.so index 5091b2f491dc75203e8314f1cd08fdc9a35723bf..26933455d96a44ddfec03d8d15cb71ab424d4759 100644 GIT binary patch delta 33170 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 delta 33289 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