2.6 The Brook+ Runtiem API

现在版本的Brook+的特性都是完全改写了runtime引擎后的。为了提高性能和稳定性,新的C++ API提供给开发者以便能在低层用更有弹性的方式操纵GPU。

2.6.1 C++ API和之前编程模型之间的差异

差异表现在一下几个方面:

.动态流管理

.错误处理

.运行域控制

.基于异步API的显式控制

.内存阻塞

.多GPU支持

.DX互操作性

.与C++代码兼容性

接下来几节讨论这些不同之处。

2.6.1.1 动态流管理

Brook,BrookGPU和之前版本的Brook+使用静态方式分配流并且禁止为了同时读和写而对流绑定。在这个C++ API层上,没有这样的限制:

流是GPU内存的代理,可以动态分配,可以在函数之间像任何其它C++对象一样传递。

2.6.1.2 错误处理

在运行时错误被捕获并被传回客户端。在GPU端,错误相对host端的控制流可以是异步的,错误也不是直接传回host而是和流绑定并通过流图像传递。应用程序检查最后的输出来确定运行过程中是否有错误发生。

2.6.1.3 运行域控制

当使用分散流作为输出时,没有必要在输出流布局和运行域布局(运行于kernel上的虚拟“SIMD”数组)之间强行作简单的一对一映射。

2.6.1.4 基于异步API的显示控制

Brook+现在可以让你显式地让一个特定的流操作为异步的。一个API可以用来检查异步请求的状态。这样可以更好地同时使用CPU和GPU,从而提高整个系统的效率。

2.6.1.5 内存阻塞

内存阻塞利用系统允许CPU-to-GPU和GPU-to-CPU内存和用户内存之间的传递这一特性。一般情况下,数据传递时在复制到GPU或者用户内存之前,在CPU的特定内存空间会产生一个副本。内存阻塞会尽可能地提升数据传递的性能。

对内存阻塞的使用有一些开发者必须注意的限制。关于怎样在你的流操作中使用内存阻塞的详情见2.14节。

2.6.1.6 多GPU支持

多系统可以被配置为两个或更多GPU。Brook+支持开发者使用单个Brook+程序利用一个系统中所有兼容的GPU。一组例行的程序可以使用户选择程序运行的设备。关于在你的程序中怎样利用多GPU特性的详情,见2.16节。

2.6.1.7 DX互操作性

DX互操作性支持Brook+程序员很容易地、高效地将他们的计算结果用自己熟悉的图形API显示在屏幕上。这对于图形和视频处理程序特别重要。互用性使程序员在渲染和提升所有应用程序的特性之前避免产生复制回CPU端的副本。

2.6.1.8 与C++代码的兼容性

Kernel代码仍然是C的一个严格子集,但是将所有其它的代码从.br文件中移出意味着开发者可以用C++写应用程序。

Brook+ Programming (6)相关推荐

  1. Brook+ Programming

    翻译自AMD文档 2.1Runtime Options 在运行Brook+程序之前,需要注意一下环境变量: BRT_RUNTIME 这个环境变量允许你决定计算的后端是CPU(可以方便地调试)还是CAL ...

  2. Brook+ Programming (4)

    (接上篇) 由main函数开始,生成三个流接受输入矩阵(A和B)和输出矩阵(流一般用来表示矩阵).然后三块内存缓冲区开辟出来(input_A,input_B和 input_C)接着streamRead ...

  3. Brook+ Programming (2)

    (接上一篇) 2.2.2 Building 使用如下步骤生成: 第一步: 用brcc编译 编译器可以在<BROOKROOT>/sdk/bin/下找到 brcc   [-hkrbfilxae ...

  4. Brook+ Programming (1)

    (接上一篇文章) Brook+的代码和C/C++的很像,但要注意以下几点: 第一,brcc像C编译器一样工作,也就是说编程要坚持标准C规范(例如:变量在代码段前声明). 对于更复杂的应用,要小心地区分 ...

  5. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  6. Java OOP(Object Oriented Programming)个人理解及总结

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...

  7. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  8. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

  9. CSE 3100 Systems Programming

    代做CSE 3100留学生作业.代写C/C++程序作业.代做Systems Programming作业.代写C/C++编程设计作业 CSE 3100 Systems Programming Homew ...

最新文章

  1. 拦截导弹 (加了神奇的位运算)
  2. 9.2.1 Renaming Retrieved Columns
  3. 【个人申明】主要发表平台迁至简书和公众号
  4. 如何使用 dotTrace 来诊断 netcore 应用的性能问题
  5. vbs获取程序窗体句柄_PyQt5 GUI程序的基本框架
  6. 嗨淘V12刷任务点赞系统源码手动派单版本
  7. 高可用性HA及Cluster集群
  8. byte二维数组表示
  9. 1. 喵喵宠物管理系统需求分析
  10. 【LDO带载能力和两端压差有关】
  11. ffmpeg提取音频数据
  12. 2009年毕业设计题目:网上自助装机系统的设计与实现
  13. 【马仔创业感悟】什么是初创公司
  14. 【雷达与对抗】【2011.07】穿墙超宽带雷达成像
  15. 充电桩市场与发展前景分析
  16. 微信分享获得积分 jquery微信分享获得积分 原理
  17. 思维拓展:不相邻问题插空法
  18. 基于STM32F103c8t6的智能垃圾桶项目
  19. WPF无弹窗打印_se7en3_新浪博客
  20. 如何节省计算机系统盘的空间?(千万不要删除C:\WINDOWS\ServicePackFiles文件夹)...

热门文章

  1. 在本地windows终端打开远程服务器的图形界面程序
  2. java月份前面去掉0,JAVA日期格式输出月度前面不想被自动补0
  3. Linux安装Oracle数据库
  4. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)
  5. 小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数...
  6. 论坛群发软件-SEO之内部链接的优化
  7. HTML图片渐渐放大和渐渐变小,css3实现图片的变大变小
  8. 海店湾教你:如何抵抗提前衰老,让你年轻20岁!
  9. maven配置文件中modules的作用
  10. 前端实现简易版发布留言