GPU术语

SP(Streaming Processor)流处理器

流处理器是GPU最基本的处理单元,在fermi架构开始被叫做CUDA core。

SM(Streaming MultiProcessor)

      一个SM由多个CUDA core组成。SM还包括特殊运算单元(SFU),共享内存(shared memory),寄存器文件(Register File)和调度器(Warp Scheduler)等。

可向量化循环

可向量化循环通常是指在编程中,能够被转换为向量操作或矩阵运算的循环结构。

f可以使用向量化操作的for循环。

   例如,如numpy.array([1, 2, 3]) + numpy.array([4, 5, 6]),由NumPy库实现的高效矢量化计算。

     识别出循环体内的操作可以并行执行,并且这些操作通常是对同维度数据执行相同类型的数学运算,比如加法、乘法等。通过将这些操作合并成单个向量操作,编译器或运行时环境可以利用SIMD(单指令多数据流)指令或其他并行计算资源,使得多个数据元素能够同时被处理。

向量化循环体

将可向量化循环转换为使用向量一次性对多个元素进行处理的方式。

grid(网格)

一个Kernel函数对应一个grid。一个Grid中会分成若干个Block。同一Grid下的不同Block可能会被分发到不同的SM上执行。同一个SM也可以执行不同grid的block。

block(线程块)

  一个block可以包含多个wrap,线程块内的线程可以通过共享内存进行通信和数据共享。

 同一个block内的线程会尽可能在同一SM上执行,以利用共享内存,减少通信开销。

thread(线程)

一个 cuda 的并行程序会被以许多个Thread来执行。每个Thread中的局域变量被映射到SM的寄存器上,而Thread的执行由cuda core (SP) 来完成。

cuda中每一个线程都有一个唯一标识id即threadIdx,ID随Grid和Block的划分方式的不同而变化:

// 一维的block,一维的thread
int tid = threadIdx.x + blockIdx.x * blockDim.x;

Grid、Block、Thread是一种软件组织结构,是线程组织的三个层次,并不是硬件的,因此理论上我们可以以任意的维度(一维、二维、三维)去排列Grid,Block,Thread;在硬件上就是一个个的SM或者SP,并没有维度这一说,只是软件上抽象成了具有维度的概念。


wrap(线程束)

    线程束(Warp)是GPU执行程序时的基本调度单位。一个wrap通常包含32个线程,这些线程一起执行相同的指令,但是可以作用于不同的数据。在SIMT模式下,虽然warp中的线程执行相同的指令,但每个线程拥有独立的程序计数器和状态寄存器,以及各自的私有数据。

一个SM的cuda core会分成几个Warp,由Warp scheduler负责调度。

一个Warp中的线程必然在同一个block中,如果block所含线程数目不是Warp大小的整数倍,那么多出的那些thread所在的Warp中,会剩余一些inactive的thread,也就是说,即使凑不够Warp整数倍的thread,硬件也会为Warp凑足。

例:如果一个块中有128个线程,那么线程0-31将在一个Warp中,32—63将在下一个Warp中。

(内存访问)为了优化性能,设计核函数时会考虑wrap局部性,warp内的线程访问相邻的内存地址。减少内存延迟,因为warp中线程访问的数据一起被预取和处理。

(不活跃线程)如果一个block的大小不是32的整数倍,那么最后一个线程束将包含不活跃的线程,但这个线程束仍然作为一个整体被调度和执行。

(挂起与切换)在某些情况下,如等待内存访问完成时,wrap可能会挂起。GPU硬件会在此时切换到另一个可执行的线程束继续执行,以维持计算的连续性,直到所有线程束都执行完毕或遇到等待状态,这称为上下文切换。

线程束发散:线程束内的线程编号连续,并且在遇到条件分支时,即使分支条件不同,所有线程也会一起执行两种可能的路径,但只有符合条件的线程会更新结果,这称为“线程束发散”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIS入门,不使用任何第三方库,纯JavaScript实现自定义多边形平滑曲线算法

前言 本章介绍一下不使用任何第三方库,纯JavaScript实现自定义多边形平滑曲线算法。 在此之前我们先了解一下几种多边形平滑算法。 在上一章中《常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理》,我们通过第三方库chaikin-smoo…

LeetCode热题100|动态规划Part.1|70.爬楼梯、118.杨辉三角、198.打家劫舍

