阅读 《大规模并行处理器程序设计》影印版心得 第四章 CUDA Threads

本文主要是介绍阅读 《大规模并行处理器程序设计》影印版心得 第四章 CUDA Threads,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

4.1 CUDA  Thread Organization

 

具体例子:一个grid中有N个block,但是以一维的形式组织起来。每一个block中有M个线程,也以一维的形式组织起来。则任何一个block中的线程可以号可以用公式 threadID = blockIdx.x *blockDim.x +threadIdx.x来计算。

 

两个变量:gridDim和blockDim, gridDim.x, gridDim.y

 

注意:grid中的block用二维方式来组织,block中的thread用三维形式来组织。每一个block中最多有512个线程thread

 

 

4.2 Using blockIdx and threadIdx

 

通过tile技术(对数据的细分)增加线程数量,使用多block创建更多线程thread

 

这里的一个难点是如何通过blockIdx和threadIdx来计算应该取两个相乘矩阵的哪一行和哪一列。图4-3应该有很好的解释作用。这里的关键是grid中各个block的排列关系和每个block中各个thread的排列关系,图4.2中是标准的排列方式。 -- 最好测试一下,换一种排列关系的效果? 正确与否? 如果正确,效率是否有区别?

 

 

4.3 Synchronization and Transparent Scalability

 

这一块比较简单。主要是利用函数_syncthreads()来实现同一个block的不同线程之间的同步。需要注意的是,if-then-else中的_syncthread()函数如果两个分支都有,则两个分支中的算两个同步点。

 

还有一个,就是因为有同步的可能,则同一个block中的thread将被分配同样的资源量。因此,系统同时能够运行的block的个数就跟资源挂钩了。当资源很多时,同时运行的block个数就可以很多;反之,就可以很少。 貌似这个多少不由程序员控制,显卡自己能控制。

 

4.4 Thread Assignment

 

SM streaming multiprocessor  在GPU中,执行资源被组织为SMs

 

在GT200芯片显卡中,最多可以有30个SM,每个SM最多可以容纳8个block,每一个SM最多可以容纳1024个threads。 哪个先到算哪个。

 

SP和SM的关系?

 

4.5 Thread Scheduling and Latency Tolerance

 

在GT 200显卡中,当一个block被放到一个SM上运行时,该block又被分为32个线程一组的warps. warp是SM中线程调度的基本单位。

 

latency hiding  调度非等待的warp进入执行态,使SM始终处于忙状态,提高了效率,降低了warp读取global memory时的延迟开销。主要是warp的调度是零费时的,不会引入任何额外开销

 

因此,为了性能优化,我们可以考虑增加一个SM中的线程数,因此增加其warp数量。 这样,可供调度的warp增加了,SM忙的概率就将增加。

 

 

 

 

 

 

 

这篇关于阅读 《大规模并行处理器程序设计》影印版心得 第四章 CUDA Threads的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194223

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

【阅读文献】一个使用大语言模型的端到端语音概要

摘要 ssum框架(Speech Summarization)为了 从说话人的语音提出对应的文本二题出。 ssum面临的挑战: 控制长语音的输入捕捉 the intricate cross-mdoel mapping 在长语音输入和短文本之间。 ssum端到端模型框架 使用 Q-Former 作为 语音和文本的中介连接 ,并且使用LLMs去从语音特征正确地产生文本。 采取 multi-st

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题和提供解决方案,供大家参考。 问题分析——找不到ONNX Runtime GPU 动态库 首先直接运行python程序

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

处理List采用并行流处理时,通过ForkJoinPool来控制并行度失控的问题

在使用parallelStream进行处理list时,如不指定线程池,默认的并行度采用cpu核数进行并行,这里采用ForJoinPool来控制,但循环中使用了redis获取key时,出现失控。具体上代码。 @RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)@Slf4jpublic class Fo