3

我想使用一些外部库(http://trac.osgeo.org/geos/)对几何对象(GIS)执行一些分析任务。我想在 Cuda 上使用 OpenCL 执行这些任务,以便我可以使用 GPU 的并行功能在大量数据上并行执行这些任务。所以我的问题是:

  1. 我可以使用这些库编写内核吗?

  2. 另外,如何将这些库的复杂数据结构的对象作为参数传递给内核/(具体来说,如何创建这些复杂对象的缓冲区?

4

2 回答 2

8

一个OpenCL程序主要由两部分组成

  1. 主机代码 - 这是调用 OpenCL 运行时中的函数的常规 C/C++ 代码,其工作方式与任何其他代码一样。此代码需要与可能为您的程序提供(复杂)数据的任何第三方库交互。它还需要将这些复杂的数据类型转换为一组可以由片段 2 处理的简单数据类型(标量向量其他)。
  2. 内核代码 - 由一个编译器组成,该编译器可以将受限内核语言(基于 C99)的文本/二进制表示转换为可以在目标平台上运行的目标代码。这种语言和编译器有很多限制,包括您不能在外部库中包含/链接(可能使用可在主机 CPU 上运行的本机内核

由您的主机代码来编译/设置内核,从任何库/源中获取/设置数据,将其转换为 OpenCL 内核中允许的适当标量、向量或其他数据类型,运行内核处理数据并将结果从计算设备返回到主机(如有必要),然后将这些简单的数据类型转换回其余代码使用所需的任何形式。

所以不- 你不能直接使用内核内部的常规 C++ 库。但是您可以在主机代码中做任何您想做的事情。

于 2012-05-29T22:39:02.547 回答
6

不,您不能在 OpenCL 内核中使用外部库。请记住,任何内核都需要在 OpenCl 应用程序运行时进行编译,因为它无法事先知道自己在哪个平台上运行。

于 2012-05-30T01:29:16.157 回答