11

我想开始说明我对 OpenCL/GPU 编程一无所知,但我是一名高级 C#(通用 .Net)程序员,不惧怕 C++,我想学习 OpenCL/GPU 编程……我的问题是……我从哪里开始?!?我应该下载什么?!?有没有办法在 Visual Studio(在 C# 上)上对 OpenCL/GPU 进行编程!?!像...你好世界的东西... tks all

4

4 回答 4

9

我找到的关于 GPU 编程与 CPU 编程有何不同的清晰介绍的最佳网站是这个网站:

http://www.macresearch.org/opencl

尽管这些视频展示了 NVIDIA 风格的显卡,但以下重要概念:

  • 许多线程在锁步中运行完全相同的指令(即使某些代码是用 if-else 结构编写的),并且

  • 合并内存访问

同样适用于 AMD 或 NVIDIA,并且对于开始改变您对如何构建算法以提高 GPU 性能的看法至关重要。

于 2010-12-13T19:36:45.600 回答
7

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

假设你想做 opencl 而不是 cuda,那么这有一大堆介绍视频教程。NVidia 也有类似的设置——尽管他们有更多基于 CUDA 的东西。

如果你想做 GPL 编程,那么获得一个可以将 opencl/cuda 代码转储到 GPU 中的示例应用程序是很简单的部分。您还必须学习 opencl/cuda 语言,然后您必须学习如何并行考虑算法以及如何测试/测量结果。

没有“使用 GPU”按钮可以立即使您的代码速度提高 100 倍

于 2010-12-13T16:51:00.520 回答
4

我想说看看OpenTK和他们的 C# 绑定,以便快速开始使用 OpenCL。查看 OpenCL 的网站以获取标准的 C 或 C++ 绑定。

学习 OpenCL,有各种各样的资源.. 不是很多。我发现遵循这个很有帮助。

于 2011-01-28T13:38:52.060 回答
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
-----------------------------------------------------------------------------------------------------------------

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

于 2017-06-18T22:52:08.643 回答