Chinaunix首页 | 论坛 | 博客
  • 博客访问: 824465
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4136
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-21 00:52
个人简介

余自庚寅年麦月误入Linux领域,先从事文件系统与IO之技,后及性能基准之术,上诸述之领域,吾虽有知晓,然未能精通,实为憾事!

文章存档

2016年(8)

2014年(9)

2013年(14)

分类: 高性能计算

2014-10-24 21:42:45

1. Fermi架构GPU概述

上图是 Fermi 架构的 GPU 的核心架构图。第一代Fermi 架构的 GPU 拥有30 亿个晶体管,512 个 CUDA Core。一个 CUDA Core 在一个时钟周期内执行一个线程(或kernel)中的一个浮点数或整数指令。512 个 CUDA Core 是按照16 个含有32 个 Core 的SM(流式多处理器,也叫 Scalar Processor,标量处理器) 进行组织的GPU 拥有6 个64-bit 的显存分区(DRAM,因此支持 384-bit 的显存接口最大支持 6GB 的 GDDR5 类型的显存容量GPU CPU 之间通过 PCI-e 总线连接,千兆线程管理器负责将线程块分发到 SM (流式多处理器)中。

 CUDA(Compute Unified Device Architecture,统一计算设备架构)是由NVIDIA推出的通用架构,是 GPU 应用程序的开发环境。

2. 第三代流式多处理器SM

下图是 SM 及 CUDA Core 的架构图。

 

2.1 512个高性能CUDA Core

    Fermi 架构的 GPU 每个 SM 拥有32 个CUDA Core每个CUDA Core拥有完整的整数运算单元(ALU)和浮点数运算单元(FPU。而 Fermi 架构采用了新的IEE754-2008 标准的浮点数运算标准,支持单精度和双精度运算的 FMA(fused multiply-add)指令,运算结果更精确。

Fermi 架构中,整数运算单元 ALU 几乎是经过全新的设计,对所有的指令完全支持 32-bit 精度,支持 64-bit 和可扩展精度的操作,同时也支持多种指令运算,包括布尔型、移位、比较、转化等。

 

2.2 16个存储单元(Load/Storage Unites

每个SM 拥有16 个存取单元(LD/ST Unit),可以保证在一个时钟周期内16 个线程同时对源或目的地址进行计算,同时支持对缓存或显存任意位置读取数据。

 

2.3 4个特殊函数单元(SFU

SFU 用来执行超指令(transcendental instruction)如正弦、余弦、倒数和平方根等函数。每个 SFU 一次执行一个线程块中一个线程的一条指令。SFU 并不始终占用 SM 中的 dispatch 单元,即当SFU 处于执行状态的时候,dispatch 单元可以向其它的执行单元分发相应的指令。

 

2.4 双精度的设计

双精度运算是高性能计算 HPC 的核心。Fermi 架构进行了专门的设计,提供前所未有的双精度性能:一个 SM 在一个时钟周期内可以执行16 次双精度的 FMA 乘加运算(因为一个 SM 中含有16个 FP64 的计算单元)

 

2.5 wrap调度机制

每个SM前端都有两个 Warp 调度器(Warp Scheduler)和两个指令分发单元(Instruction Dispatch Unit,并且和 SM 其它部分完全独立,指令分发单元和执行硬件之间有一个完整的交叉开关(Crossbar),每个单元都可以向 SM 内的任何单元分配线程(不过存在一些限制)

SM 是以 32 个并行线程为一组的warp 为单位调度线程的,每一个 SM 的两个 warp(线程束)调度单元和两个指令分发单元,允许同时启动和执行两个 warpFermi 双 warp 调度机制可以同时启动两个 warp,并且将每个 warp 的一条指令分发到一组16 个 CUDA Core 上、16 个存取单元中或者是 4 个 SFU 上执行。因为 warp 彼此单独执行,所以,Fermi 的调度单元不需要检查指令流之间的相关性。

这种线程架构也不是没有缺点,就是要求 Warp 的每个线程都必须同时执行同样的指令,否则会有部分单元空闲。每组SM每个循环内可以执行的不同操作数:FP32 32个、FP64 16个、INT 32个、SFU 4个、LD/ST 16个。

大部分指令都可以实现双发射:两条整数指令,两条浮点数指令或者整数、浮点数、存、取混合指令,SFU 指令也可以并行发射。

 

2.6 64KB可配置共享内存(Shared Memory)和L1 CacheLocal Memory

共享内存使得同一个线程块中的线程可以相互协作,便于重复利用片上的数据,大大减少片外数据的传输。

在 Fermi 架构中,每个 SM 拥有64KB 的片上内存,可以配置为48KB 的共享内存和16KB的 L1 Cache 或者配置为16KB 的共享内存和48KB 的L1 Cache。

阅读(13699) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~