70.爬楼梯 代码随想录原题,看这篇文章:C动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯 118.杨辉三角 题目链接:118.杨辉三角 一刷代码 时间复杂度和空间复杂度都造到 O ( n u m R o w s 2 ) O(num…

使用idea管理docker

写在前面 其实idea也提供了docker的管理功能,比如查看容器列表,启动容器,停止容器等,本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1:管理本地 双击shift,录入service: …

C++算法题 - 二叉树层次遍历

目录 199. 二叉树的右视图637. 二叉树的层平均值102. 二叉树的层序遍历103. 二叉树的锯齿形层序遍历 199. 二叉树的右视图 LeetCode_link 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节…

Java性能优化(一):Java基础-ArrayList和LinkedList

引言 集合作为一种存储数据的容器,是我们日常开发中使用最频繁的对象类型之一。JDK为开发者提供了一系列的集合类型,这些集合类型使用不同的数据结构来实现。因此,不同的集合类型,使用场景也不同。 很多同学在面试的时候&#x…

自刷广告变现,APP收益如何提高

广告变现,是许多APP开发者和运营者追求的目标。然而,对于一些新手来说,如何进行广告变现,特别是如何去自刷广告变现,却是一个让人头疼的问题。实际上,只要在平台的规则内操作,自刷广告也是可以进…

Colibri for Mac v2.2.0激活版:专业级无损音乐播放器

Colibri for Mac是一款专为Mac用户设计的高分辨率无损音乐播放器。它基于BASS技术构建,为用户带来极致的音频体验。Colibri支持所有流行的无损和有损音频格式,如FLAC、MP3、AAC等,确保音乐播放的清晰度和完美度。其独特的清晰比特完美播放技术…

VS2022Qt6通过ODBC连接MySQL

QSqlDatabase是Qt框架中用于管理数据库连接的类。它提供了一种在Qt应用程序中连接和操作数据库的方式。通过QSqlDatabase,可以连接到各种类型的数据库,并执行查询、插入、更新和删除等操作,Qt通过ODBC连接数据库的第一步就是初始化QSqlDataba…

通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu

通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu 一.代码 某种设备在运行pytorch算子时,如果不支持会自动fallback到cpu,输出的tensor.device却不是cpu,我希望能获取到这个状态。本文通过捕获标准输出,根据终端是否输出fallback字符串,判断是否触…

Android内核之Binder通信写操作:binder_thread_write用法实例(七十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

终端安全管理措施有哪些?好用终端安全管理软件推荐(建议收藏)

在当今数字化时代,信息安全已成为企业运营不可或缺的一部分。其中,终端安全为您详细介绍,并推荐几款好用的终端安全管理软件,帮助您更好地保护企业信息安全。管理是确保企业信息安全的重要环节。那么,终端安全管理措施…

Kettle连接Mysql数据库时报错——Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found

一、问题描述 当我们使用ETL工具Kettle需要连接Mysql数据库进行数据清洗操作,在配置好Mysql的连接串内容后,点击【测试】按钮时报错【错误连接数据库 [MysqlTestConnection] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to conne…

如何关闭HDFS的高可用性(HA)

要关闭HDFS的高可用性(HA),你需要执行以下步骤: 1. 停止HDFS服务: 在关闭HA之前,首先需要停止HDFS服务。可以使用以下命令停止HDFS: sudo service hadoop-hdfs-namenode stopsudo service hadoo…

搭建Springboot的基础开发框架-01

本系列专题虽然是按教学的深度来定稿的,但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries:父工程,定义一…

MyBatis高级扩展

五、MyBatis高级扩展 5.1 Mapper批量映射优化 需求Mapper 配置文件很多时&#xff0c;在全局配置文件中一个一个注册太麻烦&#xff0c;希望有一个办法能够一劳永逸。 配置方式Mybatis 允许在指定 Mapper 映射文件时&#xff0c;只指定其所在的包&#xff1a; <mappers&…

算法训练营第60天|LeetCode 647.回文子串 516.最长回文子序列

LeetCode 647.回文子串 题目链接&#xff1a; LeetCode 647.回文子串 代码&#xff1a; class Solution { public:int countSubstrings(string s) {int size s.size();int result 0;vector<vector<int>>dp(size,vector<int>(size,false));for(int i si…

SystemVerilog/Verilog中的仿真延时建模之门延时

提到门延时,就必须重提分布延迟。 分布延迟指模块内信号从(逻辑门的输入到输出)或者(线网的延迟)。这里虽然简短一句话,却涵盖非常大的信息量。 一 门延迟种类 今天我们着重看门延迟。常见门延迟主要有三种: 注意!:如果信号从0/1/z变化到x,那么此时的门传输延迟为上…

C语言 函数概述

好 接下来 我们来讲函数 构建C程序的最佳方式 就是模块化程序设计 C语言中 最基本的程序模块被称为 函数 所以 这个知识点的重要性不言而喻 这里 我们讲个故事 诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服 司马懿只是为使者 诸葛亮的饮食起居 使者感叹…

AI绘图神器!InstantStyle保留风格进行文本到图像生成

在今天的数字化时代&#xff0c;我们可以看到AI技术的应用已经渗透到生活的各个角落&#xff0c;尤其是在视觉艺术领域。最近&#xff0c;一个名为InstantStyle的全新框架引起了广泛关注&#xff0c;它是一个创新的文本到图像生成框架&#xff0c;其核心功能在于能够有效地分离…

【NumPy数组】:深入解析numpy.array()函数

NumPy数组&#xff1a;深入解析numpy.array()函数 引言 在Python的数据科学世界中&#xff0c;NumPy库无疑扮演着举足轻重的角色。NumPy&#xff08;Numerical Python的简称&#xff09;是一个开源的Python库&#xff0c;用于进行大规模数值和矩阵计算&#xff0c;同时提供了…