我想开始说明我对 OpenCL/GPU 编程一无所知,但我是一名高级 C#(通用 .Net)程序员,不惧怕 C++,我想学习 OpenCL/GPU 编程……我的问题是……我从哪里开始?!?我应该下载什么?!?有没有办法在 Visual Studio(在 C# 上)上对 OpenCL/GPU 进行编程!?!像...你好世界的东西... tks all
4 回答
我找到的关于 GPU 编程与 CPU 编程有何不同的清晰介绍的最佳网站是这个网站:
http://www.macresearch.org/opencl
尽管这些视频展示了 NVIDIA 风格的显卡,但以下重要概念:
许多线程在锁步中运行完全相同的指令(即使某些代码是用 if-else 结构编写的),并且
合并内存访问
同样适用于 AMD 或 NVIDIA,并且对于开始改变您对如何构建算法以提高 GPU 性能的看法至关重要。
http://developer.amd.com/zones/OpenCLZone/pages/default.aspx
假设你想做 opencl 而不是 cuda,那么这有一大堆介绍视频教程。NVidia 也有类似的设置——尽管他们有更多基于 CUDA 的东西。
如果你想做 GPL 编程,那么获得一个可以将 opencl/cuda 代码转储到 GPU 中的示例应用程序是很简单的部分。您还必须学习 opencl/cuda 语言,然后您必须学习如何并行考虑算法以及如何测试/测量结果。
没有“使用 GPU”按钮可以立即使您的代码速度提高 100 倍
我想说看看OpenTK和他们的 C# 绑定,以便快速开始使用 OpenCL。查看 OpenCL 的网站以获取标准的 C 或 C++ 绑定。
学习 OpenCL,有各种各样的资源.. 不是很多。我发现遵循这个很有帮助。
我很抱歉迟到了 7 年。但这里有一个开源 C# gpgpu 库,用于编写您自己的 OpenCL 内核:
https://github.com/tugrul512bit/Cekirdekler/wiki/Beginning
和一个传统的你好世界:
ClNumberCruncher gpus= new ClNumberCruncher(
ClPlatforms.all().devicesAmd().gpus(), @"
__constant char text[12] = {'h','e','l','l','o',' ','w','o','r','l','d',' '};
__kernel void hello(__global char * arr)
{
printf(text);
}
");
gpus.performanceFeed = true;
ClArray<byte> array = new ClArray<byte>(5,1);
array.compute(gpus, 1, "hello", 5, 1);
array.compute(gpus, 1, "hello", 5, 1);
array.compute(gpus, 1, "hello", 5, 1);
这是输出:
hello world
hello world
hello world
hello worldhello world
Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland ||| time: 29.47ms, workitems: 2
Device 1(gddr): gfx804 ||| time: 29.76ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------
hello worldhello world
hello world
hello world
hello world
Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland ||| time: 1.64ms, workitems: 2
Device 1(gddr): gfx804 ||| time: 1.33ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------
hello worldhello world
hello world
hello world
hello world
Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] -----------------------------------------------------
Device 0(gddr): Oland ||| time: 1.08ms, workitems: 2
Device 1(gddr): gfx804 ||| time: .87ms, workitems: 3
-----------------------------------------------------------------------------------------------------------------
它可以做很多事情,从流水线到任务池调度。