OpenCL:我可以使用外部库吗?

uci*_*rad 3 opencl

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

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

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

Ani*_*Ani 8

一个OpenCL的节目大多是由两个部分组成

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

它是高达主机代码编译/设置内核,取出/从任何库/源建立的数据,转换为相应的标量,矢量或其他数据类型在OpenCL的内核允许的,运行内核(多个)其处理数据并将结果从计算设备返回给主机(如果需要),然后将这些简单数据类型转换回其他代码消耗所需的任何形式.

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

  • @talonmies我没有说使用OpenCL中的库(我甚至不理解别人怎么想).我应该知道,我已经写了自己的绑定.我说**是的,您可以使用OpenCL或CUDA所需的任何库.它们只是计算库,并不关心您要处理的数据或数据的来源** (2认同)

Rol*_*dXu 6

不,您不能在OpenCL内核中使用外部库.请记住,OpenCl应用程序运行时需要编译任何内核,因为它无法事先知道它正在运行的平台.