Allow linking against vcomp on Windows (#54132)

Summary:
Fixes https://github.com/pytorch/pytorch/issues/54054

Pull Request resolved: https://github.com/pytorch/pytorch/pull/54132

Reviewed By: zou3519

Differential Revision: D27181524

Pulled By: malfet

fbshipit-source-id: b79b34afb7edcc594d9b5907c5a7505b9cc5683b
This commit is contained in:
Chester Liu
2021-03-19 14:28:56 -07:00
committed by Facebook GitHub Bot
parent 6f7a5a47af
commit 6a4d2c61d5
2 changed files with 17 additions and 5 deletions

View File

@ -238,6 +238,8 @@ Build with CPU
It's fairly easy to build with CPU. Visual Studio 2019 version 16.7.6 (MSVC toolchain version 14.27) or higher is recommended.
Note on OpenMP: The desired OpenMP implementation is Intel OpenMP (iomp). In order to link against iomp, you'll need to manually download the library and set up the buliding environment by tweaking `CMAKE_INCLUDE_PATH` and `LIB`. The instruction [here](https://github.com/pytorch/pytorch/blob/master/docs/source/notes/windows.rst#building-from-source) is an example for setting up both MKL and Intel OpenMP. Without these configuraions for CMake, Microsoft Visual C OpenMP runtime (vcomp) will be used.
Build with CUDA
[NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm) is needed to build Pytorch with CUDA.

View File

@ -86,9 +86,15 @@ function(_OPENMP_FLAG_CANDIDATES LANG)
set(OMP_FLAG_GNU "-fopenmp")
set(OMP_FLAG_Clang "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp")
# AppleClang may need a header file, search for omp.h with hints to brew
# default include dir
find_path(__header_dir "omp.h" HINTS "/usr/local/include")
if(WIN32)
# Prefer Intel OpenMP header which can be provided by CMAKE_INCLUDE_PATH.
# Note that CMAKE_INCLUDE_PATH is searched before CMAKE_SYSTEM_INCLUDE_PATH (MSVC path in this case)
find_path(__header_dir "omp.h")
else()
# AppleClang may need a header file, search for omp.h with hints to brew
# default include dir
find_path(__header_dir "omp.h" HINTS "/usr/local/include")
endif()
set(OMP_FLAG_AppleClang "-Xpreprocessor -fopenmp" "-Xpreprocessor -fopenmp -I${__header_dir}")
set(OMP_FLAG_HP "+Oopenmp")
@ -101,7 +107,12 @@ function(_OPENMP_FLAG_CANDIDATES LANG)
set(OMP_FLAG_Intel "-qopenmp")
endif()
set(OMP_FLAG_MIPSpro "-mp")
set(OMP_FLAG_MSVC "-openmp:experimental" "-openmp:experimental -I${__header_dir}" "-openmp" "-openmp -I${__header_dir}")
if(__header_dir MATCHES ".*Microsoft Visual Studio.*")
# MSVC header. No need to pass it as additional include.
set(OMP_FLAG_MSVC "-openmp:experimental" "-openmp")
else()
set(OMP_FLAG_MSVC "-openmp:experimental -I${__header_dir}" "-openmp -I${__header_dir}")
endif()
set(OMP_FLAG_PathScale "-openmp")
set(OMP_FLAG_NAG "-openmp")
set(OMP_FLAG_Absoft "-openmp")
@ -132,7 +143,6 @@ set(OpenMP_C_CXX_TEST_SOURCE
int main(void) {
#ifdef _OPENMP
omp_get_max_threads();
omp_get_level();
return 0;
#else
breaks_on_purpose