CUDA简介
CUDA(Compute Unified Device Architecture,统一计算架构)是NVIDIA所推出的GPGPU框架。尤其是在进行并行运算时,能够在极大程度上提升运算速度。现在我们常使用的深度学习框架底层也都是通过CUDA进行加速的。在基于物理模拟中,很多在CPU上需要耗费大量时间才能计算出的结果,在CUDA上却可以做到实时计算。
CUDA项目初始化
要初始化项目,环境配置一般来说是比较耗费时间并且需要查阅一定资料的。因而为了便捷地初始化CUDA项目,我们使用cmake便可以轻松达到这个目的。
当然,要使用CUDA必须先上Nvida的官网下载CUDA Toolkit。
下载并安装完CUDA Toolkit后只需要使用cmake来自动化配置环境便可以了。
本文提供一个CUDA项目初始化的模板,可以通过Github下载:cuda_project_template。
具体的使用方法参考这个Github的介绍就可以了。
CUDA项目初始化常见问题
以CUDA为例,在构建一个新的项目时,普遍CUDA部分的计算会独立作为一个部分并生成静态链接库。而主程序或者其他核心部分计算要调用CUDA时需要链接到这个CUDA的静态链接库。而这其中最常见的问题就是:
value MT_StaticRelease' doesn't match value 'MTd_StaticDebug'
或者是
value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'
再通过搜索相关问题的解决办法后,我将这两种方法的解决办法结合了一下,以下的cmake部分配置可以解决上述问题:
add_compile_options(
$<$<CONFIG:>:/MT>
$<$<CONFIG:Debug>:/MTd>
$<$<CONFIG:Release>:/MT>
)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
具体的CMakeLists.txt可以参考上述Github中的cmake文件:CMakeLists.txt
关于解决C4819警告的方案
在CUDA项目编译过程中经常会出现如下警告:
warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss
最简单便捷的方式就是将此警告无视,在cmake中我们可以如下设置:
set_target_properties(
${PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "-Xcompiler \"/wd4819\""
)