Nvidia-docker 在docker里安装caffe2

Introduction发现nvidia开始搞nvidia-docker!如果GPU是共享资源,比如在服务器上,可能不同的用户需要不同的运行环境,但是像vbox这样的重量级虚拟机又过于笨重而且也不支持GPU的直接虚拟化。这时候,共享GPU的环境配置就成了一个大问题,尤其是在配置的应用可能会产生冲突的情况下。nvidia-docker完美解决了这个问题!docker之前也写过一些简易的入门教程:Docker学 more ...


解读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 ...