CUDA基础2
二、
1、指令调度,对于多条指令怎样调度让他们运行更快。
对于有冲突的两条指令,采用寄存器重命名技术。
2、指令重排 乱序执行,为了获取最大的吞吐率。 增大功耗 增加芯片面积。
3、缓存,容量越大速度越慢。把数据放在尽可能接近的位置。时间邻近性 空间邻近性。CPU芯片里,缓存就占了很大位置。
4、CPU内部的并行
指令级并行、数据级并行(矢量)、线程级并行。
三、
scalability 可扩展性 在100核心的基础上设计的程序,放在1000核心上,是不是有更好的加速。
五、GPU体系结构
GPU型的核心 和 CPU型的核心 有啥区别?
GPU小处理器
1、取址译码器 2、ALU 3、上下文
延迟隐藏:等待的过程中,切换到其他的线程执行。切换无成本。
上下文要存储起来,GPU提供一块128kb的上下文存储空间。
上下文的切换,可以软件也可以硬件。GPU是硬件管理,上下文贼多。
1、把分支预测 乱序执行之类的部件精简掉
2、多个core 多个ALU
3、大量任务、延迟隐藏
480个 Stream Processor 就是ALU 也叫CUDA Core
分成了15个 cores,每个core分成2组 16个 ALU。15个core,每个叫做一个SM。
另一个架构:
每个SM里有192个CUDA core,
CPU的缓存巨大,多级缓存。
GPU访存带宽非常宝贵。150GB/s,大概是CPU的6倍。但是GPU的吞吐比CPU高出数量级的。
一个SM里分好几组的处理单元,每个处理单元内是32个ALU。
warp是一个线程束。一个warp = 32个连续线程。
grid block warp都是软件层面的概念。都是线程的划分。
同一个block内的线程可以共享shared memory.
线程有local memory,当寄存器不够的时候,就放在local memory,local memory实际上在Global memory。
CPU 缓存 + 控制 + ALU,主要是缓存控制
GPU 主要是ALU
GPU通过硬件创建线程和管理。
问题:线程是怎么排布的?

你怎么知道这是对齐访问的?
SM是硬件层面的概念。

会导致死锁
有的人在楼前门集合,有的在后门集合。这样永远没法集合。
SM中有ALU、上下文的存储空间、shared memory
每个SM可以驻扎巨多的线程,这些线程放在哪里?放在上下文空间里。warp调度,零开销。
SM上同一时刻只有一个warp在执行???一个SM有多少个cuda core?
一个SM里如果只有8个cuda core, 怎么办?每个warp分四批上去
每个SM有几千个寄存器。


local memory 每个thread 都有,用于存储自动变量数组。
第九集,有个矩阵乘,要写一下。 矩阵乘 用shared memory 怎么写,居然忘了都!!
第11集。并行规约,求和的运算,基础的CUDA并行算法,需要补充。
Global Memory访问 有几百个时钟周期。
half warp的所有线程 访问同一地址,有广播。没有冲突。
第12集,矩阵转置,要写代码。23分钟。记得补上。
Occupancy:激活的warp数与最大可容纳warp数的比值?没懂什么意思。

P12, 57分钟的优化
从13集以后不用看了 Fortran 和 cudnn
CUDA基础2的更多相关文章
- CUDA基础介绍
一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi ...
- 【CUDA 基础】6.5 流回调
title: [CUDA 基础]6.5 流回调 categories: - CUDA - Freshman tags: - 流回调 toc: true date: 2018-06-20 21:56:1 ...
- 【CUDA 基础】6.3 重叠内和执行和数据传输
title: [CUDA 基础]6.3 重叠内和执行和数据传输 categories: - CUDA - Freshman tags: - 深度优先 - 广度优先 toc: true date: 20 ...
- 【CUDA 基础】6.1 流和事件概述
title: [CUDA 基础]6.1 流和事件概述 categories: - CUDA - Freshman tags: - 流 - 事件 toc: true date: 2018-06-10 2 ...
- 【CUDA 基础】6.2 并发内核执行
title: [CUDA 基础]6.2 并发内核执行 categories: - CUDA - Freshman tags: - 流 - 事件 - 深度优先 - 广度优先 - 硬件工作队列 - 默认流 ...
- 【CUDA 基础】6.0 流和并发
title: [CUDA 基础]6.0 流和并发 categories: - CUDA - Freshman tags: - 流 - 事件 - 网格级并行 - 同步机制 - NVVP toc: tru ...
- 【CUDA 基础】5.6 线程束洗牌指令
title: [CUDA 基础]5.6 线程束洗牌指令 categories: - CUDA - Freshman tags: - 线程束洗牌指令 toc: true date: 2018-06-06 ...
- 【CUDA 基础】5.4 合并的全局内存访问
title: [CUDA 基础]5.4 合并的全局内存访问 categories: - CUDA - Freshman tags: - 合并 - 转置 toc: true date: 2018-06- ...
- 【CUDA 基础】5.3 减少全局内存访问
title: [CUDA 基础]5.3 减少全局内存访问 categories: - CUDA - Freshman tags: - 共享内存 - 归约 toc: true date: 2018-06 ...
- 【CUDA 基础】5.2 共享内存的数据布局
title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...
随机推荐
- Java方法之可变参数
可变参数[不定项] JDK 1.5开始,Java支持传递同类型的可变参数给一个方法. 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数 ...
- Software--BigData--StreamingData
2018-03-29 16:13:34 一 : 流系统分层架构设计 二: 分层技术选型分析 三:底层 -- 服务配置和协调 ZooKeeper
- jmeter非GUI模式压测并生成测试报告
关于jmeter非GUI模式压测并生成测试报告 1.脚本调通后,在DOS命令栏进入脚本存在的位置 如果不想通过DOS进入脚本路径,则可以直接指定执行路径,命令如下: JMeter默认去当前目录寻找脚本 ...
- 【2020NOI.AC省选模拟#7】A. t1
题目链接 原题解: 由于$+$满足幂等性,我们可以设$f_{i,j}$为从$i$号点向根$2^j$个点的权值之和,并且倍增计算出$f$.在查询是,可以像ST表一样用至多四个$f$中的路径拼出询问路径. ...
- Delphi中var和out
var: 传递的是参数的地址 out: 以返回值的形式返回结果,类似函数的效果:可以实现一个函数返回多个值
- 从Sql Server转战Oracle 之 变量声明
1 --两种声明方法:没有sql所谓的select或者select @para from table 以及 set 赋值,且赋值的时候需要在begin end事务内 2 一 直接声明 3 declar ...
- SQL-运算
dual表可以进行运算select * from dual; 算数运算 + - * /select 5 + 6 as aaa ,6 - 3 as bbb ,5 * 7 as ccc ,9/2 as d ...
- Django 介绍及环境准备
Django介绍: Django(发音:[`dʒæŋɡəʊ])是基于Python的Web框架,它是开源的,免费的. Django使构建更好的web应用程序变得更容易.更快.代码更少 django的MT ...
- ubuntu 安装错误解决
1. ubuntu 安装错误解决: Preparing to unpack .../apport_2.20.9-0ubuntu7.15_all.deb .../var/lib/dpkg/info/ap ...
- 通过flask完成web实时播放视频
def gen(): r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, password=PASS_WORD) ...