在”组织并行编程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. Dictionary用法

    https://www.cgjoy.com/thread-106639-1-1.html 1.新建字典,添加元素  dictionary<string,string>dic=newdict ...

  2. 多线程系列之自己实现一个 lock 锁

    我们面试中经常会被问到多线程相关知识,这一块内容往浅了说大家都会,但是一问到底层实现原理,我们往往就一脸懵逼. 这段时间准备好好学习多线程,接下来会写一系列关于多线程的知识. 我们首先要了解线程,百度 ...

  3. 查看win10系统产品密钥

    查看win10系统产品密钥 1.win+R 输入Regedit运行注册表 2.找到(在HKEY_LOCAL_MACHINE–>SOFTWARE–>Microsoft–>Windows ...

  4. python pip安装其他模块到中途失败问题

    当网速很差时,pip安装到中途总是出现一大片红色然后失败.而且往往安装下载很久,失败了就要从新开始,失败如下 就是,当你出现这个错误Could not find a version that sati ...

  5. Python 模块调用的变量与路径

    自己编写的python代码经常需要分模块文件以及包,梳理一下调用顺序.执行顺序.工作路径.函数与变量等 工作路径 首先是工作路径,当模块代码放在统一的包内的时候,其路径和外层的包路径不同,当作为主调用 ...

  6. js获取世界不同时区的当前时间

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. vim-go 安装

    vim-go 安装 https://studygolang.com/articles/3229

  8. Linux----------httpd的简介和安装及使用

    目录 一.httpd的简介 二.常用httpd版本特性 (1)httpd-2.2 (2)httpd-2.4 三.httpd的工作模型 四.httpd的程序环境即配置文件和重要目录 1.配置文件和重要目 ...

  9. Magento 1.9.x 子分类无法访问

    app/code/core/Mage/Catalog/Model/Url.php 大概 ~807: Change: if ($product->getUrlKey() == '' &&a ...

  10. 出现 OSError: symbolic link privilege not held的解决方案

    jupyter notebook  出现 OSError: symbolic link privilege not held问题时  以管理员方式重新打开prompt.