Brook+ Programming (6)

介绍了Brook+最新版本中C++ API的主要特性,包括动态流管理、错误处理、运行域控制等,并详细阐述了这些特性如何提高GPU编程的灵活性与效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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++写应用程序。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值