GPU
文章平均质量分 92
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
apex 安装/使用 记录
一、apex是什么:混合精度什么用:提升GPU上的训练速度GitHub:https://github.com/NVIDIA/apexAPI文档:https://nvidia.github.io/apex使用要求:Python 3CUDA 9 or newerPyTorch 0.4 or newer. The CUDA and C++ extensions require pytorch 1.0 or newer.推荐已发布的最新版本,见https://pytor.转载 2020-08-29 20:46:04 · 1673 阅读 · 1 评论 -
CUDA学习笔记(四)GPU架构
GPU架构SM(Streaming Multiprocessors,流式多处理器)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。以Fermi架构为例,其包含以下主要组成部分:CUDA cores Shared Memory/L1Cache Register File Load/Store Units Special Function Units Warp ...转载 2018-07-19 21:37:48 · 2281 阅读 · 0 评论 -
CUDA学习笔记(一)CUDA简介
本系列的CUDA转自:http://www.cnblogs.com/1024incn/tag/CUDA/版权归原作者所有,仅供学习。由于各种需求,所以略微了解学习一下gpu的CUDA怎么操作?CUDA简介CUDA是并行计算的平台和类C编程模型,我们能很容易的实现并行算法,就像写C代码一样。只要配备的NVIDIA GPU,就可以在许多设备上运行你的并行程序,无论是台式机、笔记本抑或平...转载 2018-07-20 07:51:06 · 1255 阅读 · 0 评论 -
pycuda-查看GPU的基本属性
import pycuda.driver as cudafrom six.moves import rangecuda.init()print("%d device(s) found." % cuda.Device.count())for ordinal in range(cuda.Device.count()): dev = cuda.Device(ordinal) ...原创 2018-07-17 14:31:21 · 2321 阅读 · 0 评论 -
cuda,GPU的一些概念(面试笔记)
与CUDA相关的几个概念:thread,block,grid,warp,sp,sm。 sp: 小核(流处理器)最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的。GPU进行并行计算,也就是很多个sp同时做处理 sm: 大核(流多处理器)多个sp加上其他的一些资源组成一个sm, streaming multiprocessor. 其他资源也就是存储资...转载 2018-07-23 09:39:08 · 8165 阅读 · 0 评论 -
程序设计原则——局部性原理
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构:CPU寄存器-》高速缓冲存储器-》主存储器-》磁盘-》通过网络连接的其他存储设备。 SRAM静态,一般作为高速缓冲存储器。DRAM动态,一般作为大容量的主存储器 每次CPU和主存之间的数据传送都是通过一些列的步骤完成的,这些步骤称为总线事务。读事务从主存传送数据到CPU,写事务从CPU传送数据到主存。 局...转载 2018-07-23 09:52:25 · 3003 阅读 · 0 评论 -
Linux查看GPU信息和使用情况
Linux查看显卡信息:lspci | grep -i vga使用nvidia GPU可以:lspci | grep -i nvidia前边的序号 "00:0f.0"是显卡的代号(这里是用的虚拟机);查看指定显卡的详细信息用以下指令:lspci -v -s 00:0f.0Linux查看Nvidia显卡信息及使用情况Nvidia自带一个命令行工具可以查看显存...转载 2019-03-13 14:02:49 · 554 阅读 · 0 评论 -
windows使用nvidia-smi查看gpu信息
需要在path添加 如下 路径才可以直接在cmd中使用nvidia-smi命令等。C:\Program Files\NVIDIA Corporation\NVSMI然后在命令行中输入nvidia-smi.exe就可以查看GPU的情况若想连续查看,可以使用: nvidia-smi.exe -l 必须是小写的l, -l 指定数字表示每个几秒刷新显示。Fan:显示风扇转速,数值...原创 2019-03-13 14:31:15 · 11284 阅读 · 1 评论 -
使用MXNet的NDArray来处理数据
NDArray.ipynbNDArray介绍机器学习处理的对象是数据,数据一般是由外部传感器(sensors)采集,经过数字化后存储在计算机中,可能是文本、声音,图片、视频等不同形式。这些数字化的数据最终会加载到内存进行各种清洗,运算操作。几乎所有的机器学习算法都涉及到对数据的各种数学运算,比如:加减、点乘、矩阵乘等。所以我们需要一个易用的、高效的、功能强大的工具来处理这些数据并组...转载 2019-09-04 13:43:14 · 395 阅读 · 0 评论 -
CUDA学习笔记(十三)CONSTANT MEMORY
CONSTANT MEMORYconstant Memory对于device来说只读但是对于host是可读可写。constant Memory和global Memory一样都位于DRAM,并且有一个独立的on-chip cache,比直接从global Memory读取要快得多。每个SM上constant Memory大小限制为64KB。constant Memory的获取方式不同于其...转载 2018-07-21 08:12:38 · 2522 阅读 · 0 评论 -
CUDA学习笔记(十二)共享内存
CUDA SHARED MEMORYshared memory在之前的博文有些介绍,这部分会专门讲解其内容。在global Memory部分,数据对齐和连续是很重要的话题,当使用L1的时候,对齐问题可以忽略,但是非连续的获取内存依然会降低性能。依赖于算法本质,某些情况下,非连续访问是不可避免的。使用shared memory是另一种提高性能的方式。GPU上的memory有两种:· On...转载 2018-07-21 08:12:07 · 11046 阅读 · 1 评论 -
CUDA学习笔记(三)device管理
device管理NVIDIA提供了集中凡是来查询和管理GPU device,掌握GPU信息查询很重要,因为这可以帮助你设置kernel的执行配置。本博文将主要介绍下面两方面内容:CUDA runtime API function NVIDIA系统管理命令行使用runtime API来查询GPU信息你可以使用下面的function来查询所有关于GPU device 的信息:c...转载 2018-07-20 07:53:38 · 4852 阅读 · 0 评论 -
CUDA学习笔记(五)Warp
Warp逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质。Warps and Thread Blockswarp是SM的基本执行单元。一个warp包含32个并行thread(即warp_size=32),这32个thread执行于SIMT模式。也就是说所有thread执行同一条指令,并且每...转载 2018-07-20 07:56:33 · 6107 阅读 · 0 评论 -
CUDA学习笔记(六)并行分析
Exposing Parallelism这部分主要介绍并行分析,涉及掌握nvprof的几个metric参数,具体的这些调节为什么会影响性能会在后续博文解释。代码准备下面是我们的kernel函数sumMatrixOnGPUD: __global__ void sumMatrixOnGPU2D(float *A, float *B, float *C, int NX,...转载 2018-07-20 07:57:36 · 835 阅读 · 0 评论 -
CUDA学习笔记(七)分支发散和展开循环
这节是关于Branch Divergence and Unrolling Loop。(分支发散和展开循环)Avoiding Branch Divergence(避免分支发散)有时,控制流依赖于thread索引。同一个warp中,一个条件分支可能导致很差的性能。通过重新组织数据获取模式可以减少或避免warp divergence(该问题的解释请查看warp解析篇)。The Paralle...转载 2018-07-20 07:59:25 · 3790 阅读 · 0 评论 -
CUDA学习笔记(八)动态并行
Dynamic Parallelism(动态并行)到目前为止,所有kernel都是在host端调用,GPU的工作完全在CPU的控制下。CUDA Dynamic Parallelism允许GPU kernel在device端创建调用。Dynamic Parallelism使递归更容易实现和理解,由于启动的配置可以由device上的thread在运行时决定,这也减少了host和device之间传递...转载 2018-07-20 08:00:14 · 2748 阅读 · 1 评论 -
CUDA学习笔记(九)内存
Memorykernel性能高低是不能单纯的从warp的执行上来解释的。比如之前博文涉及到的,将block的维度设置为warp大小的一半会导致load efficiency降低,这个问题无法用warp的调度或者并行性来解释。根本原因是获取global memory的方式很差劲。众所周知,memory的操作在讲求效率的语言中占有极重的地位。low-latency(低延迟)和high-band...转载 2018-07-20 08:01:44 · 10104 阅读 · 1 评论 -
CUDA学习笔记(十)内存访问
Memory Access Patterns(内存访问模式)大部分device一开始从global Memory获取数据,而且,大部分GPU应用表现会被带宽限制。因此最大化应用对global Memory带宽的使用时获取高性能的第一步。也就是说,global Memory的使用就没调节好,其它的优化方案也获取不到什么大效果,下面的内容会涉及到不少L1的知识,这部分了解下就好,L1在Ma...转载 2018-07-20 08:02:40 · 2858 阅读 · 1 评论 -
CUDA学习笔记(十一)CUDA库
CUDA Libraries简介 上图是CUDA 库的位置,本文简要介绍cuSPARSE、cuBLAS、cuFFT和cuRAND,之后会介绍OpenACC。cuSPARSE线性代数库,主要针对稀疏矩阵之类的。 cuBLAS是CUDA标准的线代库,不过没有专门针对稀疏矩阵的操作。 cuFFT傅里叶变换 cuRAND随机数CUDA库和CPU编程所用到的库没有什么区别,都是一系列接口...转载 2018-07-20 08:03:34 · 4694 阅读 · 0 评论 -
CUDA学习笔记(二)线程组织
前言线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式:2D grid 2D block一些基本的描述:gridDim.x-线程网络X维度上线程块的数量gridDim.y-线程网络Y维度上线程块的数量blockDim.x-一个线程块X维度上的线程数量blockDim.y-一个线程块Y维度上的线程数量blockIdx.x-线程网...转载 2018-07-20 07:52:38 · 891 阅读 · 0 评论