8.2 C++ AMP advanced concepts
2023-09-14 09:08:34 时间
C++ AMP一些更高级的概念:
1. device内存的分配和拷贝.
void vecAdd(float* A, float* B, float* C, int n) { array<float,1> AA(n), BA(n); array<float,1> CA(n); copy(A,AA); copy(B,BA); parallel_for_each(CA.get_extent(), [&AA,&BA,&CA](index<1> i) restrict(amp) { CA[i] = AA[i] + BA[i]; }); copy(CA,C); }
array<T,Dimesion>的作用是分配 Accelerator memory,类似于cudaMalloc().
copy(source,destination)的作用是拷贝内存动作,可以在host和Accelerator之间来回拷贝,类似于cudaMemcpy().
这两者加起来的功能就是array_view<>.
另外注意到执行完kernel计算后,拷贝CA数据回host C, 但是并没有执行CV.synchronize()动作,其实copy有隐式同步的功能.
2. host和accelerator异步执行
上面的代码host和accelerator的执行顺序如下图:(左边的是host,右边的是accelerator)
accelerator设备在执行compute的时候,host可以同时执行其他的动作,比如下面的代码:
parallel_for_each(CA.get_extent(), [&AA,&BA,&CA](index<1> i) restrict(amp) { CA[i] = AA[i] + BA[i]; }); completion_future done = CV.synchronize_async(); otherProcessing(A,B); done.get();
completion_future done关联CV的操作. done.get()等待,直到关联的异步操作完成为止.
这个代码的执行顺序图如下:
可以看到,在accelerator执行计算的时候,cpu在执行otherProcessing().
相关文章
- 对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解
- [C++]Microsoft Visual Studio (VS)2010 操作快捷键大全
- vc++实现控制USB设备启用与否
- C++卷积神经网络实例(一)
- c++中继承和java中继承的对比
- 二进制兼容原理 - C/C++ &Java
- Open3D(C++) 模型精细化处理—— SubdivideMidpoint剖分
- paip.c++ 进程间通信方法大总结
- C++:C++编程语言学习之逻辑控制语句(循环语句&判断语句)&异常处理(try-catch-throw)的简介、案例应用之详细攻略
- DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练&测试过程全记录
- C++设计模式:数据访问对象模式
- 在C++语句中,两个标识符之间( )不能作为C++的分隔符。
- C++状态模式
- 全面整理的C++面试题
- tuple c++
- extern "C" 的含义:实现C++与C及其他语言的混合编程
- 数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++)
- C++ 传递指针给函数
- C&C++注释规范示例
- C++不能返回string&局部引用(二十六)
- C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
- C++ 排序函数 sort(),qsort()的使用方法
- VC++如何通过代码自动弹出Windows系统的一些窗口(附源码)
- C++ ref与&
- C++ 类 & 对象
- C++11 左值、右值与右值引用
- C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用