在编写openCL代码时,它在没有GPU的单核机器上如何运行?

在编写openCL代码时,它在没有GPU的单核机器上如何运行?,c,parallel-processing,opencl,raytracing,C,Parallel Processing,Opencl,Raytracing,大家好, 我目前正在为一个研究项目将光线跟踪器从FORTRAN 77移植到C 在移植了要点之后,问题是如何进行并行化。 在实验室里,我可以使用两台不同的Opteron机器,有2到8个内核,但没有GPU(目前)。 我们正在运行64b gentoo GPGPU版本是(非常)理想的,但由于项目中只有一个程序员,所以不能单独维护非GPU和GPU版本。 此外,该代码将被GPLed,我们希望看到其他可能拥有截然不同硬件的人使用它 因此,整个程序必须易于编译/运行,而无需GPU甚至多核系统。 OpenCl似乎

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

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

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

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

有没有可能在没有openCL的情况下轻松编译代码?

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

有没有可能以一种不用openCL就可以轻松编译的方式编写代码

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

该代码在单核或32b系统上如何执行

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

但是,不要期望在相同的内核/工作组设置下,每个设备都能获得100%的性能。可能会有很多特定于设备的调整()


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

利用OpenCL和C99的通用性,并使用预处理器处理这些差异可能是可行的。然后,您将拥有一个C99和OpenCL代码库。这就是我们所采取的方法


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

听起来不错。我将更详细地查看SmallPT GPU,看看它是如何工作的-谢谢!