Spark + Aparapi = SparkCL
- 其中Spark都很熟悉了,是云计算框架,将Hadoop 里的Mapreduce优化了。
- Aparapi 是Java版的Opencl,不用JavaCL的原因是,JavaCL需要更多底层的操作,而我们的目的只是调用一下GPU进行计算,并不管具体GPU并行的事情。另外,Aparapi有一个容错机制,就是如果没有检测到GPU硬件的话,就会返回给JVM来运行(在源码KernelRunner.java 333行)。
SparkCL的改进
经过example里代码的对比,可以发现:SparkCL是通过自定义mapCL函数或者reduceCL函数来实现GPU并行。也就是说,sparkCL通过自定义mapCL/ reduceCL改写transformation。
其中mapCL/ reduceCL 里自定义funcX函数,这个函数在spark kernel实例化的时候,可以动态调用具体的mapParameter函数和mapReturnValue函数。mapParameter主要是set GPU参数,比如Range,mapReturnValue是执行具体的任务。
最后mapCL/ reduceCL 再调用spark的map(funX)和reduce(funX)
以下是mapCL代码: