SPMD(Single Program, Multiple Data)是一种并行程序设计的模型,主要思想是使用同一个程序在多个处理器上并行执行,但每个处理器执行程序时处理不同的数据。其主要特点包括:
SPMD模式下,同一个程序复制到不同处理器,通过进程/线程ID区分各自的数据。程序员主要编写串行代码,编译器和运行时系统负责生成并行执行代码。
SPMD更适合于数据并行的应用,例如处理大规模矩阵、物理模拟等科学计算。MPI就是一种典型的SPMD模式的并行编程框架。
与SPMD不同,MPMD(Multiple Program, Multiple Data)模型下并行任务可以运行不同的程序。SPMD程序结构更简单,但是MPMD更灵活。
总之,SPMD是并行编程的重要模式,对它的理解有助于编写并行应用程序。
GPU使用的大页内存是指CPU主内存中映射给GPU使用的部分,它使用的是系统内存,而不是GPU显存。启用大页内存只是改变了CPU内存的分页机制,并不占用额外的显存。
回调的思想是将一个函数作为参数传递给另一个函数,这样在需要的时候可以在那个函数内调用参数函数。这可以实现异步编程,也允许高度定制和灵活的代码逻辑。
在英伟达的GPU上,任务的调度最小单元是warp
一个warp以32个线程为一组,故通过8*4的block来进行矩阵的切分,每个block里共32个位置
这样可以保证每个block上到SM时不用去与其他的block拼接线程,产生额外开销
注意我这里用的是位置,并不是元素,32个线程,每个线程去负责一个位置的计算
GMEM:全局内存(Global Memory),是GPU上的一块对所有CUDA线程可见的内存区域,位于设备端。数据传输速度相对慢,但可以存储大量数据。
SMEM:共享内存(Shared Memory),是位于每个SM上的一小块内存,只能被同一SM上的线程块访问。速度很快但容量有限。用于线程块内部的数据共享。
SM:流多处理器(Streaming Multiprocessor),是GPU硬件的运算单元,每个SM包含多个CUDA核心和共享内存。一个GPU芯片上集成了多个SM。
GMEM在整个GPU上共享,容量大速度慢;
SMEM在SM内共享,容量小速度快;
SM是GPU的运算单元,包含SMEM和CUDA核心。
————————————————————————————
在CUDA编程中,合理利用不同内存的层级可以大大优化程序性能。
指的是将模型或数据以特定格式导出保存的操作。
具体来说,dump op可以表示以下几种含义:
综上所述,dump在机器学习领域是一个非常常见和重要的操作,用于导出保存各种信息,方便模型分析、部署和调试
2维数组 shape:(N,D),表示ND格式
3维数组 shape:(N,H,W),表示NHW格式
4维数组 shape:(N,C,H,W),表示NCHW格式
5维数组 shape:(N,C,D,H,W),表示NCDHW格式
n —— batchsize(样本数量)