GPU的并行运算能力远超CPU,有时候我们会需要用到超大数据并行运算,可以考虑用GPU实现,这是一篇C#调用GPU进行运算的入门教程.
1: 下载相关的库:
https://sourceforge.net/projects/openclnet/
看起来已经N久没更新了, 不过没关系,这只是API声明和参数,opencl本身是有在更新的.
里面有源码也有DLL,可以引用DLL,也可以直接把源码添加到工程使用.(建议直接添加代码...)
*** 需要注意的是 ***:自己建立的工程有个默认的Program类,要改成别的名字,不然会和这里面一个同名的类冲突....
2:建立工程
打开VS建立一个C#控制台工程,Program类改名为MainProgram,添加OpenCL.Net源码引用
项目属性里改为[允许不安全代码]:
3:在MainProgram里声明引用:
using OpenCLNet;
using CL = OpenCLNet;
4:在项目里添加一个Extend类,内容如下
public static class Extend
{
/// <summary>
/// 取指针
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static unsafe IntPtr ToIntPtr(this int[] obj)
{
IntPtr PtrA = IntPtr.Zero;
fixed (int* Ap = obj) return new IntPtr(Ap);
}
}//End Class
5:在MainProgram把一段运行在GPU的代码放在C#的字符串里:
#region OpenCL代码
private static string CLCode = @"
__kernel void vector_add_gpu(__global int* src_a, __global int* src_b, __global int* res)
{
const int idx = get_global_id(0);
res[idx] =src_a[idx] + src_b[idx];
}
__kernel void ve