Commit 6f6e2bb0 by liyinqiao

Support CMake 3.19 and fix some CMake bugs. Note that CUDA_ROOT variable in…

Support CMake 3.19 and fix some CMake bugs. Note that CUDA_ROOT variable in CMake is modified as CUDA_TOOLKIT_ROOT. You can find this update in the README.
parent faf82297
...@@ -25,19 +25,19 @@ option(USE_MKL "Use MKL" OFF) ...@@ -25,19 +25,19 @@ option(USE_MKL "Use MKL" OFF)
option(USE_OPENBLAS "Use OpenBLAS" OFF) option(USE_OPENBLAS "Use OpenBLAS" OFF)
option(GEN_DLL "Generate Dynamic Link Library" OFF) option(GEN_DLL "Generate Dynamic Link Library" OFF)
# If set USE_CUDA ON, please modify CUDA_ROOT below. # If set USE_CUDA ON, please modify CUDA_TOOLKIT_ROOT below.
# If set USE_MKL ON, please modify the INTEL_ROOT below. # If set USE_MKL ON, please modify the INTEL_ROOT below.
# If set USE_OPENBLAS ON, please modify the OPENBLAS_ROOT below. # If set USE_OPENBLAS ON, please modify the OPENBLAS_ROOT below.
if (USE_CUDA) if (USE_CUDA)
if(NOT EXISTS ${CUDA_ROOT}) if(NOT EXISTS ${CUDA_TOOLKIT_ROOT})
if(WIN32) if(WIN32)
set(CUDA_ROOT "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2") set(CUDA_TOOLKIT_ROOT "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2")
else() else()
set(CUDA_ROOT "/usr/local/cuda-9.2") set(CUDA_TOOLKIT_ROOT "/usr/local/cuda-9.2")
endif() endif()
endif() endif()
set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_ROOT}) set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT})
message(STATUS "CUDA_ROOT: ${CUDA_ROOT}") message(STATUS "CUDA_TOOLKIT_ROOT: ${CUDA_TOOLKIT_ROOT}")
endif() endif()
if(USE_MKL) if(USE_MKL)
if(NOT DEFINED INTEL_ROOT) if(NOT DEFINED INTEL_ROOT)
...@@ -128,12 +128,13 @@ if(USE_CUDA) ...@@ -128,12 +128,13 @@ if(USE_CUDA)
if(WIN32) if(WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-maxrregcount=0 -m64 -Wno-deprecated-gpu-targets -use_fast_math") set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-maxrregcount=0 -Wno-deprecated-gpu-targets -use_fast_math")
string(REPLACE -m32 -m64 CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${ARCH_FLAGS}) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${ARCH_FLAGS})
set(CMAKE_POLICY_DEFAULT_CMP0028 NEW) set(CMAKE_POLICY_DEFAULT_CMP0028 NEW)
link_directories("${CUDA_ROOT}/lib/x64") link_directories("${CUDA_TOOLKIT_ROOT}/lib/x64")
include_directories("${CUDA_ROOT}/include") include_directories("${CUDA_TOOLKIT_ROOT}/include")
set(CUDA_LIB_DIR "${CUDA_ROOT}/lib/x64/") set(CUDA_LIB_DIR "${CUDA_TOOLKIT_ROOT}/lib/x64/")
set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}cublas.lib") set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}cublas.lib")
if(CUDA_VERSION_MAJOR EQUAL 11) if(CUDA_VERSION_MAJOR EQUAL 11)
set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}cublasLt.lib") set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}cublasLt.lib")
...@@ -146,9 +147,9 @@ if(USE_CUDA) ...@@ -146,9 +147,9 @@ if(USE_CUDA)
set(CMAKE_CXX_FLAGS "-fPIC -msse4.2 -w -march=native -Wno-enum-compare -Wno-sign-compare -Wno-format -Wno-dev -O3 -DNDEBUG -rdynamic") set(CMAKE_CXX_FLAGS "-fPIC -msse4.2 -w -march=native -Wno-enum-compare -Wno-sign-compare -Wno-format -Wno-dev -O3 -DNDEBUG -rdynamic")
set(CUDA_NVCC_FLAGS "-Xcompiler -fPIC -maxrregcount=0 --disable-warnings -use_fast_math -DUSE_CUDA -Wno-deprecated-gpu-targets -std=c++11") set(CUDA_NVCC_FLAGS "-Xcompiler -fPIC -maxrregcount=0 --disable-warnings -use_fast_math -DUSE_CUDA -Wno-deprecated-gpu-targets -std=c++11")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${ARCH_FLAGS}) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${ARCH_FLAGS})
link_directories("${CUDA_ROOT}/lib64") link_directories("${CUDA_TOOLKIT_ROOT}/lib64")
include_directories("${CUDA_ROOT}/include") include_directories("${CUDA_TOOLKIT_ROOT}/include")
set(CUDA_LIB_DIR "${CUDA_ROOT}/lib64/") set(CUDA_LIB_DIR "${CUDA_TOOLKIT_ROOT}/lib64/")
set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}libcublas_static.a") set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}libcublas_static.a")
if(CUDA_VERSION_MAJOR EQUAL 11) if(CUDA_VERSION_MAJOR EQUAL 11)
set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}libcublasLt_static.a") set(CUDA_LIB_PATH ${CUDA_LIB_PATH} "${CUDA_LIB_DIR}libcublasLt_static.a")
......
...@@ -39,14 +39,14 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪 ...@@ -39,14 +39,14 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪
##### CMake方式(Visual Studio) ##### CMake方式(Visual Studio)
对于WIndows平台的NiuTensor工具包安装,这里可以使用CMake工具自动生成Visual Studio项目(需要用户提前安装CMake工具以及Visual Studio集成开发环境),操作步骤如下: 对于Windows平台的NiuTensor工具包安装,这里可以使用CMake工具自动生成Visual Studio项目(需要用户提前安装CMake工具以及Visual Studio集成开发环境),操作步骤如下:
- 在工具包根目录新建目录以保存生成的Visual Studio项目文件(如建立build目录)。 - 在工具包根目录新建目录以保存生成的Visual Studio项目文件(如建立build目录)。
- 在项目根目录打开Windows平台的命令行工具(如PowerShell),执行`cd build`命令进入新建的build目录。 - 在项目根目录打开Windows平台的命令行工具(如PowerShell),执行`cd build`命令进入新建的build目录。
- 执行CMake命令对Visual Studio项目进行生成(如果 visual studio 版本低于 2019,则在使用下列命令的时候需额外加上`-A x64`的CMake参数),如计划生成动态链接库,则仅需在命令中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。 - 执行CMake命令对Visual Studio项目进行生成(如果 visual studio 版本低于 2019,则在使用下列命令的时候需额外加上`-A x64`的CMake参数),如计划生成动态链接库,则仅需在命令中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。
- 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_MKL=ON`参数,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`cmake -DUSE_MKL=ON -DINTEL_ROOT='C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2020.2.254/windows' ..` - 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_MKL=ON`参数,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`cmake -DUSE_MKL=ON -DINTEL_ROOT='C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2020.2.254/windows' ..`
- 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_OPENBLAS=ON`参数,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='C:/Program Files/OpenBLAS' ..` - 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_OPENBLAS=ON`参数,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='C:/Program Files/OpenBLAS' ..`
- 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_CUDA=ON`参数,并通过`-DCUDA_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`cmake -DUSE_CUDA=ON -DCUDA_ROOT='C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2' -DGPU_ARCH=P ..`。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。 - 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_CUDA=ON`参数,并通过`-DCUDA_TOOLKIT_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`cmake -DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2' -DGPU_ARCH=P ..`。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。
- 执行成功将显示`Build files have been written to:...` - 执行成功将显示`Build files have been written to:...`
- 打开build目录中的NiuTensor.sln文件即可通过Visual Studio打开NiuTensor项目。 - 打开build目录中的NiuTensor.sln文件即可通过Visual Studio打开NiuTensor项目。
- 打开后在解决方案管理器中选中NiuTensor,右键将其设为启动项目即可开始使用。 - 打开后在解决方案管理器中选中NiuTensor,右键将其设为启动项目即可开始使用。
...@@ -67,7 +67,7 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪 ...@@ -67,7 +67,7 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪
- 打开CLion首选项,点击“构建,执行,部署”选项卡中的CMake,在“CMake选项”中进行设置,设置完成后CLion将自动使用CMake对项目进行构建,如计划生成动态链接库,则仅需在在“CMake选项”中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。 - 打开CLion首选项,点击“构建,执行,部署”选项卡中的CMake,在“CMake选项”中进行设置,设置完成后CLion将自动使用CMake对项目进行构建,如计划生成动态链接库,则仅需在在“CMake选项”中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。
- 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_MKL=ON`,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`-DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux'` - 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_MKL=ON`,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`-DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux'`
- 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_OPENBLAS=ON`,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`-DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS'` - 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_OPENBLAS=ON`,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`-DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS'`
- 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_CUDA=ON`,并通过`-DCUDA_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`-DUSE_CUDA=ON -DCUDA_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P `。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。 - 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在“CMake选项”中填入`-DUSE_CUDA=ON`,并通过`-DCUDA_TOOLKIT_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`-DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P `。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。
##### CMake方式(命令行) ##### CMake方式(命令行)
...@@ -78,7 +78,7 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪 ...@@ -78,7 +78,7 @@ NiuTensor蟾・蜈キ蛹庄莉・蝨ィWindows縲´inux莉・蜿確acOS邇ッ蠅ク玖ソ幄。悟ョ芽」シ梧髪
- 执行CMake命令对项目进行生成,如计划生成动态链接库,则仅需在命令中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。 - 执行CMake命令对项目进行生成,如计划生成动态链接库,则仅需在命令中额外加上`-DGEN_DLL=ON`的CMake参数即可,否则默认生成可执行程序。
- 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_MKL=ON`参数,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`cmake -DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux' ..` - 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_MKL=ON`参数,并通过`-DINTEL_ROOT='/intel/root/path'`指定MKL库(Intel工具包)的安装路径。如`cmake -DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux' ..`
- 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_OPENBLAS=ON`参数,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS' ..` - 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_OPENBLAS=ON`参数,并通过`-DOPENBLAS_ROOT='/openblas/root/path'`指定OpenBLAS库的安装路径。如`cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS' ..`
- 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_CUDA=ON`参数,并通过`-DCUDA_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`cmake -DUSE_CUDA=ON -DCUDA_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P ..`。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。 - 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用`-DUSE_CUDA=ON`参数,并通过`-DCUDA_TOOLKIT_ROOT='/cuda/root/path'`指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如`cmake -DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P ..`。如需在GPU设备上使用半精度浮点数进行运算,需在启用`-DUSE_CUDA=ON`参数的同时启用`-USE_HALF_PRECISION=ON`参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考[NVIDIA GPU设备信息](https://developer.nvidia.com/cuda-gpus)进行查询)。
- 执行成功将显示`Build files have been written to:...`并在该目录下生成Makefile文件。 - 执行成功将显示`Build files have been written to:...`并在该目录下生成Makefile文件。
- 执行`make -j`命令对NiuTensor项目进行编译,执行成功将显示`Built target NiuTensor`,安装完毕。 - 执行`make -j`命令对NiuTensor项目进行编译,执行成功将显示`Built target NiuTensor`,安装完毕。
...@@ -137,4 +137,4 @@ NiuTensor蠑驥剰ョ。邂怜コ鍋罰荳懷圏螟ァ蟄ヲ閾ェ辟カ隸ュ險螟炊螳樣ェ悟ョ、蟆冗央蠑貅仙 ...@@ -137,4 +137,4 @@ NiuTensor蠑驥剰ョ。邂怜コ鍋罰荳懷圏螟ァ蟄ヲ閾ェ辟カ隸ュ險螟炊螳樣ェ悟ョ、蟆冗央蠑貅仙
## 更新版本 ## 更新版本
NiuTensor version 0.3.5 - 2021年2月6日 NiuTensor version 0.3.6 - 2021年3月2日
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论