数据划分方式:块划分、周期划分
块划分,一组连续的数据被分到一个块内。每个数据块以任意次序被安排给一个线程。线程通常在同一时间只处理一个数据块。
周期划分,更少的数据被分到一个块内。相邻的线程处理相邻的数据块,每个线程可以处理多个数据块。为一个待处理的线程选择一个新的块,就意味着要跳过和现有线程一样多的数据块。
计算机架构:单指令单数据(SISD)、单指令多数据(SIMD)、多指令单数据(MISD)、多指令多数据(MIMD)。
带宽:单位时间内可处理的数据量,通常表示为MB/s,GB/s。
吞吐量:单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量)。
延迟:一个操作从开始到完成所需要的时间,常用微秒表示。
GPU:多线程,多指令多数据,单指令多数据以及指令级并行。英伟达称之为单指令多线程。
CPU和GPU通过单个计算节点中的PCI-Express总线相连。
同构计算使用的是同一架构下的一个或多个处理器来执行一个应用,而异构计算则使用一个处理器来执行一个应用。
异构架构
一个典型的异构计算节点包括两个多核CPU插槽和两个或更多个众核GPU。GPU是CPU的协处理器。CPU主机端,GPU从机端。
描述GPU容量的两个重要特征:CUDA核心数量、内存大小
评估GPU性能的两个指标:峰值计算性能、内存带宽
峰值计算性能:定义为每秒能处理的单精度或双精度浮点运算的数量,通常用GFlops(每秒10亿次浮点运算)或TFlops(每秒万亿次浮点运算)来表示。
内存带宽:通常用GB/s表示。是从内存中读取或写入数据的比率。
一个CUDA程序包含了在CPU上运行的主机代码和在GPU上运行的设备代码。
主机代码使用C编译器编译,设备代码通过nvcc编译。 源程序文件后缀.cu。
CUDA编程结构:
1.分配GPU内存
2.从CPU内存中拷贝数据到GPU内存
3.调用CUDA内核函数来完成程序指定的运算
4.将数据从GPU拷回CPU内存
5.释放GPU内存空间。