在linux上用sublime text 3上写完CUDA代码和c++代码后,想用code::blocks去一并编译,就像visual studio那样一键编译运行,但发现在code::blocks上设定自定义编译器为nvcc时比较麻烦,所以想到了用NVRTC。

NVRTC中的RTC是runtime compile的意思,在visual studio(VS)里的一键编译其实是vs编译器替你干了很多底层的脏活,但到了linux,这些脏活就都得程序员来做了。。。

一、这些脏活都是什么呢?

1)vs把你的所有代码整理起来,并分类,用于在GPU里执行的device设备端代码,送往nvcc.exe里进行编译;用于在CPU里执行的host端代码,用vs自家的cl.exe编译

2)在最后的链接过程,vs把上面两个部分编译出的二进制代码融在一起成为一个exe。

二、那NVRTC能干啥呢?

1)NVRTC可以将原始的c++语法的CUDA代码,编译成PTX文件,PTX就是Parallel Thread eXecution的缩写,一个PTX文件其实就跟txt差不多,用windows自带的记事本就能打开,打开之后会看到一堆类似汇编语法格式的东西,这个就是NVRTC根据我们的CUDA源文件编译出的能在GPU上执行的代码,但是PTX代码和真正的GPU汇编还是有轻微的区别,但是区别很小,程序员可以通过查看编译出的PTX文件,窥知NVRTC编译器在编译的时候为我们的源码做了什么优化(举个简单的例子:比如浮点数a,b,c,当计算a*b+c这种线性运算的时候,一般都是先算a*b,再把结果与c相加,但是在PTX代码里会发现编译器直接用一个fmad指令,一次用硬件完成了浮点数的乘加操作)。

2)将上述过程产生的PTX文件,通过N卡driver API送入显卡直接执行。

三、为啥要用NVRTC?上面的NVCC不就够用了吗?

1)因为在linux里设定NVCC编译环境比较麻烦,有坑,而通过上面的对于NVRTC的叙述,我们发现整个编译过程如果利用NVRTC的话会很简单,坑少。

2)而且不用我们在编译器里设定NVCC编译环境了。

四、前提条件:

1)首先,要装一块N卡。(这句好像是废话......)

2)为这块显卡装合适的驱动。

(PS:linux装显卡驱动很麻烦,最好是一装完系统就装显卡驱动,然后再安装其它的那些软件,我一开始没经验,装了ubuntu后直接开装一堆软件,到最后想起要装显卡驱动的时候各种报错,实在没办法了只能重装系统,重装系统的时候选择不安装默认的nouveau显卡驱动。还有就是显卡驱动不要装太新版本的,装完一遍之后更新的时候也要小心,以免搞坏了连登录界面都进不去......)

3)装完显卡驱动后,再安装CUDA Toolkit,这里的坑没有上面多,但也要小心。

五、过程:

1)在一般的文本编辑器上写完c++和配套的CUDA代码后,利用NVRTC将GPU代码编译成PTX。

2)利用GCC或者MinGW(其它的也行)把在CPU端的代码编译成obj,链接成exe。(CPU端的代码里自然就会有利用driver API加载PTX代码的东西,以及一些kernel核函数调用时参数设置的东西)

3)测试你的程序是不是运行正常。

六、结果:

我在自己的机器上试了试上面的过程,能跑通,而且经上面的步骤,GPU代码也支持CUDA纹理对象(cuda_texture_object),可以对cudaTextureObject_t类型的对象进行纹理寻址。

七、存在的疑问:

1)六中,我测试了一下随机显存访问的性能,一个利用纹理对象,另一个利用平时的显存访问,结果显存访问比纹理拾取反而要快一倍(前者9us,后者16us),暂时不知道这是为啥。

2)网上有人说利用NVRTC编译出的PTX代码要比用NVCC编译器编译出的代码效率低,但是官方文档上是这么写的:

  上面图片的意思是说NVRTC可以提供静态编译(NVCC)所不能提供的代码优化,也就是说官网上暗示NVRTC要比NVCC要快。

  具体哪个对我现在暂时没做过实验。

