工具包支持动态并行:
在CUDA代码中包含设备运行时API:
与主机端运行时API类似,CUDA设备运行时API的原型在程序编译期间自动包含在内。 没有必要明确包含cuda_device_runtime_api.h。
编译和链接:
在使用nvcc编译时,CUDA程序会自动与主机运行时库链接,但设备运行时作为静态库提供,必须明确地将其与希望使用它的程序链接。
设备运行时以静态库的形式提供(Windows上的cudadevrt.lib,Linux和MacOS下的libcudadevrt.a),使用设备运行时的GPU应用程序必须与之链接。 设备库的链接可以通过nvcc和/或nvlink完成。 下面显示了两个简单的例子。
如果可以从命令行指定所有必需的源文件,则可以在一个步骤中编译和链接设备运行时程序:

 nvcc -arch=sm_35 -rdc=true hello_world.cu -o hello -lcudadevrt

也可以先将CUDA .cu源文件编译为目标文件,然后将这些文件连接在一起分为两个阶段:

nvcc -arch=sm_35 -dc hello_world.cu -o hello_world.o
nvcc -arch=sm_35 -rdc=true hello_world.o -o hello -lcudadevrt

请参阅CUDA驱动程序编译器NVCC指南的使用单独编译部分了解更多详细信息。
编程指南:
设备运行时间是主机运行时间的一个功能子集。 API级设备管理,内核启动,设备memcpy,流管理和事件管理从设备运行时暴露出来。
对于已经具有CUDA经验的人员,设备运行时编程应该很熟悉。 设备运行时语法和语义与主机API的语法和语义基本相同,本文档前面详细介绍了任何例外情况。
以下示例显示了一个包含动态并行性的简单Hello World程序:

#include <stdio.h>
__global__ void childKernel()
{printf("Hello ");
}
__global__ void parentKernel()
{// launch childchildKernel << <1, 1 >> >();if (cudaSuccess != cudaGetLastError()) {return;}// wait for child to completeif (cudaSuccess != cudaDeviceSynchronize()) {return;}printf("World!\n");
}
int main(int argc, char *argv[])
{// launch parentparentKernel << <1, 1 >> >();if (cudaSuccess != cudaGetLastError()) {return 1;}// wait for parent to completeif (cudaSuccess != cudaDeviceSynchronize()) {return 2;}return 0;
}

这个程序可以在命令行的单个步骤中构建,如下所示:

nvcc -arch=sm_35 -rdc=true hello_world.cu -o hello -lcudadevrt

性能:
同步:
即使其他线程本身不调用cudaDeviceSynchronize(),一个线程同步也会影响同一个线程块中其他线程的性能。 这种影响将取决于基础实施。
支持动态并行机制的内核开销:
在控制动态启动时处于活动状态的系统软件可能会对当时正在运行的任何内核施加开销,无论它是否调用其自己的内核启动。 这种开销是由设备运行时的执行跟踪和管理软件产生的,并且与从主机侧相比,可能导致例如由设备进行库调用时的性能下降。 总的来说,这种开销是针对与设备运行时库链接的应用程序而产生的。

CUDA学习(六十五)相关推荐

  1. CUDA学习(十五)

    多设备系统: 设备枚举: 主机系统可以有多个设备. 以下代码示例显示如何枚举这些设备,查询它们的属性以及确定启用CUDA的设备的数量: int deviceCount; cudaGetDeviceCo ...

  2. JavaScript学习(六十五)—数组知识点总结

    JavaScript学习(六十五)-数组 学习内容 一.什么是数组 二.数组的分类 三.数组的创建方式 四.数组元素 五.数组的操作 六.数组元素遍历的四种方法 七.随机数为数组赋值 八.数组的比较 ...

  3. 六十五年来,他的祖国向他道歉了三次

    △ "人工智能之父"艾伦 · 麦席森 · 图灵 (Alan Mathison Turing,1912-1954) 2021年6月23日是英国科学家."人工智能之父&quo ...

  4. python数据挖掘学习】十五.Matplotlib调用imshow()函数绘制热图

    python数据挖掘学习]十五.Matplotlib调用imshow()函数绘制热图 #2018-03-28 14:47:19 March Wednesday the 13 week, the 087 ...

  5. 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN

    目录 0. 前言 1. RNN 计算图 2. RNN 前向传播 3. RNN 反向传播 4. 导师驱动过程(teacher forcing) 5. 不同序列长度的 RNN 如果这篇文章对你有一点小小的 ...

  6. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  7. 六十五、Leetcode数组系列(上篇)

    @Author:Runsen @Date:2020/6/5 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  8. JavaScript学习(十五)—内部样式与外部样式的修改与设置

    JavaScript学习(十五)-内部样式与外部样式的修改与设置 (一).行内样式 获取方式:元素节点.style.CSS属性名称: 注意:如果CSS属性中包含"-",那么需要采用 ...

  9. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  10. 信息系统项目管理师核心考点(六十五)信息安全基础知识网络安全

    科科过为您带来软考信息系统项目管理师核心重点考点(六十五)信息安全基础知识网络安全,内含思维导图+真题 [信息系统项目管理师核心考点]信息安全基础知识网络安全 1.拒绝服务攻击(Dos) 一种利用合理 ...

最新文章

  1. 如何构建优雅的ViewController
  2. 正则表达式匹配非字母或者数字
  3. Linux下开启/关闭MySql Server命令
  4. 面向对象JS编程(一)——创建对象
  5. yii3正式版什么时候发布_事业单位联考结束,成绩什么时候发布?合格分数线怎么算?...
  6. 如何正确在IDEA 里maven构建的项目中引入lib的jar包(图文详解)
  7. js Math对象属性和方法
  8. iOS开发:报错The sandbox is not in sync with the Podfile.lock. Run ‘pod install‘ …的解决方法
  9. 全面解释java中StringBuilder、StringBuffer、String类之间的关系
  10. 古剑奇谭网络版服务器位置,《古剑奇谭网络版》部分服务器“数据互通”公告...
  11. linux css压缩工具下载,推荐15个最好用的JavaScript代码压缩工具
  12. nas存储如何做远程服务器数据备份_NAS存储与数据备份方案
  13. 汽车电子行业英文缩写大全(不断更新)
  14. 防疫主题的微信公众号图文排版有哪些技巧?
  15. 技术大佬:我去,你竟然还不会用 this 关键字
  16. MapReduce重点知识
  17. 自适应模拟退火粒子群算法BSAPSO(学习笔记_03)
  18. VS2005下error PRJ0003 : Error spawning 'cmd.exe'的解决方法
  19. .bin文件 .hex文件和.s19文件区别
  20. 互联网思维如何影响房地产

热门文章

  1. senchaTouch 给组件传参的两种方式
  2. akka一些邮箱的实现
  3. html记仇表情包源码,写小本本记仇表情包
  4. 网页截图和svg模版动态生成图片Java实现
  5. android做题imageview缩放,巧用ViewPager实现驾考宝典做题翻页效果
  6. java多个数据库_java – 我们可以有多个dataSources到单个数据库
  7. Bash-Shell-02
  8. Python爬虫入门_之urllib2urllib
  9. Eureka覆盖状态
  10. springcloud使用zipkin实现链路追踪与监控