我想开始说我对OpenCL / GPU编程一无所知,但我是一名高级C#(通用.Net)程序员而不用担心C ++,我想学习OpenCL / GPU编程......我的问题是... 我从哪里开始?!?我应该下载什么?!?有没有办法在Visual Studio上编程OpenCL / GPU(在C#上)!?!喜欢......你好世界的东西......全部
答案 0 :(得分:9)
我发现的最佳网站是为了清楚地介绍GPU编程与CPU编程的不同之处,这个网站是:
http://www.macresearch.org/opencl
尽管这些视频完成了显示NVIDIA样式卡的重要概念:
许多线程在锁定步骤中运行完全相同的指令(即使某些代码是使用if-else结构编写的),
合并内存访问
同样适用于AMD或NVIDIA,对于开始改变您对如何构建算法以改善GPU性能的思考方式至关重要。
答案 1 :(得分:7)
http://developer.amd.com/zones/OpenCLZone/pages/default.aspx
假设您想要opencl而不是cuda,那么这里有一大堆介绍视频教程。 NVidia也有类似的设置 - 尽管他们有更多基于CUDA的东西。
如果你想进行GPL编程,那么获得一个可以将opencl / cuda代码转储到GPU中的示例应用程序就是一个简单的部分。您还必须学习opencl / cuda语言,然后您必须学习如何并行思考算法以及如何测试/测量结果。
没有“使用GPU”按钮可立即使您的代码快100倍
答案 2 :(得分:4)
我想说看看OpenTK和他们的C#绑定,以获得OpenCL的快速启动。查看OpenCL's website以获得标准的C或C ++绑定。
学习OpenCL,有各种资源..不是很多。我发现following this很有帮助。
答案 3 :(得分:1)
我很抱歉迟到了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
-----------------------------------------------------------------------------------------------------------------
它可以完成从流水线操作到任务池调度的一系列事情。