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

时间:2012-05-29 22:29:08

标签: opencl

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

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

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

2 个答案:

答案 0 :(得分:8)

OpenCL计划主要由两部分组成

  1. 主机代码 - 这是在OpenCL运行时调用函数的常规C / C ++代码,其工作方式与其他任何代码一样。此代码需要与可能为您的程序提供(复杂)数据的任何第三方库进行交互。它还需要将这些复杂的数据类型转换为一组可由第2部分处理的简单数据类型(scalarvectorother)。
  2. 内核代码 - 由一个编译器组成,该编译器可以将受限内核语言(基于C99)的文本/二进制表示转换为可以在目标平台上运行的目标代码。这种语言和编译器有很多restrictions,包括你不能在外部库中包含/链接这一事实(可能与native kernel that is runnable on the host CPU 有关)
  3. compile/setup the kernel的主机代码决定,从任何库/源获取/设置数据,将其转换为OpenCL内核允许的相应标量,向量或其他数据类型,{{3}处理数据并将结果从计算设备返回给主机(如果需要),然后将这些简单数据类型转换回其他代码消耗所需的任何形式。

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

答案 1 :(得分:6)

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