xmake新增对Cuda代码编译支持
最近研究了下NVIDIA Cuda Toolkit的编译环境,并且在xmake 2.1.10开发版中,新增了对cuda编译环境的支持,可以直接编译*.cu
代码。
关于Cuda Toolkit相关说明以及安装文档,可参考官方文档:CUDA Toolkit Documentation。
下载安装好Cuda SDK后,在macosx上回默认安装到/Developer/NVIDIA/CUDA-x.x
目录下,Windows上可以通过CUDA_PATH
的环境变量找到对应的SDK目录,而
Linux下默认会安装到/usr/local/cuda
目录下。
xmake在执行$ xmake
命令编译*.cu
代码的时候,会尝试探测这些默认的安装目录,然后尝试调用nvcc编译器直接编译cuda程序,大部分情况下只需要执行:
$ xmake
创建和编译Cuda工程
我之前编译之前,我们可以通过xmake创建一个空的cuda工程,例如:
$ xmake create -l cuda test
$ cd test
$ xmake
通过-l
参数指定创建一个cuda代码工程,工程名为test,执行输出如下:
[00%]: ccache compiling.release src/main.cu
[100%]: linking.release test
我们也可以尝试直接运行这个cuda程序:
$ xmake run
接着我们来看下,这个cuda工程的xmake.lua
文件:
-- define target
target("test")
-- set kind
set_kind("binary")
-- add include directories
add_includedirs("inc")
-- add files
add_files("src/*.cu")
-- generate SASS code for each SM architecture
for _, sm in ipairs({"30", "35", "37", "50", "52", "60", "61", "70"}) do
add_cuflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
add_ldflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
end
-- generate PTX code from the highest SM architecture to guarantee forward-compatibility
sm = "70"
add_cuflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
add_ldflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
里面大部分跟C/C++的工程描述类似,唯一的区别就是通过add_cuflags
设置了一些cuda代码特有的编译选项,这部分配置根据用户的需求,可自己调整。
关于add_cuflags
的更多说明,可阅读xmake的官方文档。
Cuda编译环境的配置
默认情况下,xmake都能成功检测到系统中安装的Cuda SDK环境,用户不需要做额外的配置操作,当然如果遇到检测不到的情况,用户也可以手动指定Cuda SDK的路径:
$ xmake f --cuda_dir=/usr/local/cuda
$ xmake
来告诉xmake,你当前的Cuda SDK的安装目录在哪里。
如果想要测试xmake对当前cuda环境的探测支持,可以直接运行:
$ xmake l detect.sdks.find_cuda_toolchains
{
linkdirs =
{
/Developer/NVIDIA/CUDA-9.1/lib
}
, bindir = /Developer/NVIDIA/CUDA-9.1/bin
, includedirs =
{
/Developer/NVIDIA/CUDA-9.1/include
}
, cudadir = /Developer/NVIDIA/CUDA-9.1
}
来测试检测情况,甚至可以帮忙贡献相关检测代码find_cuda_toolchains.lua来改进xmake的检测过程。
其他说明
注:目前对cuda的支持刚刚完成,还没正式发版,更多关于xmake对cuda的支持情况和进展,见:issues #158。
如果要试用此特性,可下载安装最新master版本,或者下载windows 2.1.10-dev安装包。
原文出处:http://tboox.org/cn/2018/03/09/support-cuda/
xmake新增对Cuda代码编译支持的更多相关文章
- xmake新增对WDK驱动编译环境支持
xmake v2.2.1新版本现已支持WDK驱动编译环境,我们可以直接在系统原生cmd终端下,执行xmake进行驱动编译,甚至配合vscode, sublime text, IDEA等编辑器+xmak ...
- Android Studio增加NDK代码编译支持--Mac环境
Android的APP开发基本都是使用Java或者跨平台框架进行开发的,对于很多APP来说已经足够了,但是,对于提供功能给外部使用或者性能要求很高的需求下,如图像处理等,可能会需要C/C++库的支持, ...
- xmake新增智能代码扫描编译模式
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.tx ...
- xmake v2.5.7 发布,包依赖锁定和 Vala/Metal 语言编译支持
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...
- xmake v2.6.1 发布,使用 Lua5.4 运行时,Rust 和 C++ 混合编译支持
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...
- CUDA 动态编译(NVRTC)简记
在linux上用sublime text 3上写完CUDA代码和c++代码后,想用code::blocks去一并编译,就像visual studio那样一键编译运行,但发现在code::blocks上 ...
- Clang调试CUDA代码
Clang调试CUDA代码全过程 有空再进行编辑,最近有点忙,抱歉 使用的llvm4.0+Clang4.0的版本,依据的是上次发的llvm4.0和clang4.0源码安装的教程https://www. ...
- CUDA代码的高亮设置
以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 语法高亮除了看起来舒服之外,还可以使用F11寻找函数.变量定义,输入函数的时候也会有相应的提 ...
- java-cef系列视频第一集:从官方代码编译
本视频介绍了如何从官方给出步骤编译java-cef代码,生成可运行可移植的发行版. 值得一提的是:截至2016-09-24java-cef代码编译方式有所改变,读者请自行查看bitbucket上关于编 ...
随机推荐
- 远程连接工具rdcman
介绍一个远程连接的工具RDCMan.RDCMan全称Remote Desktop Connection Manager(多远程桌面管理)是微软Windows Live体验团队的主要开发者 Julian ...
- 【30分钟学完】canvas动画|游戏基础(extra1):颜色那些事
前言 本篇主要讲解关于计算机颜色系统的概念,后续结合一些canvas的应用.因为是"你不知道也没关系"的边缘知识,所以作为本系列教程的扩展,没有兴趣的同学可以跳过. 开始我们万紫千 ...
- vue 中一些API 或属性的常见用法
prop 官方解释:Prop 是你可以在组件上注册的一些自定义特性.当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性. 通俗点讲就是:prop是父组件用来传递数据的一个自定义 ...
- spark的accumulator值保存在哪里?
答案:保存在driver端.因此需要对收集的信息的规模要加以控制,不宜过大.避免 driver端的outofmemory问题!!!
- ftp CentOS7安装
1.安装ftp服务yum install vsftpd 2.修改ftp配置文件(/etc/vsftpd/vsftpd.conf)ascii_upload_enable=YESascii_downloa ...
- Educational Codeforces round 78 A、B
链接:https://codeforces.com/contest/1278 A:Shuffle Hashing 题意:对于一个字符串p可以执行一个"hash"操作,首先将p内的元 ...
- mfc static控件 视频播放 闪屏问题 解决方案
方案1: 我昨天刚在csdn上解决了这个问题,不是双缓冲和WS_CLIPCHILDREN还有背景擦出什么的问题,就是在你重画的时候要去掉这些控件(按钮什么的)区域, 闪屏是因为窗口大小发生改变时,由于 ...
- DNS预读取 dns-prefetch 提升页面载入速度
DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少DNS的请求次数,另一个就是进行DNS预获取 . DNS 作为互联网的基础协议 ...
- mysql FIRST()函数 语法
mysql FIRST()函数 语法 作用:返回指定的字段中第一个记录的值.直线电机选型 语法:SELECT FIRST(column_name) FROM table_name 注释:可使用 ORD ...
- yarn与npm对比
https://www.jianshu.com/p/254794d5e741(copy)