xmake新增对Cuda代码编译支持

简介: 最近研究了下NVIDIA Cuda Toolkit的编译环境,并且在xmake 2.1.10开发版中,新增了对cuda编译环境的支持,可以直接编译*.cu代码。

最近研究了下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安装包

cuda_test.gif

原文出处:http://tboox.org/cn/2018/03/09/support-cuda/

目录
相关文章
|
4月前
|
jenkins 持续交付 数据安全/隐私保护
Docker 打包镜像 | 发布至阿里云镜像仓库
Docker 打包镜像 | 发布至阿里云镜像仓库
437 1
|
7月前
|
弹性计算 虚拟化 异构计算
阿里云GPU服务器详细介绍(Nvidia M40/P100/P4/V100)
阿里云GPU服务器详细介绍(Nvidia M40/P100/P4/V100),阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡
1338 0
|
机器学习/深度学习 人工智能 PyTorch
|
9月前
|
算法 C++ 容器
C/C++趣味程序设计百例(71~80)
C/C++趣味程序设计百例(71~80)
372 0
|
Linux 编译器 Shell
【Linux】【编译】编译及Makefile的调试手段和技巧
【Linux】【编译】编译及Makefile的调试手段和技巧
490 0
|
编解码 Ubuntu 前端开发
我的NVIDIA开发者之旅——作为一名初学者,我是如何开启 NVIDIA Jetson Nano 开发的
在本文中,我将展示如何从一个初学者角度,使用 NVIDIA Jetson Nano 。 你也可以参考官方教程。 如果你想跟着我一起做,那么接下来的内容比会比较花费时间,需要你耐心跟着往下做。😎
831 0
我的NVIDIA开发者之旅——作为一名初学者,我是如何开启 NVIDIA Jetson Nano 开发的
|
开发者 索引 Python
Python 中 requirements.txt 与 setup.py 的对比
Python 中 requirements.txt 与 setup.py 的对比
552 0
Python 中 requirements.txt 与 setup.py 的对比
|
Linux Docker 容器
centos7安装docker
centos7安装docker 使用阿里云提供的dnf快速安装docker服务(补充centos8部分)
1006 1
|
设计模式 架构师 Java
【干货储备】C++性能优化
做C++,当然不能不关心性能。但是,什么时候开始关心性能优化?2020全球C++及系统软件技术大会中《C++性能调优纵横谈》的演讲,现场座无虚席,好评连连。下面让演讲者,Boolan首席软件咨询师吴咏炜老师为大家揭秘。
【干货储备】C++性能优化
|
中间件 数据库 程序员
阿里云中间件是什么-阿里云中间件介绍
这其实是一个比较虚的概念。广义的中间件范围很广。起沟通作用的都可以认为是中间件。甚至ODBC这样的东西你也可以认为是中间件。   使用了中间件之后,以前直接连接的前台应用程序和数据库之前就多了个中间件,现在前台程序把请求发给中间件,中间件再把请求发给数据库,数据库处理结束之后把结果返回到中间件,中间件再把结果送回给前台。
4000 1