CUDA入门学习(二)

来源:互联网 发布:最佳情侣网络歌曲 编辑:程序博客网 时间:2024/06/05 19:18

         在前面的例子中,只是简单的介绍如何在GPU中执行GPU代码,介绍了核函数及CUDA的一些接口函数,并未涉及到并行计算的概念。这次总结一下CUDA是如何做并行计算的吧,我们还是举简单的例子,以两个向量相加来解释线程(thread)是如何运行的吧。

一、SUMMING VECTORS

         

主函数如下:

               

                

        1.我们使用cudaMalloc()分配三个GPU内存,输入数据dev_a,dev_b和输出dev_c

        2.我们使用cudaFree()函数来释放内存。

        3.我们使用cudaMemcpy()函数将数据从host拷贝到device,或者将数据从device拷贝到host,分别使用标志cudaMemcpyHostToDevice和cudaMemcpyDeviceToHost。

        4.通过主函数调用核函数add<<<N,1>>>( dev_a, dev_b, dev_c)。其中尖括号内部参数1代表Blocks(线程块)数目,参数2代表Threads(线程)数目,这两个参数都可以是二维或者三维的。然后将device的指针传到核函数当中去。事实上,在上述核函数中,并行计算会以如下方式并行。

          

二、CUDA内建变量

     在并行运算时,会出现网格(grid),线程块(block),线程(thread)三个常见的概念。一个网格下包含一个或多个线程块,一个线程块下包含多个线程。在使用时 block和grid都可以用三维的向量表示,其中block向量的元素是thread,grid的元素是block。当然线程块内的线程数不是无限的,如先前的G80一个线程块内线程数最多为512个,Fermi架构下的线程块的线程数增加到1024个,Kepler架构下的线程数达到了2048个。如下图所示:

         接下来我们看看核函数实现的内容:

        

           如同之前我们使用CUDA 关键字__global__,在这里出现了新的blockIdx.x,这是CUDA的内建变量。因为我们之前传入的add<<<N,1>>>(),其中N和1都是以为的,所以只需要对一维进行索引,这里的blockIdx代表对N的索引。我们在看看几个其他的内建变量:

       1.threadIdx(.x/.y/.z代表几维索引):线程所在block中各个维度上的线程号。

       2.blockIdx(.x/.y/.z代表几维索引):块所在grid中各个维度上的块号。

       3.blockDim(.x/.y/.z代表各维度上block的大小):block的大小即block中线程的数量,blockDim.x代表块中x轴上的线程数量,                     blockDim.y代表块中y轴上的线程数量,blockDim.z代表块中z轴上的线程数量。

       4.gridDim(.x/.y/.z代表个维度上grid的大小):grid的大小即grid中block的数量,gridDim.x代表grid中x轴上块的数量,gridDim.y代            表grid中y轴上块的数量,gridDim.z代表grid中z轴上块的数量。

       如图所示:

        我们以二维为例,比如我们有一个1000 *1000的矩阵,我们将矩阵进行分块,每块大小为100*100,那么矩阵就可以分成10*10的块,在这里blockDim.x = blockDim.y = 100,gridDim.x = gridDim.y = 10。


参考文献:

            [1] Addison.Wesley.CUDA.By.Example.Jul.2010.ISBN.0131387685

       [2] http://blog.csdn.net/qq_25819827/article/details/51956774
       [3] http://www.cnblogs.com/shrimp-can/p/5051832.html





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买家说我运费险没赔要投诉我怎么办 包邮有运费险的东西想退货怎么办 高锰酸钾沾到龟头上形成黑点怎么办 淘宝发货包邮买家退款运费怎么办 京东实名认证的手机号不用了怎么办 淘宝退货在自提柜 卖家不取怎么办 如果买家退货那卖家送的东西怎么办 陆金所注册手机号被占用要怎么办 重新登录而忘记密码和验证码怎么办 手机清理垃圾清掉的照片怎么办 收件人名字写错了拿不到快递怎么办 档案回原籍收件人写错了怎么办 寄申通快递收件人电话写错了怎么办 第三方支付倒闭了用户的钱怎么办啊 京东配送日期内货没送到家怎么办 拼多多拼单不成功优惠券退吗怎么办 退货退错了不发回来怎么办 商家总是不发退货地址过来怎么办 美团外卖下单后电话没改怎么办 从日本邮寄东西到中国被扣怎么办 淘宝拒收卖家收到货不退款怎么办 拒收的快递丢了卖家拒绝退款怎么办 京东买了东西超过七天想退货怎么办 微信买东西支付宝付款被骗怎么办 京东购物己付款卖家没发货怎么办 天猫先行退款卖家拒收怎么办 京东金条提前还款借不了怎么办 网银密码输入六次错误怎么办 迷失在时间和空间的交界处该怎么办 用卫生巾过后瘙痒起疹子了怎么办 装修公司倒闭了装修保修卡怎么办 丈夫把妻子的车抵押出去了怎么办 亚马逊海外购超过两万的额度怎么办 增值税申报表进项税转出忘填怎么办 一般纳税人注册下来后未营业怎么办 增值税税率把3错开成了5怎么办 在义乌做压痕加工老板拖欠钱怎么办 蓝洞棋牌是赌博输了几万怎么办 夏季来月经用卫生巾外阴瘙痒怎么办 用洗衣机洗衣服忘掏卫生纸了怎么办 剖腹产后一个月了还有血怎么办