Hello C++ AMP!(2)
矩阵运算也许对于大多数程序员并不重要,所以下面来个更通俗版本的AMP:
1 #include <iostream>
2 #include <amp.h>
3
4 int main()
5 {
6 int nickName[6]{'a', 96, 'd', 'r', 'j', 'x'};
7 concurrency::array_view<int> myView(6, nickName);
8 concurrency::parallel_for_each(myView.extent,
9 [=] (concurrency::index<1> idx) restrict(amp)
10 {
11 myView[idx] += 1;
12 }
13 );
14 for(int i = 0; i<6; ++i)
15 std::cout<<(char)myView[i];
16 return 0;
17 }
在没有运行前,你知道输入的是什么吗?先不急着公布答案,先来说说其中的“内涵”。
首先,你是无法通过编译的。因为Line 6我使用了c++11里的初始化方式。默认情况下是无法通过编译的,你要改成
int nickName[6] = {'a', 96, 'd', 'r', 'j', 'x'};
是的,目前vs11不支持initialize list。
其次你可能会问,为什么nickName不是char类型的而是int类型的。最直白的回答就是array_view不支持char,最少也要是int。
具体我们可以看array_view的声明:
template <typename _Value_type, int _Rank = 1>
class array_view : public _Array_view_base<_Rank,sizeof(_Value_type)/sizeof(int)>
{
//为了便于阅读,省略此处代码
}
array_view在上一篇文章中提到过,这里重申下,通俗来讲他类似与一个迭代器。他提供了parallel_for_each需要用的index接口。
restrict是个非保留字符,他只是在当前语境中才有作用。这个“提示符”负责告诉编译器,程序员意图要生成什么程序。是cpu呢还是amp,amp的意思就是使用加速器。
什么是加速器(Aaccelerator)?就是另一个可以并行计算的设备,比如你的显卡GPU,比如其他支持SIMD的向量处理器,比如你通过OS驱动模拟的处理器等。另外,早期amp的前身是字符串“direct3d”,现在替换为amp了。如果你看资料发现了“direct3d”,不要太奇怪。
kernel,就是要运行在加速器上的代码。
本示例的kernel就一句:
myView[idx] += 1;
显然是对myNickName所有字符+1.现在你该明白输出什么了吧?
下面给个VS11对c++ 11的支持度(visual studio only ):
C++11 Core Language Features: Concurrency | VC10 | VC11 |
Reworded sequence points | N/A | N/A |
Atomics | No | Yes |
Strong compare and exchange | No | Yes |
Bidirectional fences | No | Yes |
Memory model | N/A | N/A |
Data-dependency ordering | No | Yes |
Data-dependency ordering: function annotation | No | No |
exception_ptr | Yes | Yes |
quick_exit and at_quick_exit | No | No |
Atomics in signal handlers | No | No |
Thread-local storage | Partial | Partial |
Magic statics | No | No |
C++11 Core Language Features: C99 | VC10 | VC11 |
__func__ | Partial | Partial |
C99 preprocessor | Partial | Partial |
long long | Yes | Yes |
Extended integer types | N/A | N/A |
posted on 2012-03-05 22:20 Meta.Grfx 阅读(1676) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?