我可以使用外部OpenCl库吗?

我可以使用外部OpenCl库吗?,opencl,Opencl,我想使用一些外部库(http://trac.osgeo.org/geos/)对几何体对象(GIS)执行某些分析任务。我想在Cuda上使用OpenCL执行这些任务,这样我就可以使用GPU的并行功能在大数据集上并行执行这些任务。所以我的问题是: 我可以使用这些库编写内核吗 另外,如何将这些库的复杂数据结构的对象作为参数传递给内核/(具体来说,如何创建这些复杂对象的缓冲区 程序主要由两部分组成 宿主代码-这是在OpenCL运行时调用函数的常规C/C++代码,与任何其他代码一样工作。此代码需要与可能为您

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

  • 我可以使用这些库编写内核吗

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

  • 程序主要由两部分组成

  • 宿主代码-这是在OpenCL运行时调用函数的常规C/C++代码,与任何其他代码一样工作。此代码需要与可能为您的程序提供(复杂)数据的任何第三方库接口。它还需要将这些复杂数据类型转换为一组简单数据类型(,)可通过工件2进行加工
  • 内核代码-由一个编译器组成,该编译器可以将受限内核语言(基于C99)的文本/二进制表示形式转换为可在目标平台上运行的目标代码。该语言和编译器有许多功能,包括不能在外部库中包含/link(可能使用)
  • 由您的主机代码从任何库/源获取/设置数据,将其转换为OpenCL内核中允许的适当标量、向量或其他数据类型,以处理数据并将结果从计算设备返回到主机(如果需要)然后将这些简单的数据类型转换回代码其余部分所需的任何形式


    < St>No.<强> -您不能直接从内核中使用常规C++库<强>。但是,您可以在主机代码中任意操作。

    < P>不,在OpenCL内核中不能使用外部库。记住,当OpenCL应用程序运行时,任何内核都需要编译,因为它不知道什么平台。“CUDA上的OpenCL”是什么意思?CUDA和OpenCL是两个完全不同的东西。你想问什么?你的问题不一定只有一个答案适用于两者。我的意思是,我正在使用OpenCL为Nvidia图形卡开发(或者我不知道在Cuda驱动程序之上使用OpenCL构建应用程序是正确的)您的第一点是错误的(或者至少与上面的问题1不符)。你不能只在CUDA或OpenCL内核中使用任何主机库。目前,两种编程模型都不支持外部链接的概念。但我在这篇文章中读到,我可以包含头文件。这对我不起作用吗???我可以包含为x86上的ARM处理器编写的库的头文件,但该库不起作用k、 类似地,您可以在内核中包含x86库的头,但这并不意味着它将在GPU上运行。(这是一个过于简化的示例,但您明白了重点。该库需要专门为OpenCL/CUDA编写)@Talonmes我没有说使用OpenCL内部的库(我甚至不明白有人怎么会这么想)。我应该知道,我已经编写了自己的绑定。我说是的,你可以在OpenCL或CUDA中使用任何你想要的库。它们只是计算库,不关心你想要处理什么数据或数据来自哪里from@PaulS-我不认为OP想要直接使用内核中的库。我已经澄清了我的ans我们来反思一下。虽然你不能在内核中使用外部库,但你可以通过在内核和外部库之间传递设备指针,轻松地将外部库与OpenCL内核连接起来。谷歌“OpenCL gpu库”可以找到一些。