【问题标题】:When writing openCL code, how does it perform on a single-core machine without a GPU?编写openCL代码时,在没有GPU的单核机器上表现如何?
【发布时间】:2011-01-31 11:30:05
【问题描述】:

大家好, 我目前正在将一个光线追踪器从 FORTRAN 77 移植到 C 用于研究项目。

在移植了要点之后,问题是我们如何进行并行化。
在实验室中,我可以使用几台不同的 Opteron 机器,它们有 2 到 8 个内核,但没有 GPU(目前)。 我们正在运行 64b gentoo。

GPGPU 版本将是(非常)理想的,但项目中只有一名程序员,维护单独的非 GPU 和 GPU 版本不是一种选择。
此外,该代码将采用 GPL 协议,我们希望看到它被其他硬件可能完全不同的人使用。

因此,整个程序必须易于编译/运行,无需 GPU 甚至多核系统。
OpenCl 似乎是一个不错的选择,因为它可以在没有 GPU 的机器上运行,但是这段代码将如何在单核或 32b 系统上执行呢?
是否可以将代码编写成无需 openCL 即可轻松编译的方式?

【问题讨论】:

    标签: c parallel-processing opencl raytracing


    【解决方案1】:

    目前有四种主要的 OpenCL 实现:AMD、nVidia (Cuda)、Apple、Intel,而且很快就会有更多:OpenCL implementations。 OpenCL 不是专门针对 GPU 计算的语言,它被设计为异构设备的通用计算语言。例如。即使没有 GPU 和任何非 AMD CPU(当然是 x86),您也可以使用 AMD 实现。

    是否可以将代码编写成无需 openCL 即可轻松编译的方式?

    正如你所说,这是一个单人项目,我怀疑这是否值得。

    此代码将如何在单核或 32b 系统上执行?

    任何本地程序都可以运行。您可以通过 OpenCL 向量类型访问 SIMD。并且可以通过工作组配置来处理线程。

    但不要指望您可以从具有相同内核/工作组设置的每台设备中获得 100% 的性能。可以进行很多特定于设备的调整 (OpenCL CPU Tutorial for a start)。

    我会说去 OpenCL。它为您的应用程序提供了更多的可能性,并且独立于平台。

    【讨论】:

      【解决方案2】:

      利用 OpenCL 和 C99 的共性并使用预处理器处理差异可能是可行的。然后,您将拥有 C99 和 OpenCL 代码库。这是SmallPT-GPU中采用的方法

      但是,CPU 的 OpenCL 实现应该与任何可移植的标量 C 代码一样好,如果您使用 OpenCL 的向量类型来支持可移植的 SIMD,则更好。

      【讨论】:

      • 听起来不错。我会更详细地检查 SmallPT-GPU 以了解它是如何工作的 - 谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      相关资源
      最近更新 更多