C++ AMP中GPU并行计算
来源:互联网 发布:地理空间数据云平台 编辑:程序博客网 时间:2024/05/01 10:14
AMP(Gpu并行计算,c#,vc++11) 学习(一)
感觉AMP代码很好懂
一、vc++11代码
#include <amp.h> using namespace concurrency; extern "C" __declspec ( dllexport ) void _stdcall square_array(float* arr, int n){ // Create a view over the data on the CPU array_view<float,1> dataView(n, &arr[0]); // Run code on the GPU parallel_for_each(dataView.extent, [=] (index<1> idx) restrict(amp) { dataView[idx] = dataView[idx] * dataView[idx]; }); // Copy data from GPU to CPU dataView.synchronize();}
Concurrency是和C#的线程安全数据结构名称一样的。所以很容易理解
parallel_for_each 类似 C#的 Parallel.ForEach
第12行的lambda 更是c#里面天天用的,看到以后很激动
dataView.extend 貌似是需要同时启动的算子数目
[=] 是 [dataView] 的缩写,
在c#里面lambda是没有“[]”这个的, []表示要进入lambda函数闭包内的变量。
c#是自动分析的,而vc++11需要手工列出传入的变量。
array_view(AMP引用数组) 传值
array 传引用(AMP数组) (传引用加&)
restrict(amp) 是限定这个函数进行语法检查的一个标记,括号里可以写amp 或cpu
如果是amp (GPU)则,函数体里面的内容只能是c++11的一个子集,有些写法是不允许的。具体msdn上有描述
函数体不解释。至于Idx可以理解为并行算子的编号。
dataView.synchronize();
将GPU上的数据写回CPU
很简单真的,几乎没有一行不明白。
===============================================================================
二、c#调用代码
[DllImport("Win32Project1", CallingConvention = CallingConvention.StdCall)]extern unsafe static void square_array(float* array, int length); unsafe void Do(){ // Allocate an array float[] arr = this.textBox1.Text .Split(' ') .Select(v=> Convert.ToSingle(v) ).ToArray(); // Square the array elements using C++ AMP fixed (float* arrPt = &arr[0]) { square_array(arrPt, arr.Length); } this.textBox2.Text = string.Join(" ", arr);}
读取textbox的字符串转换为 浮点数组,然后调用amp函数,然后输出到另外一个textBox中。
三、运行效果
四、代码文件
http://files.cnblogs.com/xzbrillia/%E5%AD%A6%E4%B9%A0amp1.rar
五、参考地址
http://blogs.msdn.com/b/pfxteam/archive/2011/09/21/10214538.aspx- C++ AMP中GPU并行计算
- C++AMP: 遇见C++ AMP:在GPU上做并行计算
- 遇见C++ AMP:在GPU上做并行计算
- C++ AMP在GPU上做并行计算
- 遇见C++ AMP:在GPU上做并行计算
- 遇见C++ AMP:在GPU上做并行计算
- GPU---并行计算利器
- GPU:并行计算利器
- GPU---并行计算利器
- GPU---并行计算利器
- 并行计算&大数计算
- C++ AMP 加速大规模并行计算-GPU和CPU的性能比较
- C++ AMP是微软提供的一套利用GPU并行计算的API。
- 面向GPU并行计算新趋势
- 面向GPU并行计算新趋势
- 面向GPU并行计算新趋势
- CUDA: GPU的并行计算
- TensorFlow多GPU并行计算
- ExpandableListView(二)替换箭头图标被拉伸的问题
- C++ AMP implementation of SmallPt / SmallPtGPU : SmallPtAMP
- 技术网站整理1
- java面试题系列11
- Qemu快照(snapshot)机制原理及关键技术理解
- C++ AMP中GPU并行计算
- dB的换算
- JS 去除Array 中的null 值
- 黑马程序员--网络编程Socket
- git 放弃本地修改 强制更新
- eclipse中的.project 和 .classpath文件的具体作用
- 10.3.6 TCP传输连接建立
- Struts2 学习笔记19 类型转换 Part1
- Effective C++ 第二版 10) 写operator delete