CUDA编程(哈工大-苏统华)
特点
- High throughput computation
- High bandwidth memory
- High availability to all
架构
一般多核CPU
:若干个核心,每个核心有自己的本地存储,处理器之间访问一个更大的内存。
GPU
:
各种架构对应算力
Tesla:1.x;Fermi:2.x;Kepler:3.x(GTX680,780);Maxwell:5.x(GTX980);Pascal
另有Tesla计算卡,代表一系列卡,不是架构:k10:Fermi架构,k20,k40:Kepler架构。
GeForce游戏卡,Tesla高性能计算卡。
SM(Streaming Multi-processor)
Fermi GF100有16个SM,每个SM有32个CUDA Cores。每个CUDA core都有独立的计算能力。
指令缓存,指令调度器,分发器。
Load/Store单元,不需要处理器的干预就能完成存储器和寄存器之间数据的交换。
Special Func单元计算超越函数
硬件
该架构GPU能运行的最大线程数为2048,一个线程束warp的线程数为32,所以最大线程束数为2048/32
==共有5个SM(Multiprocessors),每个SM里有128个CUDA核心
-
整体架构
-
SM架构,有4个warp调度器
-
Warp调度器,每个warp允许两个独立的指令
三大特性
Synchronization
全局同步在CUDA中只有一种办法可以达到:结束一个kernel函数,启动一个新的kernel函数,在第二个kernel函数开始前,第一个kernel函数的所有block就能达到全局同步。
对于Kepler之后的GPU支持Hyper-Q
机制:当第一个内核函数启动,但是没有占满所有SM,空闲的SM可以运行第二个内核函数。
线程同步:对同一个Block里面的线程进行同步。
CUDA编程
Map and Gather
并行计算中的通信是关于如何把任务和内存映射到一起。
Map:任务读取和写入特定的数据元素。
Gather:每次运算从不同位置收集输入元素,输出一个输出结果。
Scatter:
Transpose:重新排列内存中的元素。
uploading-image-47104.png