From f614d7b0d8e7b71d79655f510cd404f1672e6161 Mon Sep 17 00:00:00 2001 From: Karthik Gururaj Date: Mon, 20 Jan 2014 08:51:53 -0800 Subject: [PATCH] 1. Enabled OpenMP 2. Enabled AVX - earlier commit had disabled AVX --- PairHMM_JNI/Makefile | 2 +- PairHMM_JNI/libJNILoglessPairHMM.so | Bin 0 -> 114104 bytes PairHMM_JNI/pairhmm-1-base.cc | 39 +++++++++++++++++++++++++--- PairHMM_JNI/utils.cc | 3 +-- 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100755 PairHMM_JNI/libJNILoglessPairHMM.so diff --git a/PairHMM_JNI/Makefile b/PairHMM_JNI/Makefile index b86958a6c..e966caa90 100644 --- a/PairHMM_JNI/Makefile +++ b/PairHMM_JNI/Makefile @@ -1,4 +1,4 @@ -#OMPCFLAGS=-fopenmp +OMPCFLAGS=-fopenmp #OMPLDFLAGS=-lgomp #CFLAGS=-O2 -std=c++11 -W -Wall -march=corei7-avx -Wa,-q -pedantic $(OMPCFLAGS) -Wno-unknown-pragmas diff --git a/PairHMM_JNI/libJNILoglessPairHMM.so b/PairHMM_JNI/libJNILoglessPairHMM.so new file mode 100755 index 0000000000000000000000000000000000000000..7a771922fbd614ed3955980b46f605347db8f67a GIT binary patch literal 114104 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 KOxM<&^8Wx= 3 && string(argv[2]) == "1") use_old_read_testcase = true; + unsigned chunk_size = 100; + if(argc >= 4) + chunk_size = strtol(argv[3],0,10); + initialize_function_pointers(); @@ -45,12 +55,24 @@ int main(int argc, char** argv) assert(ifptr.is_open()); } + vector tc_vector; + tc_vector.clear(); testcase tc; while(1) { int break_value = use_old_read_testcase ? read_testcase(&tc, fptr) : read_mod_testcase(ifptr,&tc,true); if(break_value < 0) break; + tc_vector.push_back(tc); + } + vector results_vec; + results_vec.clear(); + results_vec.resize(tc_vector.size()); + double start_time = getCurrClk(); +#pragma omp parallel for schedule(dynamic,chunk_size) num_threads(12) + for(unsigned i=0;i(&tc); baseline_result = log10(baseline_result) - log10(ldexp(1.0, 1020.0)); - cout << std::scientific << baseline_result << " "< 1e-5 && rel_error > 1e-5) + cout << std::scientific << baseline_result << " "<;