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:
droazen 2017-06-26 12:06:31 -04:00 committed by GitHub
commit fff63bab53
3 changed files with 18 additions and 2 deletions

View File

@ -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.");
}
}
};

View File

@ -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.");
}

View File

@ -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 */