到国外网站上做兼职翻译,旅游网站开发答辩ppt,百度搜索不到任何网站,住房城乡建设部官方网站目录CPU与GPU的基本知识CPU特点GPU特点GPU vs. CPU什么样的问题适合GPU#xff1f;GPU编程CUDA编程并行计算的整体流程CUDA编程术语#xff1a;硬件CUDA编程术语#xff1a;内存模型CUDA编程术语#xff1a;软件线程块#xff08;Thread Block#xff09;网格#xff08…
目录CPU与GPU的基本知识CPU特点GPU特点GPU vs. CPU什么样的问题适合GPUGPU编程CUDA编程并行计算的整体流程CUDA编程术语硬件CUDA编程术语内存模型CUDA编程术语软件线程块Thread Block网格grid线程块id 线程id线程束warpCPU与GPU的基本知识
GPU吞吐导向内核 CPU延迟导向内核
延迟一条指令从发出到发出结果的时间间隔吞吐量单位时间内处理指令的数量
CPU特点
内存大多级缓存结构提高访存速度 处理运算速度远高于访问存储速度 - 空间换时间经常访问的内容放到低级缓存L1不常访问的内容放到高级缓存 控制复杂 分支预测机制 if-else/break/continue等 在硬件端的机制流水线数据前送 运算单元强大 整型浮点型复杂运算速度快 GPU特点
缓存小 提高内存吞吐 控制简单 没有分支预测没有数据转发- 复杂指令效率不高简单指令吞吐显著提高 精简运算单元 多长延时流水线以实现高吞吐量 下图每一行绿色块需要大量的线程来容忍延迟 如图中所示每一行的运算单元只有一个控制器所以每一行的运算单元执行的是同一个指令只不过是使用不同的数据。
GPU vs. CPU
CPU连续计算部分延迟优先相比GPU单条指令延迟快十倍以上GPU并行计算部分吞吐优先相比CPU单位时间内执行指令数量10倍以上
什么样的问题适合GPU
计算密集数值计算比例远大于内存操作因此内存访问的延时可以被计算覆盖数据并行大任务可以拆解为相同指令的小人物因此对复杂流程的控制需求较低
GPU编程
CUDA编程并行计算的整体流程
void GPUkernel(float* A, float* B, float* C, int n)
{
1. // Allocate device memory for A, B, and C// copy A and B to device memory2. // Kernel launch code – to have the device// to perform the actual vector addition3. // copy C from the device memory// Free device vectors
}CUDA编程术语硬件
Device GPUHost CPUKernel GPU上运行的函数 CUDA编程术语内存模型
CUDA中的内存模型分为一下几个层次
每个线程处理器 Thread Processor PS都有自己的寄存器register每个SP都有自己的局部内存local memoryregister和local memory只能被线程自己访问每个多核处理器SM内都有自己的共享内存shared memory其可被线程块Thread Block内所有线程访问一个GPU的所有SM共有一块全局内存global memory不同线程块的线程都可以使用
CUDA编程术语软件
分为以下几个层次 线程处理器SP对应线程thread多核处理器SM对应线程块thred block设备端device对应线程块组合体grid 一个kernel其实由一个grid来执行一个kernel一次只能在一个GPU上执行
线程块Thread Block
线程块可扩展的集合体将线程数组分成多个块
块内的线程通过共享内存、原子操作和屏障同步进行协作shared memory, atomic operations and barrier synchronization不同块中的线程不能协作即线程的操作是互相独立的互不影响的 如图该线程块包含256个线程所执行的任务为向量相加的操作。其中i … 为确定线程在显存中位置的计算公式。
网格grid
网格并行线程块组合
CUDA核函数由线程网格数组执行每个线程都有一个索引用于计算内存地址和做出决策控制每个线程块互不影响最后将N个线程块的结果进行融合
线程块id 线程id
每个线程要使用索引来决定要处理的数据无论是线程块id或是线程id都可以是1维、2维或者3维的如下图所示 • dim3 dimGrid(M, N);
• dim3 dimBlock(P, Q, S);• threadId.x blockIdx.x * blockDim.x threadIdx.x;
• threadId.y blockIdx.y * blockDim.y threadIdx.y;线程束warp
多核处理器SM采用单指令多线程架构 SIMTSingle-Instruction, Multiple-Thread其中warp线程束是最基本的执行单元一个warp包含32个并行thread这些thread以不同数据资源执行相同的指令。warp本质上是线程在GPU上运行的最小单元。当一个kernel被执行时grid中的线程块被分配到SM上一个线程块的thread只能在一个SM上调度SM一般可以调度多个线程块大量的thread可能被分到不同的SM上。每个线程拥有它自己的程序计数器和状态寄存器并且用该线程自己的数据执行指令这就是所谓的Single Instruction Multiple Thread(SIMT)。由于warp的大小为32所以block所含的thread的大小一般要设置为32的倍数。或者可以说每个线程块要包含N个整行的计算单元而不能是一半