OpenCL和GPU编程路线图

11

我希望先声明,我对OpenCL/GPU编程一无所知,但我是一名高级C#(一般 .Net)程序员,不怕C++,并且我想学习OpenCL/GPU编程...我的问题是...我应该从哪里开始?!? 我应该下载什么?!?是否有一种方法可以在Visual Studio(用C#)上编写OpenCL/GPU代码?!?例如...hello world之类的东西...谢谢大家


你拥有 ATI 或 Nvidia 显卡吗? - Scott Chamberlain
我现在两个都有...一个电脑里有ATI,另一个电脑里有NVIDIA... - Leonardo
.Net 有 XNA 框架,可以制作 Xbox 游戏。你应该看一下。 - Bonshington
4个回答

9
我发现了一份介绍GPU编程与CPU编程区别的好网站,它能够提供清晰易懂的入门指导。以下是该网站链接:

http://www.macresearch.org/opencl

尽管这些视频展示的是NVIDIA风格的卡,但以下重要概念同样适用于AMD或NVIDIA,并且对于开始改变您算法结构以获得GPU性能提升至关重要:

  • 许多线程以锁步方式运行相同的指令(即使某些代码使用if-else结构),以及

  • 合并内存访问

请注意,不要修改原文中的解释和HTML标签。


3
抱歉,我认为这个问题主要是关于编码入门而不是设计。MacResearch系列对于开始思考GPU方面非常有帮助,但对于编码并不是很信息丰富。该系列现在也比较过时了。不过,我仍然推荐这个系列。 - That Realty Programmer Guy

7

http://developer.amd.com/zones/OpenCLZone/pages/default.aspx

假设您想进行OpenCL而不是CUDA编程,那么这里有一整套入门视频教程。NVidia也有类似的教程,但它们更多基于CUDA。
如果您想进行GPL编程,则获取一个能够将OpenCL/CUDA代码转储到GPU的示例应用程序是简单的部分。您还需要学习OpenCL/CUDA语言,然后学习如何并行思考算法以及如何测试/测量结果。
没有一个“使用GPU”按钮可以立即使您的代码快100倍。

我希望得到一个更直接的答案,比如“去那个地址下载那个东西……如果你有ATI显卡就去这里……如果你有Geforce就去那个网站”。 - Leonardo
好的...那我从哪里开始?!?我需要对我的程序做什么才能利用GPU的强大功能呢?!? - Leonardo
在一个你希望它相关的注释上:Haskell 可能实际上非常有可能拥有那个按钮。在某种程度上,所有语言都可以做到这一点,但是使用 Haskell 更容易实现。而且更容易开发。(函数式编程更加严格地定义行为,因为它定义结果而不是过程) - Lodewijk

4
我会建议查看OpenTK及其C#绑定,以快速入门OpenCL。请访问OpenCL的网站以获取标准C或C++绑定。
学习OpenCL,有各种资源可供参考,但并不是很多。我发现这个链接很有帮助。

1
抱歉七年迟到,但这里提供了一个开源的 C# gpgpu 库,可编写自己的 OpenCL 内核:

https://github.com/tugrul512bit/Cekirdekler/wiki/Beginning

"以传统的方式输出“Hello World”:"
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
-----------------------------------------------------------------------------------------------------------------

它可以做很多事情,从流水线到任务池调度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接