【问题标题】:OpenCL and GPU programming RoadmapOpenCL 和 GPU 编程路线图
【发布时间】:2011-05-24 18:54:43
【问题描述】:

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

【问题讨论】:

  • 您拥有 ATI 或 nvidia 卡吗?
  • 我现在两者都有……在 1 台电脑中我有一个 ati,在另一台我有一个 nvidia……
  • .Net 有 XNA 框架,这是 xbox 游戏制作。你应该检查一下。

标签: c# opencl gpu opencl.net


【解决方案1】:

我找到的最好的网站是这个网站,可以清楚地介绍 GPU 编程与 CPU 编程的不同之处:

http://www.macresearch.org/opencl

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

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

  • 合并的内存访问

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

【讨论】:

  • 对不起,我认为这个问题主要是关于开始编码而不是设计。 MacResearch 系列非常适合开始用 GPU 术语进行思考,但对于编码而言信息量不是很大。它现在也相当过时。不过,我会推荐这个系列。
【解决方案2】:

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

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

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

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

【讨论】:

  • 我希望得到更直接的答案...比如...“去那个地址并下载...如果你有 ATI 视频卡去那里...如果你有Geforce 进入那个网站”之类的东西......
  • 好的...那我从哪里开始?!?我必须对我的程序做些什么才能让它们使用 GPU 的力量?!?
  • 在一个你希望它是相关的注释上:Haskell 实际上很可能有那个按钮。在某种程度上,所有语言都可以,但使用 Haskell 更常见。并且更容易开发。 (函数式编程更严格地定义行为,因为它定义了结果,而不是过程)
【解决方案3】:

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

学习 OpenCL,有各种各样的资源.. 不是很多。我发现following this 很有帮助。

【讨论】:

    【解决方案4】:

    我很抱歉迟到了 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
    -----------------------------------------------------------------------------------------------------------------
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-11
      • 2013-08-03
      • 2018-05-27
      • 2013-01-10
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2019-02-10
      相关资源
      最近更新 更多