Check only for SSE 4.1 (rather than SSE 4.2) when trying to use the SSE
implementation of PairHMM
This commit is contained in:
parent
dc44b64ad8
commit
20a46e4098
|
|
@ -77,8 +77,9 @@ import java.io.OutputStream;
|
||||||
public class VectorLoglessPairHMM extends JNILoglessPairHMM {
|
public class VectorLoglessPairHMM extends JNILoglessPairHMM {
|
||||||
|
|
||||||
//For machine capabilities
|
//For machine capabilities
|
||||||
public static final long sse42Mask = 1;
|
public static final long sse41Mask = 1;
|
||||||
public static final long avxMask = 2;
|
public static final long sse42Mask = 2;
|
||||||
|
public static final long avxMask = 4;
|
||||||
public static final long enableAll = 0xFFFFFFFFFFFFFFFFl;
|
public static final long enableAll = 0xFFFFFFFFFFFFFFFFl;
|
||||||
|
|
||||||
//Used to copy references to byteArrays to JNI from reads
|
//Used to copy references to byteArrays to JNI from reads
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,18 @@ bool is_avx_supported()
|
||||||
return ((ecx >> 28)&1) == 1;
|
return ((ecx >> 28)&1) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
bool is_sse42_supported()
|
bool is_sse42_supported()
|
||||||
{
|
{
|
||||||
int ecx = 0, edx = 0, ebx = 0;
|
int ecx = 0, edx = 0, ebx = 0;
|
||||||
|
|
@ -41,6 +53,8 @@ uint64_t get_machine_capabilities()
|
||||||
machine_mask |= (1 << AVX_CUSTOM_IDX);
|
machine_mask |= (1 << AVX_CUSTOM_IDX);
|
||||||
if(is_sse42_supported())
|
if(is_sse42_supported())
|
||||||
machine_mask |= (1 << SSE42_CUSTOM_IDX);
|
machine_mask |= (1 << SSE42_CUSTOM_IDX);
|
||||||
|
if(is_sse41_supported())
|
||||||
|
machine_mask |= (1 << SSE41_CUSTOM_IDX);
|
||||||
return machine_mask;
|
return machine_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,9 +68,9 @@ void initialize_function_pointers(uint64_t mask)
|
||||||
g_compute_full_prob_double = compute_full_prob_avxd<double>;
|
g_compute_full_prob_double = compute_full_prob_avxd<double>;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(is_sse42_supported() && (mask & (1<< SSE42_CUSTOM_IDX)))
|
if(is_sse41_supported() && (mask & (1<< SSE41_CUSTOM_IDX)))
|
||||||
{
|
{
|
||||||
cout << "Using SSE4.2 accelerated implementation of PairHMM\n";
|
cout << "Using SSE4.1 accelerated implementation of PairHMM\n";
|
||||||
g_compute_full_prob_float = compute_full_prob_sses<float>;
|
g_compute_full_prob_float = compute_full_prob_sses<float>;
|
||||||
g_compute_full_prob_double = compute_full_prob_ssed<double>;
|
g_compute_full_prob_double = compute_full_prob_ssed<double>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@ uint64_t diff_time(struct timespec& prev_time);
|
||||||
//bit 0 is sse4.2, bit 1 is AVX
|
//bit 0 is sse4.2, bit 1 is AVX
|
||||||
enum ProcessorCapabilitiesEnum
|
enum ProcessorCapabilitiesEnum
|
||||||
{
|
{
|
||||||
SSE42_CUSTOM_IDX=0,
|
SSE41_CUSTOM_IDX=0,
|
||||||
|
SSE42_CUSTOM_IDX,
|
||||||
AVX_CUSTOM_IDX
|
AVX_CUSTOM_IDX
|
||||||
};
|
};
|
||||||
#define ENABLE_ALL_HARDWARE_FEATURES 0xFFFFFFFFFFFFFFFFull
|
#define ENABLE_ALL_HARDWARE_FEATURES 0xFFFFFFFFFFFFFFFFull
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue