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. PHP 算法题:有多少苹果用来分赃1.1
  2. 用 Python 写 3D 游戏,太赞了
  3. 数据更改后推送_合格的数据科学家,这些Github知识必须了解
  4. thymeleaf获取当前时间并格式化输出
  5. flink state ttl
  6. 熬夜并不值得程序员炫耀
  7. API的非向后兼容性无论如何通常代表着一种比较差的设计
  8. 【P1063】 能量项链
  9. sonyflake.go
  10. 等响度曲线_等响曲线是如何绘制的?响度级
  11. 【李宏毅2020 ML/DL】P16 PyTorch Tutorial | 最后提及了 apex.amp
  12. java excel 日期格式转换_Java处理Excel中的日期格式
  13. 使用R语言进行时间序列(arima,指数平滑)分析
  14. 剑指offer算法题分析与整理(二)
  15. 会议OA之会议排座送审
  16. 透明、柔性指纹传感器问世
  17. 前端涨薪必读,node.js入门保姆级教程
  18. 宁芝普拉姆键盘说明书
  19. 安全架构-HTTP协议幂等性
  20. 【Jmeter】jmeter的安装与启动(win10)

热门文章

  1. 基于51单片机的出租车计价器含proteus仿真及电路图
  2. NovelAI tag在线生成器
  3. 骁龙750g和骁龙855plus参数对比 哪个好
  4. Time Wait的作用、原因、影响和如何避免
  5. Nonlinear Complementary Filters on the Special Orthogonal Group 学习笔记
  6. jQuery 遍历数组
  7. 城市文化笔记整理(一)
  8. ubuntu分区方案(纯ubuntu系统)
  9. 解决OleDbDataReader重新获取记录时,使用GetString()方法出错的问题
  10. 计算一维积分的蒙特卡罗算法