2012-03-09 89 views
4

有没有人有维护CPU和GPU的单一代码库的经验? 我想创建一个应用程序,尽可能使用GPU进行一些长时间的计算,但是如果兼容的GPU不在目标机器上,它只会使用常规的CPU版本。如果我可以使用条件编译指令编写代码的一部分,这将编译为CPU版本和GPU版本,那将非常有用。当然,对于CPU和GPU,会有一些不同的部分,但我想将算法的本质保留在一个地方。这是否可能?CPU和GPU相同的代码库

+0

您没有指定操作系统,但我希望这是操作系统特定的。 – dandan78 2012-03-09 09:43:38

+0

您不希望为CPU和GPU使用完全相同的代码结构,因为它们对于两者都不是最佳的。 – 2012-03-09 09:43:53

+2

当然这是可能的抽象意义。它需要一些组织,但它肯定是可行的。例如,查看[Thrust](http://code.google.com/p/thrust/)(现在已与CUDA捆绑在一起)。它为实际计算提供了几个后端。 – Bart 2012-03-09 09:44:05

回答

1

OpenCL是一个基于C的语言。存在运行在GPU(来自NVidiaAMD)和CPU(来自IntelAMD)的OpenCL平台。

虽然可以在GPU和CPU上执行相同的OpenCL代码,但确实需要针对目标设备进行优化。为了获得最佳性能,需要为不同的GPU和CPU编写不同的代码。但是,CPU OpenCL平台可以作为GPU优化代码的低性能回退。

如果您很高兴编写根据目标设备(CPU或GPU)执行的条件指令,那么这可以帮助在多个设备上执行OpenCL代码。

+0

据我所知CUDA也使用C/C++语言的变体。还有新的Visual Studio 11应该支持ATI和NVidia GPU。所以我认为我不仅限于OpenGL,或者我?另一点是我同意写一些CPU/GPU特定的代码,我只是不想保留算法的主要逻辑的两个版本。 – Max 2012-03-09 14:53:18