看cuda初级教程视频笔记(周斌讲的)--CUDA、GPU编程模型

主要内容:cpu和gpu互动模式,gpu线程组织模型(不停强化),gpu存储模型,基本的编程问题


cpu-gpu交互

有各自的物理内存空间,通过PCIE总线互连8GB/s~16GB/s,交互开销很大

访存速度,之所以有访存速度的层次划分是在价格上和性能上的一个折中,不得不考虑到成本问题

寄存器和共享存储单元的速度是一个时钟周期,非常快

local memory放在显存芯片里的片外内存和global memory 在显存里面的,对于整个处理器来说,慢的(不懂啊)

constant memory , texture memory, instruction memory(invisible) 都在DRAM立面


GPU的线程组织模型 

thread->block->grid(最大)线程的一些组合变成WARP,WARP在block里

线程组织架构说明

一个Kernel具有大量线程,线程呗划分成线程块blocks,一个线程块内部的线程共享内存Shared Memory可以同步‘_syncthread'

Kernel启动一个grid,包含若干线程块(用户设定)。线程和线程块都有唯一的标识


SM表示流动处理器,一个SM有32个cuda核


GPU线程映射关系

(没听懂,图也看不清)

GPU内存和线程关系

一个thread有私有的local memory(还有私有的寄存器),一个block里所有的线程有shared memory

整个设备呢,有个共有的Global Memory ,共享的

主机端存储器可以和很多设备存储器交互(就是多个显卡同时干活)

编程模型

常规意义的GPU用于处理图形图像,操作于像素,每个像素的操作都类似,可以应用于SIMD

SIMD也可以认为不仅是指令面上,也可以认为是数据并行分割的,就像数组相加矢量操作


SIMT单指令多线程

GPU版本的SIMD,大量线程模型获得高度并行,线程切换获得延迟隐藏,多个线程执行相同指令流,GPU上大量线程承载运行


CUDA编程模式:Extended C

是扩展的C语言,增加了一些修饰词,关键词

__device__执行位置是device,调用位置是device(就是显卡,哈哈)

__global__执行位置是device,调用位置是host(主机端,cpu)它定义了个Kernel函数,是入口函数,cpu上调用,gpu上执行,必须返回void

__host__执行位置是host,调用位置是host

__device__和__host__可以同时调用

















你可能感兴趣的:(cuda)