【问题标题】:Programming models of different hardware不同硬件的编程模型
【发布时间】:2012-01-06 00:55:59
【问题描述】:

我真的不确定这是否是正确的地方。我对不同类型硬件的不同编程模型感兴趣。

开始是这样的,我展示了我正在使用 NVIDIA CUDA 完成的一些工作。我告诉人们,使用 GPU 作为协处理器的主要问题之一是您必须在主机和 GPU 之间传输数据。然后有几个人继续向我询问有关 AMD“APU”的问题,以及图形核心与常规 CPU 核心位于同一芯片上的事实。

我回避了这些问题,指出 Intel/AMD CPU+GPU 芯片永远不会包含与专用 NVIDIA 卡一样多的图形内核。

问题是,我真的不知道 AMD APU 或 Intel Sandy/Ivy Bridge 芯片的编程模型是什么。

我的问题是:

  1. 如何编写程序以利用 AMD/Intel 芯片上的图形内核?
  2. 这些图形核心真的可以直接访问主机内存吗?
  3. 是否有任何关于这些芯片在 SP 和 DP FLOPS 中的性能类型的信息?
  4. 来自 CUDA,在 NVIDIA GPU 和其他相关芯片的编程之间可以找到哪些相似之处?
  5. Cell 处理器的 SPE 是如何访问内存的,或者它的编程模型与当今的这些 Intel/AMD 芯片相比如何?

【问题讨论】:

  • “Intel/AMD CPU+GPU 芯片永远不会包含与专用 NVIDIA 卡一样多的图形核心。”绝不?也许不是今天,但没有技术原因导致集成到 CPU 中的 GPU 不能拥有与专用 GPU 相同数量的内核。

标签: cuda opencl gpu stream-processing


【解决方案1】:

如何编写程序以利用 AMD/Intel 芯片上的图形内核?

OpenCL,但我认为英特尔没有完成这项工作to use the graphics cores

这些图形核心真的可以直接访问主机内存吗?

是的,但有几点需要注意。

  1. 虽然到主机内存的带宽优于 PCI-e,但不如 GPU 对图形内存的带宽那么多(3-4 倍的差异)。
  2. OpenCL 在某些情况下可能需要它自己的数据副本。对于 GPU,这必须发生(主机内存 -> 图形内存),对于 APU,您要尝试确保它不会发生。据我了解,这很大程度上取决于您如何分配缓冲区。

基本上你已经改变了妥协的条款。过去,启动成本(将数据复制到图形内存)足够高,以至于工作项目需要足够大,才能在向 GPU 发送东西时值得。该成本现在已经下降(没有副本),但内核的性能较低(它们更少,内存带宽更低)。

这是一个有趣的发展,它可能使 GPGPU 技术在更多情况下值得,但没有这样的巨大收益。不过,收益仍然很大。

有没有关于这些芯片在 SP 和 DP FLOPS 中的性能类型的任何信息?

我不愿意重复营销数字,但 AMD A8-3850 的标题数字是 480 GFLOPS

来自 CUDA,NVIDIA GPU 的编程与其他相关芯片的编程有何相似之处?

我没用过 CUDA,所以其他人可能想回答,但我的理解是 CUDA 和 OpenCL 有很多相同的概念(内存模型、内核等),但 CUDA 确实为OpenCL 没有的一方(C++ 主义)

然后 Nvidia 和 AMD 之间存在架构差异,主要是 Nvidia 的内核是可缩放的,而 AMD 是矢量的,因此要在 AMD 上获得最佳性能,您需要编写矢量代码。

【讨论】:

    【解决方案2】:

    我只有使用 CUDA 的经验,答案是基于那次经验和我刚刚快速搜索的一些东西(我也想知道一些答案)。

    1. 我认为它们的编写方式相同。您可以在它们中全部使用 OpenCL,即使硬件实现存在差异,它们也遵循相同的原则。

    2. 我不知道 AMD 和 Intel 的情况如何,但我会说是的。你可以用 CUDA 做到这一点。使用映射的页面锁定主机内存,您可以直接从内核访问主机上的内存。如果您有一个集成的 NVIDIA 系统,NVIDIA 甚至建议您以这种方式使用内存(CUDA C 编程指南的第 5.3.1 节)。

    3. 是的。对于英特尔,请查看第 11 页上的Intel HD Graphics DirectX Developer's Guide (Sandy Bridge)(英特尔 HD3000 最大为 125GFlops)。对于 AMD,他们在每张卡的规格页面上添加了一些价值,例如 AMD Radeon HD6990。您可能可以在某处找到比较。

    4. 正如我所说,我认为编程模型是相似的,OpenCL 还具有内核、主机和设备内存以及线程和工作组标识符的概念(只是一些示例)。为了最大限度地提高性能,您需要了解特定架构,但您可以使用类似的方法处理所有架构。

    5. 不知道...

    【讨论】:

      【解决方案3】:

      我已经在 OpenCL 中使用 Bigdata 完成了工作。

      如何编写程序以利用 AMD/Intel 芯片上的图形内核?

      OpenCL 是一种适用于异构环境的低级编程模型。 它旨在使用系统中的所有计算资源,例如; CPU、GPU、APU、FPGA 等。OpenCL 代码程序也称为内核,运行在 GPU 和 CPU 内核上。

      虽然英特尔主要以其处理器而不是 GPU 而闻名,但他们现在也提供 GPU 很长一段时间了,比如英特尔 GMA 和后来的英特尔高清显卡。

      【讨论】:

        猜你喜欢
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 2015-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多