From 88c08e78e77ecc52eb1af08c670de7b81ed06b5b Mon Sep 17 00:00:00 2001 From: Karthik Gururaj Date: Tue, 21 Jan 2014 09:57:14 -0800 Subject: [PATCH] 1. Inserted #define in sandbox pairhmm-template-main.cc 2. Wrapped _mm_empty() with ifdef SIMD_TYPE_SSE 3. OpenMP disabled 4. Added code for initializing PairHMM's data inside initializePairHMM - not used yet --- PairHMM_JNI/libJNILoglessPairHMM.so | Bin 102085 -> 102053 bytes PairHMM_JNI/pairhmm-1-base.cc | 76 ++++++++++-------- PairHMM_JNI/pairhmm-template-kernel.cc | 4 +- PairHMM_JNI/pairhmm-template-main.cc | 12 ++- PairHMM_JNI/utils.cc | 1 + PairHMM_JNI/vector_defs.h | 3 + PairHMM_JNI/vector_function_prototypes.h | 20 ++--- .../PairHMMLikelihoodCalculationEngine.java | 2 +- .../utils/pairhmm/JNILoglessPairHMM.java | 47 +++++++++++ .../sting/utils/pairhmm/PairHMM.java | 12 +++ 10 files changed, 126 insertions(+), 51 deletions(-) diff --git a/PairHMM_JNI/libJNILoglessPairHMM.so b/PairHMM_JNI/libJNILoglessPairHMM.so index 053b901cd7d16182b21054593096ab2ad1c2a0b2..e18552b6b9147e44fc72618991b21b560945e537 100755 GIT binary patch delta 12981 zcmZvD4O~>!*8bTeDAY!Ahs3?AAn)p>}dO^io2qd

