解读CUDA汇编PTX(一) [翻译]

Introduction本文系翻译文章Demystifying PTX Code。在我最近的文章里,我展示了怎样从CUDA和OpenCL代码生成PTX文件,本文则将重点解读PTX文件里的复杂指令。我们还是使用向量加法的代码代码片段:https://gist.github.com/FindHao/394b2f069788e5a4c80a069638a47e1c原作者的代码项目: more ...

NVCC编译过程

Introduction本文介绍了编写的nVIDIA Cuda代码是如何编译成二进制的。上图即为官方的流程图。打印步骤nvcc -O2 -c vectorAdd.cu -keep -arch sm_20 --dryrun以 more ...

GPU 共享内存bank冲突(shared memory bank conflicts)

Introduction本文总结了GPU上共享内存的bank conflicts。主要翻译自Reference和简单解释了课件内容。共享内存(Shared Memory)因为shared mempory是片上的(Cache级别),所以比局部内存(local memory)和全局内存(global memory)快很多,实际上,shared memory的延迟要比没有缓存的全局内存延迟小100倍(如果线程之间没有bank conflicts的话)。在同一个block的线程共享一块shared memo more ...


GPU寄存器(一)

Introduction本文将简单介绍GPU中的寄存器。寄存器寄存器是GPU片上高速缓存, 执行单元可以以极低的延迟访问寄存器。寄存器的基本单元式寄存器文件,每个寄存器文件大小为32bit。局部存储器对于每个线程,局部存储器也是私有的。如果寄存器被消耗完。数据将被存储在局部存储器中。如果每个线程使用了过多的寄存器,或声明了大型结构体或数据,或者编译器无法确定数据的大小,线程的私有数据就有可能被分配到local memory中,一个线程的输入和中间变量将被保存在寄存器或者是局部存储器中。局部存储器中的数据被保存在显存中,而不是片上的寄 more ...



CUDA零复制内存

Pre之前的博客CUDA锁页内存和零复制只是简单介绍了下零复制内存,并没有详细说明,这里参考《CUDA并行程序设计-GPU编程指南》这本书再详细说明下。零复制(Zero Copy)(零拷贝内存)零复制是一种特殊形式的内存映射,它允许你将主机内存直接映射到GPU内存空间上。因此,当你对GPU上的内存解引用时,如果它是基于GPU的,那么你就获得了全局内存的高速带宽(180GB/s)。如果GP more ...

Cuda锁页内存和零复制

Pre为了对某一数据集进行操作,你需要将数据从主机传输到设备上、在数据集上进行操作,然后将结果传输回主机。由于是在完全串行的方式下执行的,这将导致主机和设备在一段时间内都是闲置的,白白浪费了传输能力和计算能力。本文介绍了锁页内存(Pinned Memory/PageLocked Memory)和零复制(Zero Copy)来节省甚至去掉数据传输耗费。锁页内存(Pinned Memory/PageLocked Memory)主机处理器支持虚拟内存系统,其中物理内存也可以标记为换出状态,然后将它更换到磁盘上,一旦需要该页了,则重新加载回 more ...