【问题标题】:GPU Programming?GPU编程?
【发布时间】:2011-11-15 15:39:34
【问题描述】:

我是 GPU 编程领域的新手,我尝试过阅读 Wikipedia 和 Google 搜索,但仍有几个问题:

  • 我下载了一些 GPU 示例,对于 CUDA,有一些 .cu 文件和一些 CPP 文件,但所有代码都是普通的 C/C++ 代码只是一些奇怪的函数,如 cudaMemcpyToSymbol,其余的都是纯 c代码。问题是,.cu 代码是用 nvcc 编译然后与 gcc 链接的吗?或者它是如何编程的?

  • 如果我编写了要在 GPU 上运行的代码,它会在所有 GPU 上运行吗?还是只是CUDA?或者有没有为CUDA编写的方法和为ATI编写的方法以及为两者编写的方法?

【问题讨论】:

    标签: gcc cuda gpu


    【解决方案1】:

    回答你的第二个问题:

    如果您想编写独立于平台的 GPGPU 代码,OpenCL 是(唯一的)方法。

    ATI 网站其实有很多 OpenCL 的资源,如果你稍微搜索一下,他们的示例项目很容易修改成你需要的,或者只是为了理解代码。

    OpenCL 规范和参考页面也是一个很好的知识来源: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf

    有很多演讲解释了一些核心概念,也解释了如何编写我推荐的快速代码(这也适用于 CUDA)。

    几乎可以回答您的第一个问题: 在 OpenCL 中,代码在运行时编译到您正在使用的特定 GPU(以保证速度)。

    【讨论】:

    • 在运行时编译?我的代码会像在运行时复制到内存并从那里执行的字节码一样吗?
    • 您的 GPGPU 代码将是一个源代码字符串,在运行时编译为 GPU 上的代码对象
    【解决方案2】:

    您可能想了解一些有关 CUDA 的背景知识 - 这不是您可以通过查看一些代码示例来了解的内容。现在亚马逊上大约有 3 种不同的 CUDA 书籍,http://developer.nvidia.com 有很多参考资料。

    回答您的问题:

    • 是的,.cu 文件使用 nvcc 编译为中间形式 (PTX) - 随后在运行时转换为 GPU 特定代码

    • 生成的代码将在 nVidia GPU 的子集上运行,子集的大小取决于您在代码中使用的 CUDA 功能

    【讨论】:

    • 关于链接的补充:是的,您可以将nvcc生成的.o文件与gcc或其他C(++)编译器链接。但是,在大多数情况下,使用nvcc 链接会更容易,因为它会自动将您的程序链接到所有必要的 cuda 库(如果您使用 gcc,则必须手动指定它们)。
    【解决方案3】:

    完成@nulvinge 给出的答案,我想说OpenCL 对GPU 编程就像OpenGL 对GPU 渲染一样。但它不是多架构开发的唯一选择,你也可以使用 DirectCompute,但我不会说它是最好的选择,只是如果你希望你的代码在每个 DirectX11 兼容的 GPU 上运行,包括一些英特尔显卡芯片太对了?

    但是,即使您正在考虑使用 OpenCL 进行一些 GPU 编程,也不要忘记研究您正在使用的平台的架构。 ATI CPU、GPU 和 NVIDIA GPU 有很大的不同,如果您想充分利用它,您的代码需要针对您使用的每个平台进行调整...

    幸运的是,NVIDIA 和 AMD 都有编程指南来帮助您:)

    【讨论】:

      【解决方案4】:

      除了以前的答案之外,对于 CUDA,您还需要 NVIDIA 卡/GPU,除非您可以访问远程卡,我会推荐 Coursera 的这门课程:

      Heterogeneous Parallel Programming

      它不仅介绍了 CUDA 和 OpenCL、内存模型、平铺、处理边界条件和性能注意事项,还介绍了基于指令的语言,例如 OpenACC,一种用于在代码中表达并行性的高级语言,大部分内容编译器的并行编程工作(很好开始)。此外,本课程有一个在线平台,您可以在其中使用他们的 GPU,这非常适合开始 GPU 编程而无需考虑软件/硬件设置。

      【讨论】:

        【解决方案5】:

        如果您想编写可以在不同 GPU 设备和 CPU 上执行的可移植代码。您需要使用 OpenCL。

        实际上,要配置内核,您需要用 C 编写主机代码。如果您想为 CUDA 内核编写配置文件,与 OpenCL 相比,配置文件可能会更短。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-24
          • 2011-08-22
          • 2010-09-12
          • 2010-09-18
          • 2011-01-26
          • 2011-05-24
          • 2014-04-14
          • 2015-05-27
          相关资源
          最近更新 更多