Merge pull request #1595 from broadinstitute/eba_gkl_pairhmm_fpga
Added FPGA support for PairHMM via GKL, and marked as 'experimental'
This commit is contained in:
commit
fff63bab53
|
|
@ -101,6 +101,8 @@ public class PairHMMLikelihoodCalculationEngine implements ReadLikelihoodCalcula
|
|||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.AVX, pairHmmNativeArgs);
|
||||
case VECTOR_LOGLESS_CACHING_OMP:
|
||||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
||||
case VECTOR_LOGLESS_CACHING_FPGA_EXPERIMENTAL:
|
||||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.FPGA, pairHmmNativeArgs);
|
||||
case FASTEST_AVAILABLE:
|
||||
try {
|
||||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
||||
|
|
@ -125,7 +127,7 @@ public class PairHMMLikelihoodCalculationEngine implements ReadLikelihoodCalcula
|
|||
default:
|
||||
throw new UserException.BadArgumentValue("pairHMM", "Specified pairHMM implementation is unrecognized or " +
|
||||
"incompatible with the HaplotypeCaller. Acceptable options are ORIGINAL, EXACT, CACHING, LOGLESS_CACHING, " +
|
||||
"VECTOR_LOGLESS_CACHING, VECTOR_LOGLESS_CACHING_OMP, and ARRAY_LOGLESS.");
|
||||
"VECTOR_LOGLESS_CACHING, VECTOR_LOGLESS_CACHING_OMP, VECTOR_LOGLESS_CACHING_FPGA_EXPERIMENTAL, and ARRAY_LOGLESS.");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ package org.broadinstitute.gatk.utils.pairhmm;
|
|||
|
||||
import com.intel.gkl.pairhmm.IntelPairHmm;
|
||||
import com.intel.gkl.pairhmm.IntelPairHmmOMP;
|
||||
import com.intel.gkl.pairhmm.IntelPairHmmFpga;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.broadinstitute.gatk.nativebindings.pairhmm.HaplotypeDataHolder;
|
||||
import org.broadinstitute.gatk.nativebindings.pairhmm.PairHMMNativeArguments;
|
||||
|
|
@ -85,7 +86,9 @@ public class VectorLoglessPairHMM extends JNILoglessPairHMM {
|
|||
/* Use AVX acceleration */
|
||||
AVX,
|
||||
/* Use AVX acceleration with mult-threading via OpenMP */
|
||||
OMP
|
||||
OMP,
|
||||
/* Use FPGA acceleration */
|
||||
FPGA
|
||||
}
|
||||
|
||||
protected final static Logger logger = Logger.getLogger(VectorLoglessPairHMM.class);
|
||||
|
|
@ -114,6 +117,15 @@ public class VectorLoglessPairHMM extends JNILoglessPairHMM {
|
|||
logger.info("Using OpenMP multi-threaded AVX-accelerated native PairHMM implementation");
|
||||
break;
|
||||
|
||||
case FPGA:
|
||||
pairHmm = new IntelPairHmmFpga();
|
||||
isSupported = pairHmm.load(null);
|
||||
if (!isSupported) {
|
||||
throw new UserException.HardwareFeatureException("Machine does not support FPGA PairHMM.");
|
||||
}
|
||||
logger.info("Using FPGA-accelerated native PairHMM implementation");
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new UserException.HardwareFeatureException("Unknown PairHMM implementation.");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ public abstract class PairHMM {
|
|||
VECTOR_LOGLESS_CACHING,
|
||||
/* Optimized, multi-threaded AVX implementation of LOGLESS_CACHING called through JNI */
|
||||
VECTOR_LOGLESS_CACHING_OMP,
|
||||
/* Optimized, FPGA implementation of LOGLESS_CACHING called through JNI. This is still experimental! */
|
||||
VECTOR_LOGLESS_CACHING_FPGA_EXPERIMENTAL,
|
||||
/* Use fastest available implementation. OMP -> AVX -> LOGLESS_CACHING */
|
||||
FASTEST_AVAILABLE,
|
||||
/* Debugging for vector implementation of LOGLESS_CACHING */
|
||||
|
|
|
|||
Loading…
Reference in New Issue