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);
|
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.AVX, pairHmmNativeArgs);
|
||||||
case VECTOR_LOGLESS_CACHING_OMP:
|
case VECTOR_LOGLESS_CACHING_OMP:
|
||||||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
||||||
|
case VECTOR_LOGLESS_CACHING_FPGA_EXPERIMENTAL:
|
||||||
|
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.FPGA, pairHmmNativeArgs);
|
||||||
case FASTEST_AVAILABLE:
|
case FASTEST_AVAILABLE:
|
||||||
try {
|
try {
|
||||||
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
return new VectorLoglessPairHMM(VectorLoglessPairHMM.Implementation.OMP, pairHmmNativeArgs);
|
||||||
|
|
@ -125,7 +127,7 @@ public class PairHMMLikelihoodCalculationEngine implements ReadLikelihoodCalcula
|
||||||
default:
|
default:
|
||||||
throw new UserException.BadArgumentValue("pairHMM", "Specified pairHMM implementation is unrecognized or " +
|
throw new UserException.BadArgumentValue("pairHMM", "Specified pairHMM implementation is unrecognized or " +
|
||||||
"incompatible with the HaplotypeCaller. Acceptable options are ORIGINAL, EXACT, CACHING, LOGLESS_CACHING, " +
|
"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.IntelPairHmm;
|
||||||
import com.intel.gkl.pairhmm.IntelPairHmmOMP;
|
import com.intel.gkl.pairhmm.IntelPairHmmOMP;
|
||||||
|
import com.intel.gkl.pairhmm.IntelPairHmmFpga;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.broadinstitute.gatk.nativebindings.pairhmm.HaplotypeDataHolder;
|
import org.broadinstitute.gatk.nativebindings.pairhmm.HaplotypeDataHolder;
|
||||||
import org.broadinstitute.gatk.nativebindings.pairhmm.PairHMMNativeArguments;
|
import org.broadinstitute.gatk.nativebindings.pairhmm.PairHMMNativeArguments;
|
||||||
|
|
@ -85,7 +86,9 @@ public class VectorLoglessPairHMM extends JNILoglessPairHMM {
|
||||||
/* Use AVX acceleration */
|
/* Use AVX acceleration */
|
||||||
AVX,
|
AVX,
|
||||||
/* Use AVX acceleration with mult-threading via OpenMP */
|
/* Use AVX acceleration with mult-threading via OpenMP */
|
||||||
OMP
|
OMP,
|
||||||
|
/* Use FPGA acceleration */
|
||||||
|
FPGA
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final static Logger logger = Logger.getLogger(VectorLoglessPairHMM.class);
|
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");
|
logger.info("Using OpenMP multi-threaded AVX-accelerated native PairHMM implementation");
|
||||||
break;
|
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:
|
default:
|
||||||
throw new UserException.HardwareFeatureException("Unknown PairHMM implementation.");
|
throw new UserException.HardwareFeatureException("Unknown PairHMM implementation.");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,8 @@ public abstract class PairHMM {
|
||||||
VECTOR_LOGLESS_CACHING,
|
VECTOR_LOGLESS_CACHING,
|
||||||
/* Optimized, multi-threaded AVX implementation of LOGLESS_CACHING called through JNI */
|
/* Optimized, multi-threaded AVX implementation of LOGLESS_CACHING called through JNI */
|
||||||
VECTOR_LOGLESS_CACHING_OMP,
|
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 */
|
/* Use fastest available implementation. OMP -> AVX -> LOGLESS_CACHING */
|
||||||
FASTEST_AVAILABLE,
|
FASTEST_AVAILABLE,
|
||||||
/* Debugging for vector implementation of LOGLESS_CACHING */
|
/* Debugging for vector implementation of LOGLESS_CACHING */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue