Skip to content

Commit

Permalink
* Enable OpenMP for DNNL and ONNX Runtime on Mac using same library …
Browse files Browse the repository at this point in the history
…name as MKL to prevent conflicts (issue #907)
  • Loading branch information
saudet committed Jul 22, 2020
1 parent 083ec08 commit 3b5fd1b
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 36 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

* Use TBB instead of OpenMP for DNNL to prevent conflicts with MKL, ONNX Runtime, etc ([issue #907](https://github.com/bytedeco/javacpp-presets/issues/907))
* Enable OpenMP for DNNL and ONNX Runtime on Mac using same library name as MKL to prevent conflicts ([issue #907](https://github.com/bytedeco/javacpp-presets/issues/907))
* Fix loading issue with `opencv_ximgproc` ([issue #911](https://github.com/bytedeco/javacpp-presets/issues/911))
* Build LibTIFF after WebP to make sure they link correctly in presets for Leptonica
* Virtualize `IInt8Calibrator` plus subclasses from TensorRT to allow customization ([issue #902](https://github.com/bytedeco/javacpp-presets/issues/902))
Expand Down
76 changes: 45 additions & 31 deletions dnnl/cppbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ if [[ -z "$PLATFORM" ]]; then
exit
fi

export DNNL_CPU_RUNTIME="OMP" # or TBB

TBB_VERSION=2020.3
MKLDNN_VERSION=1.5.1
download https://github.com/oneapi-src/oneTBB/archive/v$TBB_VERSION.tar.gz oneTBB-$TBB_VERSION.tar.bz2
Expand All @@ -27,46 +29,58 @@ sedinplace 's/-fvisibility-inlines-hidden//g' cmake/platform.cmake

case $PLATFORM in
linux-x86_64)
cd ../oneTBB-$TBB_VERSION
make -j $MAKEJ tbb_os=linux
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=linux
cp -a include/* ../include
cp -a build/*release/libtbb.* ../lib
cp -a build/*debug/libtbb_debug.* ../lib
strip ../lib/libtbb.so.*
cd ../oneDNN-$MKLDNN_VERSION
"$CMAKE" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DCMAKE_CXX_FLAGS='-Wl,-rpath,$ORIGIN/' -DARCH_OPT_FLAGS='-Wno-error' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME="TBB" -DTBBROOT=$INSTALL_PATH .
if [[ "$DNNL_CPU_RUNTIME" == "TBB" ]]; then
cd ../oneTBB-$TBB_VERSION
make -j $MAKEJ tbb_os=linux
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=linux
cp -a include/* ../include
cp -a build/*release/libtbb.* ../lib
cp -a build/*debug/libtbb_debug.* ../lib
strip ../lib/libtbb.so.*
cd ../oneDNN-$MKLDNN_VERSION
fi
"$CMAKE" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DCMAKE_CXX_FLAGS='-Wl,-rpath,$ORIGIN/' -DARCH_OPT_FLAGS='-Wno-error' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME=$DNNL_CPU_RUNTIME -DTBBROOT=$INSTALL_PATH .
make -j $MAKEJ
make install/strip
;;
macosx-x86_64)
cd ../oneTBB-$TBB_VERSION
make -j $MAKEJ tbb_os=macos
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=macos
cp -a include/* ../include
cp -a build/*release/libtbb.* ../lib
cp -a build/*debug/libtbb_debug.* ../lib
cd ../oneDNN-$MKLDNN_VERSION
if [[ "$DNNL_CPU_RUNTIME" == "TBB" ]]; then
cd ../oneTBB-$TBB_VERSION
make -j $MAKEJ tbb_os=macos
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=macos
cp -a include/* ../include
cp -a build/*release/libtbb.* ../lib
cp -a build/*debug/libtbb_debug.* ../lib
cd ../oneDNN-$MKLDNN_VERSION
else
mkdir -p ../lib
cp /usr/local/lib/libomp.dylib ../lib/libiomp5.dylib
chmod +w ../lib/libiomp5.dylib
install_name_tool -id @rpath/libiomp5.dylib ../lib/libiomp5.dylib
fi
sedinplace 's/__thread/thread_local/g' src/common/utils.hpp
"$CMAKE" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DARCH_OPT_FLAGS='' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME="TBB" -DTBBROOT=$INSTALL_PATH .
"$CMAKE" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DOpenMP_C_FLAG="-Xclang -fopenmp -I/usr/local/include -L$INSTALL_PATH/lib -liomp5" -DOpenMP_CXX_FLAG="-Xclang -fopenmp -I/usr/local/include -L$INSTALL_PATH/lib -liomp5" -DARCH_OPT_FLAGS='' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME=$DNNL_CPU_RUNTIME -DTBBROOT=$INSTALL_PATH .
make -j $MAKEJ
make install/strip
install_name_tool -change @rpath/libomp.dylib @rpath/libiomp5.dylib ../lib/libdnnl.dylib
;;
windows-x86_64)
cd ../oneTBB-$TBB_VERSION
patch -Np1 < ../../../tbb-windows.patch
make -j $MAKEJ tbb_os=windows runtime=vc14
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=windows runtime=vc14
mkdir -p ../lib/intel64/vc14/
cp -a include/* ../include
cp -a build/*release/tbb.dll ../lib/
cp -a build/*release/tbb.lib ../lib/intel64/vc14/
cp -a build/*debug/tbb_debug.lib ../lib/intel64/vc14/
cd ../oneDNN-$MKLDNN_VERSION
"$CMAKE" -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DARCH_OPT_FLAGS='' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME="TBB" -DTBBROOT=$INSTALL_PATH .
if [[ "$DNNL_CPU_RUNTIME" == "TBB" ]]; then
cd ../oneTBB-$TBB_VERSION
patch -Np1 < ../../../tbb-windows.patch
make -j $MAKEJ tbb_os=windows runtime=vc14
sedinplace 's/release/debug/g' Makefile
make -j $MAKEJ tbb_os=windows runtime=vc14
mkdir -p ../lib/intel64/vc14/
cp -a include/* ../include
cp -a build/*release/tbb.dll ../lib/
cp -a build/*release/tbb.lib ../lib/intel64/vc14/
cp -a build/*debug/tbb_debug.lib ../lib/intel64/vc14/
cd ../oneDNN-$MKLDNN_VERSION
fi
"$CMAKE" -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_INSTALL_LIBDIR="lib" -DARCH_OPT_FLAGS='' -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_BUILD_TESTS=OFF -DDNNL_CPU_RUNTIME=$DNNL_CPU_RUNTIME -DTBBROOT=$INSTALL_PATH .
MSBuild.exe INSTALL.vcxproj //p:Configuration=Release //p:CL_MPCount=$MAKEJ
;;
*)
Expand Down
4 changes: 2 additions & 2 deletions dnnl/src/gen/java/org/bytedeco/dnnl/global/dnnl.java
Original file line number Diff line number Diff line change
Expand Up @@ -1822,10 +1822,10 @@ public class dnnl extends org.bytedeco.dnnl.presets.dnnl {
// clang-format off

// oneDNN CPU threading runtime
public static final long DNNL_CPU_THREADING_RUNTIME = DNNL_RUNTIME_TBB;
public static final long DNNL_CPU_THREADING_RUNTIME = DNNL_RUNTIME_OMP;

// oneDNN CPU engine runtime
public static final long DNNL_CPU_RUNTIME = DNNL_RUNTIME_TBB;
public static final long DNNL_CPU_RUNTIME = DNNL_RUNTIME_OMP;

// oneDNN GPU engine runtime
public static final long DNNL_GPU_RUNTIME = DNNL_RUNTIME_NONE;
Expand Down
2 changes: 1 addition & 1 deletion dnnl/src/main/java/org/bytedeco/dnnl/presets/dnnl.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
compiler = "cpp11",
define = {"GENERIC_EXCEPTION_CLASS dnnl::error", "GENERIC_EXCEPTION_TOSTRING toStdString().c_str()"},
include = {"dnnl_types.h", "dnnl_config.h", /*"dnnl_debug.h",*/ "dnnl_version.h", "dnnl.h", "dnnl.hpp"},
link = "dnnl@.1", preload = "tbb@.2", resource = {"include", "lib"}
link = "dnnl@.1", preload = {"gomp@.1", "iomp5", "omp", "tbb@.2"}, resource = {"include", "lib"}
),
},
target = "org.bytedeco.dnnl",
Expand Down
9 changes: 8 additions & 1 deletion onnxruntime/cppbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,15 @@ cp -r include/* ../include
cp -r orttraining/orttraining/models/runner/training_runner.h ../include
cp -r orttraining/orttraining/models/runner/training_util.h ../include
cp -r java/src/main/java/* ../java
cp ../build/Release/lib* ../lib || true
cp -a ../build/Release/lib* ../lib || true
cp ../build/Release/Release/onnxruntime.dll ../bin || true
cp ../build/Release/Release/onnxruntime.lib ../lib || true

# fix library with the same name for OpenMP as MKL on Mac
case $PLATFORM in
macosx-*)
install_name_tool -change @rpath/libomp.dylib @rpath/libiomp5.dylib ../lib/libonnxruntime.dylib
;;
esac

cd ../..

0 comments on commit 3b5fd1b

Please sign in to comment.