2013-05-13 39 views
0

如何在Hadoop中使用OpenCL(用于GPU计算)?OpenCL with Hadoop

我的数据集驻留在HDFS中。 我需要计算5个度量,其中2个是计算密集型的。 所以我想在GPU上使用OpenCL计算这2个指标,其余3个指标使用java map在Hadoop上缩减代码。

如何将数据从HDFS传递到GPU? 或 我的opencl代码如何从HDFS访问数据?

如何从我的Java地图缩减代码中触发OpenCL代码?

如果有人能够共享示例代码,那将会很棒。

+0

正如isti_spl在下面提到的,从Java访问GPU(APARAPI,RootBeer,JOCL或仅仅是普通的旧JNI)有很多选项,尽管它们每个都有自己的特性。我最近发表了关于在GPU上使用Hadoop的工作,并且非常有兴趣了解您计算的度量作为我工作的评估。在GPU上的不同MapReduce框架上还有其他的工作,尽管大部分/全部都没有与Hadoop/HDFS集成。如果您通过[email protected]与我联系,我也可以帮助您加速Hadoop工作。 – agrippa 2013-05-13 16:45:46

回答

1

可以使用jogamp(jocl)从java调用opencl,这基本上是对本地opencl库的封装。您需要先使用java/hadoop库访问数据,然后将它们传输到CLBuffers(这是包含用于与opencl进行通信的缓冲区的java对象),将它们复制到gpu,调用内核,将结果从gpu复制回缓冲区。检查jocl示例。

另一种选择是使用aparapi库。这里的数据处理内核是一个简单的java函数(有一些限制),框架从java字节码 - > opencl转换,所以opencl部分对程序员是隐藏的。当然,并不是所有的东西都可以从java-> opencl中翻译,请检查他们的例子。