4

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

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

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

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

4

2 回答 2

8

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

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

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

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

与任何本机程序一样好运行。您可以通过 OpenCL 向量类型访问 SIMD。您可以通过工作组配置处理线程。

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

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

于 2011-01-31T11:53:05.280 回答
2

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

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

于 2011-01-31T15:53:02.987 回答