SparkCL简介

SparkCL源码链接

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代码:


        public  JavaRDD mapCL(final SparkKernel kernel) 
    {

        Function funcX = new Function()
        {

            @Override
            public R call(T v1) throws Exception 
            {
                final SparkKernel cachedKernel = (SparkKernel) SparkCLCache.getInstance().tryGetCachedKernelVersion(kernel);
                cachedKernel.mapParameters(v1);
                exclusiveExecKernel(cachedKernel);
                return cachedKernel.mapReturnValue(v1);
            }

        };

        return (JavaRDD) m_data.map(funcX);
    }

你可能感兴趣的:(SparkCL简介)