CUDA 动态编译(NVRTC)简记的更多相关文章

  1. (转载)JAVA动态编译--字节代码的操纵

    在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...

  2. ZKWeb网站框架的动态编译的实现原理

    ZKWeb网站框架是一个自主开发的网页框架,实现了动态插件和自动编译功能. ZKWeb把一个文件夹当成是一个插件,无需使用csproj或xproj等形式的项目文件管理,并且支持修改插件代码后自动重新编 ...

  3. java动态编译笔记

    1 前言 Java的动态编译知识,真真在实际开发中并不是经常遇到.但是学习java动态编译有助于我们从更深一层次去了解java.对掌握jdk的动态代理模式,这样我们在学习其他一些开源框架的时候就能够知 ...

  4. c#动态编译并动态生成dll

    /// <summary> /// 动态编译并执行代码 /// </summary> /// <param name="code">代码< ...

  5. Java动态编译

    程序产生过程 下图展示了从源代码到可运行程序的过程,正常情况下先编译(明文源码到字节码),后执行(JVM加载字节码,获得类模板,实例化,方法使用).本文来探索下当程序已经开始执行,但在.class甚至 ...

  6. Java_动态编译总结

    不多说直接上代码: 动态编译的主类: package com.lkb.autoCode.util; import com.lkb.autoCode.constant.AutoCodeConstant; ...

  7. 重写代码生成器支持模板(多层架构,MVC),多语言c#,java;支持mysql和sqlserver,动态编译

    多年前用过李天平前辈的,自己改过,后来李老师做动软了,不给源码,修改不是很方便.加上我目前需要转java方向,于是决定自己搞.到目前为止花了整整一个星期了,看看目前的成果. 最后是代码工程文件,用c# ...

  8. 浅谈VB.Net 程序的编译和动态编译

    ---恢复内容开始--- 一般,我们都是通过Visual Studio(下面简称vs)来编写和编译vb.net应用程序的,但是,不少的人并不知道vs是通过何种方式编译程序的.今天,我们就来探讨一下编译 ...

  9. .NET中的动态编译

    代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外 ...

随机推荐

  1. 容器ConcurrentHashMap原理(学习)

    一.概述 HashMap 是非线程安全的,在不考虑性能问题的时候,我们的解决方案有 Hashtable 或者Collections.synchronizedMap(hashMap),这两种方式基本都是 ...

  2. POJ2451 Uyuw's Concert (半平面交)

    POJ2451  给定N个半平面 求他们的交的面积. N<=20000 首先参考 POJ1279 多边形的核 其实就是这里要求的半平面交 但是POJ1279数据较小 O(n^2)的算法 看起来是 ...

  3. sublime text2 配置php本地环境时遇到的错误。

    首先,将PHP加到电脑的环境变量中如图(D:\PHPEnv\PHP5是我PHP的安装目录): 第二步:添加编译系统配置 第三步:配置详情: { "cmd": ["php. ...

  4. crosswalk 初步使用

    这里简单的说下 crossWalk 的配置; 我在学习 crosswalk 的时候,看到一篇博客,他所记录的已经是很完整的教程了: 点击查看 本文就根据该博客和官网说明,进行部分修改,补充; 首先 c ...

  5. jQuery——修改网页字体大小

    HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <lin ...

  6. gitlab&Jenkins 详细介绍及其应用

    第1章 gitlab 1.1 系统环境 [root@jenkins ~]# cat  /etc/redhat-release CentOS Linux release 7.2.1511 (Core) ...

  7. 实现grep命令

    #include <stdio.h> #include <string.h> #include <stdlib.h> // grep命令:grep match_pa ...

  8. [BZOJ5109/CodePlus2017]大吉大利,晚上吃鸡!

    Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏中,皮皮和毛毛最喜欢做的事情就是堵桥,每每有一个好时机都能收到不少的快递 ...

  9. SQL优化器简介

    文章导读: 什么是RBO? 什么是CBO? 我们在工作中经常会听到这样的声音:"SQL查询慢?你给数据库加个索引啊".虽然加索引并不一定能解决问题,但是这初步的体现了SQL优化的思 ...

  10. vscode使用教程(web开发)

    1.安装 进入官网下载https://code.visualstudio.com/ 一直下一步就好了,中间可以选择把软件安装在哪个目录. 2.常用插件安装 a. 进入扩展视图界面安装/卸载 a1.快捷 ...