|cY1a&#|FiZP>gfBP-%r+go@ej1_gQQ2 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 diff --git a/PairHMM_JNI/pairhmm-1-base.cc b/PairHMM_JNI/pairhmm-1-base.cc index 3941c92de..a2d5dfa88 100644 --- a/PairHMM_JNI/pairhmm-1-base.cc +++ b/PairHMM_JNI/pairhmm-1-base.cc @@ -58,47 +58,53 @@ int main(int argc, char** argv) vector tc_vector; tc_vector.clear(); testcase tc; + double total_time = 0; while(1) { int break_value = use_old_read_testcase ? read_testcase(&tc, fptr) : read_mod_testcase(ifptr,&tc,true); + if(break_value >= 0) + tc_vector.push_back(tc); + if(tc_vector.size() == BATCH_SIZE || (break_value < 0 && tc_vector.size() > 0)) + { + 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)); + double abs_error = fabs(baseline_result-results_vec[i]); + double rel_error = (baseline_result != 0) ? fabs(abs_error/baseline_result) : 0; + if(abs_error > 1e-5 && rel_error > 1e-5) + cout << std::scientific << baseline_result << " "< 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)); - double abs_error = fabs(baseline_result-results_vec[i]); - double rel_error = (baseline_result != 0) ? fabs(abs_error/baseline_result) : 0; - if(abs_error > 1e-5 && rel_error > 1e-5) - cout << std::scientific << baseline_result << " "< void GEN_INTRINSIC(GEN_INTRINSIC(initializeVectors,SIMD_TYPE), PRECISION)(int ROWS, int COLS, NUMBER* shiftOutM, NUMBER *shiftOutX, NUMBER *shiftOutY, Context ctx, testcase *tc, _256_TYPE *p_MM, _256_TYPE *p_GAPM, _256_TYPE *p_MX, _256_TYPE *p_XX, _256_TYPE *p_MY, _256_TYPE *p_YY, _256_TYPE *distm1D); -template void GEN_INTRINSIC(GEN_INTRINSIC(stripINITIALIZATION,SIMD_TYPE), PRECISION)( +inline void GEN_INTRINSIC(GEN_INTRINSIC(_vector_shift,SIMD_TYPE), PRECISION) (UNION_TYPE &x, MAIN_TYPE shiftIn, MAIN_TYPE &shiftOut); +inline void GEN_INTRINSIC(GEN_INTRINSIC(_vector_shift_last,SIMD_TYPE), PRECISION) (UNION_TYPE &x, MAIN_TYPE shiftIn); +inline void GEN_INTRINSIC(GEN_INTRINSIC(precompute_masks_,SIMD_TYPE), PRECISION)(const testcase& tc, int COLS, int numMaskVecs, MASK_TYPE (*maskArr)[NUM_DISTINCT_CHARS]); +inline void GEN_INTRINSIC(GEN_INTRINSIC(init_masks_for_row_,SIMD_TYPE), PRECISION)(const testcase& tc, char* rsArr, MASK_TYPE* lastMaskShiftOut, int beginRowIndex, int numRowsToProcess); +inline void GEN_INTRINSIC(GEN_INTRINSIC(update_masks_for_cols_,SIMD_TYPE), PRECISION)(int maskIndex, MASK_VEC& currMaskVecLow, MASK_VEC& currMaskVecHigh, MASK_TYPE (*maskArr) [NUM_DISTINCT_CHARS], char* rsArr, MASK_TYPE* lastMaskShiftOut, MASK_TYPE maskBitCnt); +inline void GEN_INTRINSIC(GEN_INTRINSIC(computeDistVec,SIMD_TYPE), PRECISION) (MASK_VEC& currMaskVecLow, MASK_VEC& currMaskVecHigh, _256_TYPE& distm, _256_TYPE& _1_distm, _256_TYPE& distmChosen); +template inline void GEN_INTRINSIC(GEN_INTRINSIC(initializeVectors,SIMD_TYPE), PRECISION)(int ROWS, int COLS, NUMBER* shiftOutM, NUMBER *shiftOutX, NUMBER *shiftOutY, Context ctx, testcase *tc, _256_TYPE *p_MM, _256_TYPE *p_GAPM, _256_TYPE *p_MX, _256_TYPE *p_XX, _256_TYPE *p_MY, _256_TYPE *p_YY, _256_TYPE *distm1D); +template inline void GEN_INTRINSIC(GEN_INTRINSIC(stripINITIALIZATION,SIMD_TYPE), PRECISION)( int stripIdx, Context ctx, testcase *tc, _256_TYPE &pGAPM, _256_TYPE &pMM, _256_TYPE &pMX, _256_TYPE &pXX, _256_TYPE &pMY, _256_TYPE &pYY, _256_TYPE &rs, UNION_TYPE &rsN, _256_TYPE &distm, _256_TYPE &_1_distm, _256_TYPE *distm1D, _256_TYPE N_packed256, _256_TYPE *p_MM , _256_TYPE *p_GAPM , _256_TYPE *p_MX, _256_TYPE *p_XX , _256_TYPE *p_MY, _256_TYPE *p_YY, UNION_TYPE &M_t_2, UNION_TYPE &X_t_2, UNION_TYPE &M_t_1, UNION_TYPE &X_t_1, UNION_TYPE &Y_t_2, UNION_TYPE &Y_t_1, UNION_TYPE &M_t_1_y, NUMBER* shiftOutX, NUMBER* shiftOutM); -_256_TYPE GEN_INTRINSIC(GEN_INTRINSIC(computeDISTM,SIMD_TYPE), PRECISION)(int d, int COLS, testcase * tc, HAP_TYPE &hap, _256_TYPE rs, UNION_TYPE rsN, _256_TYPE N_packed256, +inline _256_TYPE GEN_INTRINSIC(GEN_INTRINSIC(computeDISTM,SIMD_TYPE), PRECISION)(int d, int COLS, testcase * tc, HAP_TYPE &hap, _256_TYPE rs, UNION_TYPE rsN, _256_TYPE N_packed256, _256_TYPE distm, _256_TYPE _1_distm); -void GEN_INTRINSIC(GEN_INTRINSIC(computeMXY,SIMD_TYPE), PRECISION)(UNION_TYPE &M_t, UNION_TYPE &X_t, UNION_TYPE &Y_t, UNION_TYPE &M_t_y, +inline void GEN_INTRINSIC(GEN_INTRINSIC(computeMXY,SIMD_TYPE), PRECISION)(UNION_TYPE &M_t, UNION_TYPE &X_t, UNION_TYPE &Y_t, UNION_TYPE &M_t_y, UNION_TYPE M_t_2, UNION_TYPE X_t_2, UNION_TYPE Y_t_2, UNION_TYPE M_t_1, UNION_TYPE X_t_1, UNION_TYPE M_t_1_y, UNION_TYPE Y_t_1, _256_TYPE pMM, _256_TYPE pGAPM, _256_TYPE pMX, _256_TYPE pXX, _256_TYPE pMY, _256_TYPE pYY, _256_TYPE distmSel); template NUMBER GEN_INTRINSIC(GEN_INTRINSIC(compute_full_prob_,SIMD_TYPE), PRECISION) (testcase *tc, NUMBER *before_last_log = NULL); diff --git a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/PairHMMLikelihoodCalculationEngine.java b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/PairHMMLikelihoodCalculationEngine.java index 5ab49b531..caa880b41 100644 --- a/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/PairHMMLikelihoodCalculationEngine.java +++ b/protected/java/src/org/broadinstitute/sting/gatk/walkers/haplotypecaller/PairHMMLikelihoodCalculationEngine.java @@ -332,7 +332,7 @@ public class PairHMMLikelihoodCalculationEngine implements LikelihoodCalculation } // initialize arrays to hold the probabilities of being in the match, insertion and deletion cases - pairHMMThreadLocal.get().initialize(X_METRIC_LENGTH, Y_METRIC_LENGTH); + pairHMMThreadLocal.get().initialize(haplotypes, perSampleReadList, X_METRIC_LENGTH, Y_METRIC_LENGTH); } diff --git a/protected/java/src/org/broadinstitute/sting/utils/pairhmm/JNILoglessPairHMM.java b/protected/java/src/org/broadinstitute/sting/utils/pairhmm/JNILoglessPairHMM.java index ca3db5ed3..ed628f064 100644 --- a/protected/java/src/org/broadinstitute/sting/utils/pairhmm/JNILoglessPairHMM.java +++ b/protected/java/src/org/broadinstitute/sting/utils/pairhmm/JNILoglessPairHMM.java @@ -57,6 +57,7 @@ import org.broadinstitute.variant.variantcontext.Allele; import java.util.List; import java.util.Map; +import java.util.HashMap; /** @@ -147,6 +148,52 @@ public class JNILoglessPairHMM extends LoglessPairHMM { jniInitialize(readMaxLength, haplotypeMaxLength); } + private native void jniInitialize(final int numHaplotypes, final int numTotalReads, JNIHaplotypeDataHolderClass[] haplotypeDataArray, + JNIReadDataHolderClass[] readDataArray); + HashMap sampleToIndex = new HashMap(); + //Used to transfer data to JNI + /** + * {@inheritDoc} + */ + @Override + public void initialize( final List haplotypes, final Map> perSampleReadList, final int readMaxLength, final int haplotypeMaxLength ) { + if(verify) + super.initialize(haplotypes, perSampleReadList, readMaxLength, haplotypeMaxLength); + /* + int numHaplotypes = haplotypes.size(); + JNIHaplotypeDataHolderClass[] haplotypeDataArray = new JNIHaplotypeDataHolderClass[numHaplotypes]; + int idx = 0; + for(final Haplotype currHaplotype : haplotypes) + { + haplotypeDataArray[idx] = new JNIHaplotypeDataHolderClass(); + haplotypeDataArray[idx].haplotypeBases = currHaplotype.getBases(); + ++idx; + } + sampleToIndex.clear(); + int totalNumReads = 0; + for(final Map.Entry> currEntry : perSampleReadList) + { + sampleToIndex.put(currEntry.getKey(), totalNumReads); + totalNumReads += currEntry.getValue().size(); + } + + JNIHaplotypeDataHolderClass[] readDataArray = new JNIReadDataHolderClass[totalNumReads]; + idx = 0; + for(final Map.Entry> currEntry : perSampleReadList) + { + for(GATKSAMRecord read : currEntry.getValue()) + { + readDataArray[idx] = new JNIReadDataHolderClass(); + readDataArray[idx].readBases = read.getReadBases(); + readDataArray[idx].readQuals = read.getBaseQualities(); + readDataArray[idx].insertionGOP = read.getBaseInsertionQualities(); + readDataArray[idx].deletionGOP = read.getBaseDeletionQualities(); + readDataArray[idx].overallGCP = GCPArrayMap.get(read); + ++idx; + } + } + jniInitialize(numHaplotypes, numTotalReads, haplotypeDataArray, readDataArray);*/ + } //Real compute kernel private native void jniComputeLikelihoods(int numReads, int numHaplotypes, diff --git a/public/java/src/org/broadinstitute/sting/utils/pairhmm/PairHMM.java b/public/java/src/org/broadinstitute/sting/utils/pairhmm/PairHMM.java index 7b09fe047..08a49cfb7 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pairhmm/PairHMM.java +++ b/public/java/src/org/broadinstitute/sting/utils/pairhmm/PairHMM.java @@ -100,6 +100,18 @@ public abstract class PairHMM { initialized = true; } + /** + * Initialize this PairHMM, making it suitable to run against a read and haplotype with given lengths + * This function is used by the JNI implementations to transfer all data once to the native code + * @param haplotypes the list of haplotypes + * @param perSampleReadList map from sample name to list of reads + * @param haplotypeMaxLength the max length of haplotypes we want to use with this PairHMM + * @param readMaxLength the max length of reads we want to use with this PairHMM + */ + public void initialize( final List haplotypes, final Map> perSampleReadList, final int readMaxLength, final int haplotypeMaxLength ) { + initialize(readMaxLength, haplotypeMaxLength); + } + protected int findMaxReadLength(final List reads) { int listMaxReadLength = 0; for(GATKSAMRecord read : reads){