机器学习和生物信息学实验室联盟

标题: mapreduce与cuda之我见 [打印本页]

作者: cwc    时间: 2012-3-9 23:29
标题: mapreduce与cuda之我见
本帖最后由 大宝 于 2012-3-9 23:29 编辑

       过去的两个星期,一星期研究MapReduce,一星期研究CUDA。可以说对这两个并行界的明星有了一点粗浅的认识。在这里我就这两个星期来的所感与大家分享。

框架:     
       在 CUDA 的架构下,一个程序分为两个部份:host 端和 device 端。Host 端是指在 CPU 上执行的部份,而 device 端则是在显示芯片上执行的部份。Device 端的程序又称为 "kernel"。通常 host 端程序会将数据准备好后,复制到显卡的内存中,再由显示芯片执行 device 端程序,完成后再由 host 端程序将结果从显卡的内存中取回。说白了,就是CUP与GPU,内存与显存之间的互动。
        MapReduce的框架大家都已经比较熟悉了。简单来讲,就是分为map操作与reduce操作,每个map对应一行,产生的结果汇总到reduce中进行集中处理。

并行模式:
        CUDA在执行的时候是让host里面的一个一个的kernel按照线程网格(Grid)的概念在显卡硬件(GPU)上执行。每一个线程网格又可以包含多个线程块(block),每一个线程块中又可以包含多个线程(thread)。一个Grid里可以有多个(一般为几万)block,一个block里最多可以有512个thread 。因此理论上CUDA的可并行数是非常多的。
            
         MapReduce的并行模式则更为简单,理论上有多少行就有多少个map,也就有多少个并行单位了。

编程难度:
        CUDA一般使用C编写,MapReduce则使用java。C的编程难度比java大,但是使用CUDA编程时,只要懂得C,基本上就能马上上手了。MapReduce则不然,虽然是用java,但是加了自己的封装,有自己的一套的编程规则,因此在编写程序前还需好好学习。
   
         


作者: xmubingo    时间: 2012-3-10 10:25
本帖最后由 xmubingo 于 2012-3-10 10:39 编辑

顶!!!!

CUDA部分:

关于每个block有多少个thread是由具体GPU的计算能力决定的。在CUDA_C_Programming_Guide4.0中的第158页中描述了不同计算能力的芯片,X,Y,Z方向的最大维数以及block中的最大thread数。

另一个,至于一个网格内有多少个block组成这个问题,在第8页中有解释:
  1. The number of thread blocks in a grid is usually dictated by the size of the data being processed or the number of processors in the system, which it can greatly exceed.
复制代码
意思是和GPU内存有关。具体怎么计算你可以研究下,这个计算我目前还没搞清。

最后一个问题,理论上,一个GPU就一个网格,多个GPU就多个网格。如果有多块GPU怎么实现合并,或者分别访问?这也是个问题。比如236服务器上就有5块显卡。
作者: zouquan    时间: 2012-3-10 12:43
很好的技术贴,试用jCUDA了么?
作者: cwc    时间: 2012-3-10 23:31
zouquan 发表于 2012-3-10 12:43
很好的技术贴,试用jCUDA了么?

没有试用,因为即使jcuda也要在gpu端使用c,怎么样都逃不过c,所以就c到底了。
作者: xmubingo    时间: 2012-3-11 10:49
本帖最后由 xmubingo 于 2012-3-11 10:59 编辑
大宝 发表于 2012-3-10 23:31
没有试用,因为即使jcuda也要在gpu端使用c,怎么样都逃不过c,所以就c到底了。


先把你目前的C版本整理下代码,尽量节省内存,不要在for里边滥用变量。读取文件时,列数采用手动定义预设值,不需要程序去确认有多少列(不可靠,耗时),一旦发现列数少于或者多于预设值就报错不要继续。

然后尝试下jCUDA,关键是看下能不能成功。参考它的官网:http://www.jcuda.org/

jCUDA不断在被开发,总会有一天变成熟,也保不准cuda以后出java版本。并且至少java调用可以应用到我们的web服务上。所以,你先试试,有问题再一起讨论。




欢迎光临 机器学习和生物信息学实验室联盟 (http://123.57.240.48/) Powered by Discuz! X3.2