CUDA学习笔记之Tesla图形与计算架构和通用计算模型

来源:互联网 发布:python 读取exe文件 编辑:程序博客网 时间:2024/05/07 08:28

Tesla图形与计算架构:流处理器阵列(scalable streaming processor arraySPA+存储器系统,由片上互联网络连接;

存储器系统:存储器控制器(MMC)、固定功能的光栅操作单元(raster operation processorsROP),二级纹理缓存;

            MMC:负责控制片外的DRAM显存,每个存储器可以提供64bit位宽;

            ROP:对存储器内的数据进行颜色和深度操作;

            SPA可以将计算得到的深度与颜色信息发送给ROP,也可以直接读写DRAM或者通过纹理缓存以制度方式访问DRAM

SPA:若干个TPC(Thread Processing Cluster,线程处理器群)构成;

2~3SMStreaming Multiprocessor)组成一个TPC

G20010TPC,每个TPC中有3SM

SM:大致相当于一个具有8SIMD的处理器,指令宽度不是是32(即warp size;

每个SM具有独立的完整前端,包括取址、译码、发射和执行单元等;

同一个TPC中的SM共享存储器流水线;

包含8个线程处理器(Thread ProcessorTP或者成为SP);

Sp有独立的寄存器和指令指针,没有取指和调度单元构成的完整前端,类似于当代多线程CPU中的一条流水线;

CUDA编程模型中:整个Grid被加载到SPA上,再将整个Block分发到各个SM上,TPC是透明的;

                  相互之间不能通信的粗粒度并行block 被分发到各个SM上,每个Block内的细粒度写作线程数量因为SIMT的自动向量化可以灵活调整;

在通用计算中,存储器带宽往往成为制约计算性能提高的瓶颈;

Tesla通用速算模型:

CTA(Collaborative Tread Arrays), CUDA程序的任务分发单位,CTAblock是同一事物在执行模型和编程模型中的表述;

      同一个block中的线程使用同一块shared memory

      一个CTA里的线程必须被分配到同一个SM中;

      目前硬件下,CTA最多由16warp组成(512个线程);

      目前架构下,函数执行参数和参数要通过shared memory 传递到各个CTA:因为shared memory尺寸较大,并且可以读写;

Compute Scheduler:计算分发单元;

                       采用轮询算法,尽可能平均地将各个CTA分发到各个SM上,同时在每个SM上分配尽可能多的CTA

知识点:

同一个SM上可以存在多个warp上下文,但是一个时刻只有一个warp被执行;

一个warp中所有线程必须属于同一个CTA

一个SM上应该保持多个CTA上下文,就可以比只有一个CTA的上下文更好的隐藏延时;

现有架构中一个SM中至少有6active warp才能隐藏延迟;

属于同一个warpthread之间进行通信,不需要进行栅栏同步(barrier);

发射逻辑电路使用一个加权算法计算各条warp指令的优先级;

优先级受到warp所在的blockwarp指令类型和其他一些因素的影响;

当一条指令需要用到的registershared memory资源都处于可用状态的时候,这条指令的状态被设置为就绪状态(ready);

发射逻辑单元从指令级中选择优先级最高的就绪态指令;

如果一个warp中有几条处于就绪状态的指令等待执行,这些指令会被连续发射,知道重新计算warp的状态和优先级,或者发射逻辑选择了来自另一个warp的指令;

Shared memory:用于实现block内的thread通信;

                   被组织为16bank

Global memory中的数据要先写入register,才能转移到shared memory

执行单元:

         SM中最主要的执行资源为832bit ALUMAD

        Sp 一个branch单元和一个ALU或者MAD

       ALUMAD需要4sp周期才能执行完毕:首先取出数据需要一个时钟周期,然后利用3个时钟周期进行运算;

特殊运算单元:DPUDouble Precision Unit),用来处理寄存器中的64位浮点和整形操作数的64bit乘加单元;在GT200中每个SM中只有一个;

              SFU: 执行超越函数、插值、倒数、平方根倒数、正弦、余弦以及其他特殊运算;cuda中提供的一些带有”_”前缀的函数由SFU只需将能够;SFU指令大都有16个时钟周期的延迟;

双发射并行:NVIDIA的微架构设计中,sp执行一条指令再怎么也有至少两个核心周期的延迟,sm每个核心周期能够发射一条指令;

        sm发射一条指令后,sp经过一段时间才能执行完毕,此时sm再发射一条指令,这种机制成为双发射并行(dual issue);

        双发射不仅提高了使用率,但是也增加了寄存器的带宽压力;

纹理,渲染和存储器流水线:

        进行数据输入输出;

        存储器流水线:纹理流水线、加载流水线和渲染输出流水线;

纹理流水线和加载流水线进行读取操作,ROP流水线进行写入操作;

纹理缓存与CPU缓存比较:

       Cpu缓存为一维的,存储器地址为线性的;典型的纹理是二维连续的,读取地址也必须是在两个维度上连续分布的;加载时要将二维纹理地址映射到一维;

       纹理缓存是只读的,并且不满足缓存数据的一致性;

       纹理缓存的主要功能是节省带宽和功耗,CPU缓存是为了实现较低的访问延迟;

 

 

原创粉丝点击