我想使用一些外部库(http://trac.osgeo.org/geos/)对几何对象(GIS)执行一些分析任务。我想在 Cuda 上使用 OpenCL 执行这些任务,以便我可以使用 GPU 的并行功能在大量数据上并行执行这些任务。所以我的问题是:
我可以使用这些库编写内核吗?
另外,如何将这些库的复杂数据结构的对象作为参数传递给内核/(具体来说,如何创建这些复杂对象的缓冲区?
我想使用一些外部库(http://trac.osgeo.org/geos/)对几何对象(GIS)执行一些分析任务。我想在 Cuda 上使用 OpenCL 执行这些任务,以便我可以使用 GPU 的并行功能在大量数据上并行执行这些任务。所以我的问题是:
我可以使用这些库编写内核吗?
另外,如何将这些库的复杂数据结构的对象作为参数传递给内核/(具体来说,如何创建这些复杂对象的缓冲区?
一个OpenCL程序主要由两部分组成
由您的主机代码来编译/设置内核,从任何库/源中获取/设置数据,将其转换为 OpenCL 内核中允许的适当标量、向量或其他数据类型,运行内核处理数据并将结果从计算设备返回到主机(如有必要),然后将这些简单的数据类型转换回其余代码使用所需的任何形式。
所以不- 你不能直接使用内核内部的常规 C++ 库。但是您可以在主机代码中做任何您想做的事情。
不,您不能在 OpenCL 内核中使用外部库。请记住,任何内核都需要在 OpenCl 应用程序运行时进行编译,因为它无法事先知道自己在哪个平台上运行。