OpenCL和GPU编程路线图

时间:2010-12-13 16:43:48

标签: c# opencl gpu gpu-programming opencl.net

我想开始说我对OpenCL / GPU编程一无所知,但我是一名高级C#(通用.Net)程序员而不用担心C ++,我想学习OpenCL / GPU编程......我的问题是... 我从哪里开始?!?我应该下载什么?!?有没有办法在Visual Studio上编程OpenCL / GPU(在C#上)!?!喜欢......你好世界的东西......全部

4 个答案:

答案 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
-----------------------------------------------------------------------------------------------------------------

它可以完成从流水线操作到任务池调度的一系列事情。