Moved JNI_README

This commit is contained in:
Karthik Gururaj 2014-02-27 10:12:23 -08:00
parent c645725fc3
commit 2d0ce45bb0
3 changed files with 22 additions and 41 deletions

View File

@ -9,9 +9,9 @@ function implementation that is supported on the machine on which the program is
run. The two pointers are for float and double respectively. This initialization is done
only once for the whole program.
3. initialize(): To initialized the region for PairHMM. Pass haplotype bases to native
code through the JNIHaplotypeDataHolders class. Since the haplotype list is common across
multiple samples in computeReadLikelihoods(), we can store the haplotype bases to the
native code once and re-use across multiple samples.
code through the JNIHaplotypeDataHolders class. Since the haplotype list is common across multiple
samples in computeReadLikelihoods(), we can store the haplotype bases to the native code once and
re-use across multiple samples.
4. computeLikelihoods(): Copies array references for readBases/quals etc to array of
JNIReadDataHolder objects. Invokes the JNI function to perform the computation and
updates the likelihoodMap.
@ -33,9 +33,16 @@ support all AVX intrinsics.
Type 'make'. This should create a library called libVectorLoglessPairHMM.so
Running:
If libVectorLoglessPairHMM.so is compiled using icc, make sure that the Intel Composer XE
libraries are in your LD_LIBRARY_PATH :
source <COMPOSER_XE_DIR>/bin/compilervars.sh intel64
See run.sh in this directory on how to invoke HaplotypeCaller with the native library. The
argument -Djava.library.path is needed if the native implementation is selected, else
unnecessary.
The default implementation of PairHMM is still LOGLESS_CACHING in HaplotypeCaller.java. To use the
native version, use the command line argument "--pair_hmm_implementation VECTOR_LOGLESS_CACHING"
(see run.sh in src/main/c++).
The native library is bundled with the StingUtils jar file. When HaplotypeCaller is invoked with the
VectorLoglessPairHMM implementation (see run.sh in the directory src/main/c++), then the library is
unpacked from the jar file, copied to the /tmp directory (with a unique id) and loaded by the Java class
VectorLoglessPairHMM in the constructor (if it has not been loaded already).
The default library can be overridden by using the -Djava.library.path argument for the JVM to pass
the path to the library. If the library libVectorLoglessPairHMM.so can be found in
java.library.path, then it is loaded and the 'packed' library is not used.
See run.sh in this directory on how to invoke HaplotypeCaller with the vector implementation of
PairHMM. The argument -Djava.library.path is needed if you wish to override the default packed
library, else unnecessary.

View File

@ -13,7 +13,7 @@
<packaging>pom</packaging>
<name>Vectorized PairHMM native libraries</name>
<description>Builds a GNU/Linux x86_64 version of VectorPairHMM. During install, copies it into sting-utils.</description>
<description>Builds a GNU/Linux x86_64 library of VectorPairHMM using icc (Intel C++ compiler). During install, copies it into sting-utils. Neither tested nor expected to work on any other platform.</description>
<properties>
<sourceEncoding>UTF-8</sourceEncoding>
@ -23,20 +23,12 @@
<sting-utils.basedir>${sting.basedir}/public/sting-utils</sting-utils.basedir>
<!-- Where to place the library in sting-utils -->
<pairhmm.resources.directory>${sting-utils.basedir}/src/main/resources/org/broadinstitute/sting/utils/pairhmm</pairhmm.resources.directory>
<!-- Per architecture properties, overriden in profiles below -->
<!--
NOTE: cxxflags is for currently only for -fPIC on linux.
For other architectures still have to pass something, until possibly
switching to command line arguments with exec-maven-plugin 1.3
http://jira.codehaus.org/browse/MEXEC-104
-->
<pairhmm.build.architecture>x86_64</pairhmm.build.architecture>
<pairhmm.build.extension>so</pairhmm.build.extension>
</properties>
<build>
<plugins>
<!-- Print out the current architecture, to know which profile is being activated. -->
<!-- Print out the architecture - works only on GNU/Linux x86_64 systems -->
<!-- Neither tested nor expected to work on any other platform. -->
<!-- Requires icc (Intel C++ compiler) to be in your PATH. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
@ -64,7 +56,6 @@
<executable>make</executable>
<workingDirectory>src/main/c++</workingDirectory>
<environmentVariables>
<ARCHITECTURE>${pairhmm.build.architecture}</ARCHITECTURE>
<JRE_HOME>${java.home}</JRE_HOME>
<OUTPUT_DIR>${project.build.directory}</OUTPUT_DIR>
</environmentVariables>
@ -125,21 +116,4 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>linux_x86_64</id>
<activation>
<os>
<name>linux</name>
<arch>amd64</arch>
</os>
</activation>
<properties>
<pairhmm.build.architecture>linux_x86_64</pairhmm.build.architecture>
</properties>
</profile>
</profiles>
</project>

View File

@ -7,8 +7,8 @@ then
pair_hmm_implementation=$1;
fi
#-Djava.library.path is needed if you are using JNI_LOGLESS_CACHING, else not needed
#java -Djava.library.path=${GSA_ROOT_DIR}/public/c++/VectorPairHMM -jar $GSA_ROOT_DIR/target/GenomeAnalysisTK.jar -T HaplotypeCaller \
#-Djava.library.path is needed if you wish to override the default 'packed' library
#java -Djava.library.path=${GSA_ROOT_DIR}/public/VectorPairHMM/src/main/c++ -jar $GSA_ROOT_DIR/target/GenomeAnalysisTK.jar -T HaplotypeCaller \
java -jar $GSA_ROOT_DIR/target/GenomeAnalysisTK.jar -T HaplotypeCaller \
--dbsnp /data/broad/samples/joint_variant_calling/dbSNP/00-All.vcf \
-R /opt/Genomics/ohsu/dnapipeline/humanrefgenome/human_g1k_v37.fasta \