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上关于编 ...
随机推荐
- webpack多页应用
本文主要讲了webpack怎么搭建多页应用,熟悉下webpack的基本用法. 新建文件夹,目录结构如下: 然后 cd webpack-test npm init(根目录下创建了一个pakage.jso ...
- linux-ntp-10
Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com windows类: time.pool.aliyun.com s1a.time.edu.cn 北京邮电大学 s ...
- SPOJ D-query && HDU 3333 Turing Tree (线段树 && 区间不相同数个数or和 && 离线处理)
题意 : 给出一段n个数的序列,接下来给出m个询问,询问的内容SPOJ是(L, R)这个区间内不同的数的个数,HDU是不同数的和 分析 : 一个经典的问题,思路是将所有问询区间存起来,然后按右端点排序 ...
- const与#define的区别
1.const (1)为什么需要const成员函数? C中常用:“ #define 变量名 变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于 ...
- ModelSerializer 使用知识点_serializer.save(project=obj) #外键一定要作为实例传入save函数,否则无法新增成功
1.有两个模型如下 A.project class Project(models.Model): """ 项目表 """ id = mode ...
- css中如何使用border属性与display属性
border属性介绍 border属性设置元素边框. 边框3个要素如:粗细.线型.颜色. 边框线型属性值说明表如: 属性指 描述 none 定义无边框. hidden 与 "none&quo ...
- How to Create a Basic Plugin 如何写一个基础的jQuery插件
How to Create a Basic Plugin Sometimes you want to make a piece of functionality available throughou ...
- layui table指定某一行样式
1.想指定layui table中某一行的样式,找了这个资源可行.转自: https://blog.csdn.net/weixin_44729896/article/details/100524824 ...
- Flask- celery (芹菜)
一.什么是Celery? 中文名翻译为芹菜,是flask中处理异步定时周期任务的第三方组件 二.基本结构 1.需要跑的任务代码app 2.用管道broker与用于存储任务(就是个缓存) 工具一般用r ...
- ObjectDataSource.ObjectCreating 事件
ObjectCreating 事件在创建由 TypeName 属性标识的对象之前发生. 命名空间:System.Web.UI.WebControls程序集:System.Web(在 system.we ...