在”组织并行编程1“中,通过组织并行线程为”2D grid 2D block“对矩阵求和,在本文中通过组织为 1D grid 1D block进行矩阵求和。一维网格和一维线程块的结构如下图:

其中,nx是x方向上的最大线程数,ny是一个线程需要处理的数据元素的个数(因为块是一维的,照理应该没有ny)。所以这里这里只有ix是对线程的真正索引,iy是线程内部数据的索引(这个时候要把线程看成一个主线程,里面有ny个子线程组成的,每个子线程依次处理一个数据。但一定要记住,这个子线程实际上并不存在,是并行里面的串行)。这样每个数据的索引 idx 依然满足idx=iy*nx+ix;其中iy是从0迭代到ny的。

相应的核函数如下:(如果核函数和2Dgrid2Dblock一样,会怎样?)

 __global__ void sumMatrixOnGPU1D(float *MatA,float *MatB,float *MatC,int nx,int ny)
{
unsigned int ix=threadIdx.x+blockIdx.x*blockDim.x;//获得x方向上的网格坐标
if(ix<nx)//防止越界
{
//从这里开始,就已经是线程里面的串行了
for(int iy=;iy<ny;i++)
{
int idx=iy*nx+ix;//得到计算矩阵的坐标idx
C[idx]=A[idx]+B[idx];
}
}
}

一维网格和块的线程配置:

 dim3 block(,);
dim3 grid((block.x-)/block.x+,);

使用以下配置调用核函数:

 sumMatrixOnGPU1D <<< grid, block >>>(d_MatA, d_MatB, dMatC, nx, ny);

设置矩阵数据量的大小为:

 // set up data size of matrix
int nx = << ;
int ny = << ;

运行结果如下所示:(可以到一维网格一维线程块实际分配的线程数是:32*512=16384)

接着按照如下增加线程块的大小:

 dim3 block(,);
dim3 grid((block.x-)/block.x+,);

运行结果如下:

可以看出核函数运行的更快了。

主要参考文献:

  1. 《 CUDA C编程权威指南 》
  2. https://blog.csdn.net/weixin_40427089/article/details/86696707

CUDA编程模型——组织并行线程2 (1D grid 1D block)的更多相关文章

  1. CUDA编程模型——组织并行线程3 (2D grid 1D block)

    当使用一个包含一维块的二维网格时,每个线程都只关注一个数据元素并且网格的第二个维数等于ny,如下图所示: 这可以看作是含有二维块的二维网格的特殊情况,其中块儿的第二个维数是1.因此,从块儿和线程索引到 ...

  2. 【CUDA 基础】2.3 组织并行线程

    title: [CUDA 基础]2.3 组织并行线程 categories: CUDA Freshman tags: Thread Block Grid toc: true date: 2018-03 ...

  3. CUDA编程模型

    1. 典型的CUDA编程包括五个步骤: 分配GPU内存 从CPU内存中拷贝数据到GPU内存中 调用CUDA内核函数来完成指定的任务 将数据从GPU内存中拷贝回CPU内存中 释放GPU内存 *2. 数据 ...

  4. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  5. CUDA编程模型之内存管理

    CUDA编程模型假设系统是由一个主机和一个设备组成的,而且各自拥有独立的内存. 主机:CPU及其内存(主机内存),主机内存中的变量名以h_为前缀,主机代码按照ANSI C标准进行编写 设备:GPU及其 ...

  6. CUDA学习笔记(一)——CUDA编程模型

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm56.html CUDA的代码分成两部分,一部分在host(CPU)上运行,是普通的C代码:另一部分在d ...

  7. CUDA编程之快速入门

    CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架构.做图像视觉领域的同学多多少少都会接触到CUDA,毕竟要做性能速度优化,CUDA是个很重要 ...

  8. CUDA编程之快速入门【转】

    https://www.cnblogs.com/skyfsm/p/9673960.html CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架 ...

  9. cuda编程基础

    转自: http://blog.csdn.net/augusdi/article/details/12529247 CUDA编程模型 CUDA编程模型将CPU作为主机,GPU作为协处理器(co-pro ...

随机推荐

  1. Mac 10.13.6 安装 cocoapods

    卸载pod sudo rm -fr ~/Library/Caches/CocoaPods/ sudo rm -fr ~/.cocoapods/repos/master/ sudo rm -fr Pod ...

  2. 51Nod - 1433 0和5 找规律

    小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前 ...

  3. 关于java的跨平台特性

    Write once, compile anywhere,“一次编译,到处运行”的著名口号大家想必都听说过吧一次编译:把java代码(.java文件)通过编译器转换成字节码(.class文件)(符合j ...

  4. Ubuntu 16.10的root默认密码设置

    1.终端输入sudo passwd 2.输入当前用户密码,回车 3.按照终端提示输入新的root密码并确认 4.su root 输入新的密码 5.修改root密码成功

  5. java8_api_net

    网络编程1    操作ip地址        核心类 InetAddress        相关方法 getByName,getAllByName,getLocalHost    操作socket地址 ...

  6. myEclipse+Spring boot+Hbuilder+jwt Token+mongoDB+企业微信H5开发

    企业微信应用的H5开发 1.参考文档:weUI:http://jqweui.com/ 2.企业微信接口文档:https://work.weixin.qq.com/api/doc#10029 3.百度地 ...

  7. Unity外包团队:U3D与UE我选哪个好?请别再问这种问题了!

    原本预先决定的两家VR游戏公司采访,思熊和星为棋,并没有发现什么共性之初.结果在采访之后却意外发现,两家的经历有着非常相似的地方.他们都是来自于开发游戏所用的引擎的原开发商,比如思熊的主力来自Epic ...

  8. python基础知识16---函数补充

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  9. C++类的组合例子

    Line类调用Point类的两个对象p1,p2作为其数据成员,计算线段长度 组合类构造函数定义的一般形式为: 类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)... {类的初始化} ...

  10. PAT 甲级 1035 Password (20 分)

    1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...