concurrency::accelerator_view(加速器视图)

来源:互联网 发布:win10系统优化教程 编辑:程序博客网 时间:2024/04/29 04:04

简介:

前面我们已经知道,加速器代表目标C++AMP执行及内存所在的默认加速器的概念。在文章的末尾,我们介绍了如何从一个加速器通过 加速器类的default_view属性和 create_view方法创建一个加速器视图。

加速器视图对象可视为加速器的控键。

你可以通过另一个加速器视图构造一个新的加速器视图。利用拷贝构造函数或运算符重载,说起重载,你可以通过=对两个加速器视图进行对比,判断两个加速器视图是否来自于一个底层加速器设备。

稍后,我们将看到使用array对象,array是数据在加速器的存储。在其array对象构造过程需要给定加速器视图。因此,其具有一个接收加速器视图的重载构造函数。另外,我们还将看到parallel_for_each函数也重载了加速器视图对象,这样它才能确定位于哪些加速器的目标执行运算。(以lambda表达式作为参数传入parallel_for_each函数

除了上述用法外,accelerator_view还提供了隔离多个加速器的重要作用。如果你的代码正在通过不用线程访问加速器。你需要为每一个线程创建分离的加速器视图。

flush, wait, and queuing_mode


当你通过 加速器的create_view的方法创建加速器视图时,你需要传递queuing_mode_immediate 或 queuing_mode_automatic参数。当然,你可以随时访问加速器视图的queuing_mode属性。

一般默认的queuing_mode是queuing_mode_automatic。如果GPU命令需要立即提交设备,如内核调用,数据传输(parallel_for_each或copy),则需要更改queuing_mode为queuing_mode_immediate 。

当值queuing_modequeuing_mode_immediate,命令将立即提交/刷新。

为了提交所有的缓冲命令,可以调用无阻塞的flush方法。如果你需要阻塞直至所有命令完成并返回,你可以使用wait()方法。

Querying information


和加速器一样,加速器视图具有is_debug和version两种公共属性。事实上,你总是可以通过访问加速器对象的加速器属性来查询加速器属性。

D3D的互操作


如果您的应用程序使用C ++ AMP计算数据还使用DirectX渲染着色器,例如像素着色器,可以通过整合C ++ AMP到图形管线中获得提升。


0 0