zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    排序
    自动生成存储过程的工具
    感悟javascript
    VS.net 2008 beta2 新功能
    北极光合伙人邓锋:要别人跳火坑,你自己先跳
    [转]驱动开发中应该注意的事项
    [转]CryptoAPI的应用(一)概述以及初始化模块
    [转]强制重启N种法
    Different ways of handling IRPs
    [转]分层驱动模型中IRP的传递与完成
  • 原文地址:https://www.cnblogs.com/tboox/p/12014647.html
Copyright © 2011-2022 走看看