CUDA学习笔记之Tesla图形与计算架构和通用计算模型
来源:互联网 发布:python 读取exe文件 编辑:程序博客网 时间:2024/05/07 08:28
Tesla图形与计算架构:流处理器阵列(scalable streaming processor array,SPA)+存储器系统,由片上互联网络连接; 存储器系统:存储器控制器(MMC)、固定功能的光栅操作单元(raster operation processors,ROP),二级纹理缓存; MMC:负责控制片外的DRAM显存,每个存储器可以提供64bit位宽; ROP:对存储器内的数据进行颜色和深度操作; SPA可以将计算得到的深度与颜色信息发送给ROP,也可以直接读写DRAM或者通过纹理缓存以制度方式访问DRAM; SPA:若干个TPC(Thread Processing Cluster,线程处理器群)构成; 2~3个SM(Streaming Multiprocessor)组成一个TPC; G200:10个TPC,每个TPC中有3个SM; SM:大致相当于一个具有8路SIMD的处理器,指令宽度不是是32(即warp size); 每个SM具有独立的完整前端,包括取址、译码、发射和执行单元等; 同一个TPC中的SM共享存储器流水线; 包含8个线程处理器(Thread Processor,TP或者成为SP); Sp有独立的寄存器和指令指针,没有取指和调度单元构成的完整前端,类似于当代多线程CPU中的一条流水线; CUDA编程模型中:整个Grid被加载到SPA上,再将整个Block分发到各个SM上,TPC是透明的; 相互之间不能通信的粗粒度并行block 被分发到各个SM上,每个Block内的细粒度写作线程数量因为SIMT的自动向量化可以灵活调整; 在通用计算中,存储器带宽往往成为制约计算性能提高的瓶颈; Tesla通用速算模型: CTA:(Collaborative Tread Arrays), CUDA程序的任务分发单位,CTA与block是同一事物在执行模型和编程模型中的表述; 同一个block中的线程使用同一块shared memory; 一个CTA里的线程必须被分配到同一个SM中; 目前硬件下,CTA最多由16个warp组成(512个线程); 目前架构下,函数执行参数和参数要通过shared memory 传递到各个CTA:因为shared memory尺寸较大,并且可以读写; Compute Scheduler:计算分发单元; 采用轮询算法,尽可能平均地将各个CTA分发到各个SM上,同时在每个SM上分配尽可能多的CTA; 知识点: 同一个SM上可以存在多个warp上下文,但是一个时刻只有一个warp被执行; 一个warp中所有线程必须属于同一个CTA; 一个SM上应该保持多个CTA上下文,就可以比只有一个CTA的上下文更好的隐藏延时; 现有架构中一个SM中至少有6个active warp才能隐藏延迟; 属于同一个warp的thread之间进行通信,不需要进行栅栏同步(barrier); 发射逻辑电路使用一个加权算法计算各条warp指令的优先级; 优先级受到warp所在的block、warp指令类型和其他一些因素的影响; 当一条指令需要用到的register和shared memory资源都处于可用状态的时候,这条指令的状态被设置为就绪状态(ready); 发射逻辑单元从指令级中选择优先级最高的就绪态指令; 如果一个warp中有几条处于就绪状态的指令等待执行,这些指令会被连续发射,知道重新计算warp的状态和优先级,或者发射逻辑选择了来自另一个warp的指令; Shared memory:用于实现block内的thread通信; 被组织为16个bank; Global memory中的数据要先写入register,才能转移到shared memory; 执行单元: SM中最主要的执行资源为8个32bit ALU和MAD; Sp: 一个branch单元和一个ALU或者MAD; ALU和MAD需要4个sp周期才能执行完毕:首先取出数据需要一个时钟周期,然后利用3个时钟周期进行运算; 特殊运算单元:DPU(Double Precision Unit),用来处理寄存器中的64位浮点和整形操作数的64bit乘加单元;在GT200中每个SM中只有一个; SFU: 执行超越函数、插值、倒数、平方根倒数、正弦、余弦以及其他特殊运算;cuda中提供的一些带有”_”前缀的函数由SFU只需将能够;SFU指令大都有16个时钟周期的延迟; 双发射并行:在NVIDIA的微架构设计中,sp执行一条指令再怎么也有至少两个核心周期的延迟,sm每个核心周期能够发射一条指令; 当sm发射一条指令后,sp经过一段时间才能执行完毕,此时sm再发射一条指令,这种机制成为双发射并行(dual issue); 双发射不仅提高了使用率,但是也增加了寄存器的带宽压力; 纹理,渲染和存储器流水线: 进行数据输入输出; 存储器流水线:纹理流水线、加载流水线和渲染输出流水线; 纹理流水线和加载流水线进行读取操作,ROP流水线进行写入操作; 纹理缓存与CPU缓存比较: Cpu缓存为一维的,存储器地址为线性的;典型的纹理是二维连续的,读取地址也必须是在两个维度上连续分布的;加载时要将二维纹理地址映射到一维; 纹理缓存是只读的,并且不满足缓存数据的一致性; 纹理缓存的主要功能是节省带宽和功耗,CPU缓存是为了实现较低的访问延迟;
- CUDA学习笔记之Tesla图形与计算架构和通用计算模型
- CUDA学习笔记之Tesla图形与计算架构和通用计算模型
- 通用计算程序在Tesla架构上的执行
- GPU通用计算与CUDA
- 数据结构与算法学习笔记--计算模型
- CUDA范例精解通用GPU架构-(1)Tesla服务器Kepler架构和万年的HelloWorld
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- CUDA学习笔记之 CUDA存储器模型
- Storm架构基础之ApacheStorm计算模型详解与实战
- 通用计算时代来临 论CUDA与OpenCL的异同
- 通用计算时代来临 论CUDA与OpenCL的异同
- Java字节序
- Boost智能指针——weak_ptr(转自http://www.cnblogs.com/TianFang/archive/2008/09/20/1294590.html)
- CKeditor配置使用(转)
- 在c中处理utf-8
- Windows下获取loopback上的包
- CUDA学习笔记之Tesla图形与计算架构和通用计算模型
- SQLSERVER游标及循环语句
- 我们分开了
- 小谈MySQL字符集
- 如何学好Delphi
- 如何用正确的方法来写出质量好的软件的75条体会
- C语言高效编程的几招
- JNDI 在 J2EE 中的角色
- AO/AE 中对象模型图 (OMD) 阅读指南(转)