------CUDA------
ooMelloo
☆人工智能/机器学习/深度学习工程师进击中
☆立志成为数学好编程好业务好的三好青年
☆人必有痴 而后有成
展开
-
CUDA入门
一、GPU简介1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi被IDC评选为图形芯片工业的市场领导者,但那时候这种芯片还没有GPU的称号,很长的一段时间ATi都是把图形处理器称为VPU,直到AMD收购ATi之后其图形芯片才正式采用GPU的名字。NVIDIA...转载 2018-08-29 11:02:22 · 1312 阅读 · 0 评论 -
CUDA编程
前言2006年,NVIDIA公司发布了CUDA,CUDA是建立在NVIDIA的CPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题。近年来,GPU最成功的一个应用就是深度学习领域,基于GPU的并行计算已经成为训练深度学习模型的标配。目前,最新的CUDA版本为CUDA 9。GPU并不是一个独立运行的计算平台,而需要与...翻译 2019-03-26 22:24:06 · 1094 阅读 · 0 评论 -
CUDA通篇
CUDA是什么CUDA,ComputeUnifiedDeviceArchitecture的简称,是由NVIDIA公司创立的基于他们公司生产的图形处理器GPUs(GraphicsProcessingUnits,可以通俗的理解为显卡)的一个并行计算平台和编程模型。通过CUDA,GPUs可以很方便地被用来进行通用计算(有点像在CPU中进行的数值计算等等)...翻译 2019-03-26 22:48:33 · 379 阅读 · 0 评论 -
CUDA详细篇
在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择。还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能给学习CUDA的童鞋提供一定指导。个人能力所及,错误难免...翻译 2019-03-26 22:51:03 · 833 阅读 · 0 评论 -
CUDA编程:与OpenCV结合
前言 学习计算机图像处理算法的童鞋,就不得不学习cuda,为啥呢?因为图像处理一般都是矩阵运算,动不动就是百万的计算量这个时候优化计算时间是必不可少的。openCV本身提供了很多cuda函数,能够满足大多数用户的需求。但是也不绝对,有时候我们需要自己定义一个内核函数进行优化,当然你也可以用openGL或者多线程,openCV也提供较好的支持,掌握一种或多种加速算法,对程序员特别是算...原创 2019-04-10 11:07:51 · 3457 阅读 · 3 评论 -
CUDA精进之路(零):CUDA开篇
前言 着手机器视觉项目时接触到了并行编程这一概念,那时候的目的是为了在图像识别的时候通过多个线程同时对多张传入的图片进行并行处理以达到加速程序运行速度,运用的方法主要是利用了C++自带的future库以及thread库,具体实现方法可参照此博客C++11 并发指南四此方法简单来说是利用了目前计算机为多核式结构(四核),因为在一般的串行编程中,一个程序的指令在单一的 ...原创 2019-04-09 13:54:46 · 717 阅读 · 0 评论 -
CUDA精进之路(二):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
引言从这篇文章起,开始将一些较为典型的OpenCV算法通过CUDA进行实现,本文实现的为图像处理中最为常见的形态学腐蚀以及膨胀,由于本文目的在于算法移植后的验证,故在图片的选择上用小图像作为输入的示例图像,有不当之处欢迎评论或私信~任务要求输入一张图片,将其转为灰度图后,通过CUDA在GPU中对图片实现形态学腐蚀、膨胀操作,最后将结果输出至CPU并进行显示,要求输出图与用OpenC...原创 2019-04-09 14:02:10 · 1820 阅读 · 3 评论 -
CUDA精进之路(一):图像处理——大图像分块处理(包括求均值、最大值)
引言在我的第一篇文章中我简单介绍了CUDA以及我的一些个人学习见解,在本文中我将开始正式开始CUDA实践之旅,众做周知CUDA目前应用的领域十分广泛,它能把一些普通的CPU代码提速几十倍甚至几百倍。在本人所从事的图像处理领域,在一些大图像的处理上(4K以上图像),仅仅依靠CPU进行计算已经完全无法满足工程项目所要求的运行时间,这时候我们就需要利用CUDA对代码进行加速。本文以一个8000*1...原创 2019-04-09 14:10:42 · 10000 阅读 · 10 评论 -
CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计
引言在大部分的图像处理程序中,其中必不可少的一步就是对传入的彩图进行灰度处理,将三个通道的RGB图片转化为单通道的Gray图,而对于灰度图进行直方图统计同样是观察检测图像特征的常用方法。在OpenCV中已经有成熟的封装函数进行上述功能的实现,本文主要讲述CUDA实现,加快对大图像的处理速度。任务要求输入一张彩色图片,通过CUDA将其转换为灰度图,并对灰度图进行灰度直方图统计。实...原创 2019-04-09 14:15:14 · 2530 阅读 · 1 评论 -
CUDA精进之路(四):图像处理——Sobel算子边缘检测
引言关于图像边缘检测,记得刚开始接触图像处理时,第一个自己实现的程序是通过笔记本摄像头采集图像,利用OpenCV自带的算法库进行Canny算子边缘检测,那时候当看到程序运行后,视频窗口实时显示经Canny算子边缘分割后的图像,觉得十分有科技感,后来慢慢开始自己写边缘检测的源代码,本博客以Sobel算子为例,将边缘检测通过CUDA实现。任务要求输入一张图片,将其转为灰度图后,通过CU...原创 2019-04-09 14:24:36 · 2437 阅读 · 5 评论 -
CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)
引言最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割。而对大多数图像来说,分割的一大难点是将待识别的目标与背景分离,其中一种有效简单的方法就是二值化(并不都有效),本博客试着将二值化算法中的OTSU算法进行cuda改写。任务要求输入一张8bit的灰度图,通过...原创 2019-04-09 14:29:59 · 2148 阅读 · 0 评论 -
CUDA中二级指针表示二级数组
首先看下我们在CPU上是如何用二级指针表示二维数组的,其实就两点:一是用一级指针保存数据,二是用二级指针去按行索引数据位置。关于一级指针和二级指针的内存分配这里不讲了,注意数据类型就可以了。代码做了相关说明,应该比较好理解:#define Row 8#define Col 4//声明Row个行指针: cpuA cpuA+0 cpuA+1 cpuA+Row int **...原创 2019-04-09 19:13:42 · 1530 阅读 · 1 评论 -
Qt 调用CUDA静态库和动态库生成与配置
前言 通过将CUDA相关计算操作放在库中,方便在项目中调用,省去了每次编译cu文件的麻烦,也便于集成到其他平台上。 关于部署CUDA加速的程序时,往往对CUDA加速的程序编译为动态链接库或者静态链接库。这两者导致的区别是,使用动态链接库,在目标机器上运行时,必须一并安装和编译库时一样的CUDA版本,而静态库没有这样的要求。可见静态库对使用者来说可能更加方便。...原创 2019-04-09 19:37:08 · 3155 阅读 · 0 评论 -
Qt调用CUDA动态库及配置
本文配置环境:Win7(x64)+VS2012+CUDA+Qt5.5.01、首先保证CUDA集成到VS下(如下图顺利安装Nsight for VS2012)。CUDA安装比较简单,选自定义安装,然后一直next 就可以了。2、CUDA动态库的封装参考以前的博客:https://blog.csdn.net/Aidam_Bo/article/details/89159081封装成功后生成D...原创 2019-04-09 19:41:09 · 2995 阅读 · 0 评论 -
CUDA 多GPU调用实现
当设备存在多块GPU时,为了高效利用GPU,我们常常需要使用多卡计算。本例中我们使用OpenMP来进行多线程调用多GPU运行,初学者无须详细了解OpenMP,只需知道一两句命令就行。详细步骤如下:1、建立一个普通CUDA项目:2、在项目属性C/C++设置语言:支持openMP3、在CUDA C/C++中设置预编译命令:-Xcompiler "/openmp"(这一行很重要)...转载 2019-04-09 19:50:21 · 3699 阅读 · 1 评论 -
CUDA——线程配置
前言线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式:2D grid 2D block线程索引矩阵在memory中是row-major线性存储的:在kernel里,线程的唯一索引非常有用,为了确定一个线程的索引,我们以2D为例:线程和block索引 矩阵中元素坐标 线性global memory 的偏移首先可以将thread...原创 2019-03-12 23:20:46 · 824 阅读 · 0 评论 -
CUDA——简介
CUDA简介CUDA是并行计算的平台和类C编程模型,我们能很容易的实现并行算法,就像写C代码一样。只要配备的NVIDIA GPU,就可以在许多设备上运行你的并行程序,无论是台式机、笔记本抑或平板电脑。熟悉C语言可以帮助你尽快掌握CUDA。CUDA编程CUDA编程允许你的程序执行在异构系统上,即CUP和GPU,二者有各自的存储空间,并由PCI-Express 总线区分开。因此,我们应该先...原创 2019-03-12 22:48:34 · 2154 阅读 · 0 评论 -
CUDA ---- Hello World From GPU
本篇博文仅实现hello world,先看到效果,具体细节将在后续博文解释。准备如果你是第一次使用CUDA,在Linux下可以使用下面的命令来检查CUDA编译器是否安装正确:$ which nvcc一般,该指令输出为:/usr/local/cuda/bin/nvcc另外,你可能还需要检查下你机器上的GPU型号,可以使用给下面的命令查询:$ ls -l /dev/...原创 2019-03-12 22:42:11 · 488 阅读 · 0 评论 -
TensorFlow安装中遇到的问题
一、(base) C:\Users\chenchao>activate tensorflowCould not find conda environment: tensorflowYou can list all discoverable environments with `conda info --envs`.解决方法:在anaconda prompt中输入conda creat...原创 2018-10-31 22:29:37 · 721 阅读 · 0 评论 -
TensorFlow安装中碰到的问题汇总
一、(base) C:\Users\chenchao>activate tensorflowCould not find conda environment: tensorflowYou can list all discoverable environments with `conda info --envs`.解决方法:在anaconda prompt中输入conda creat...原创 2018-10-31 23:08:17 · 888 阅读 · 0 评论 -
Win10+VS2015+CUDA9.0 环境搭建
基本安装: 1.原材料vs2013 下载网址:https://www.visualstudio.com/zh-cn/downloads/download-visual-studio-vs.aspx 选择你需要的版本进行下载,我这里选择的是专业版下载完成之后如图所示 用虚拟光驱解压安装, 2.下载cuda9.0源文件 下载地址:https://developer.nvidia.com...原创 2018-11-07 22:30:04 · 2640 阅读 · 1 评论 -
CUDA 8.0 + VS2013 + win10 x64开发环境搭建
前言工欲善其事,必先利其器。CUDA开发,搭建Windows下的环境准备 作为CUDA开发的第一篇,先介绍一下CUDA环境的搭建吧,这里主要讲的是CUDA在WINDOWS上的环境搭建,后续会专门写一篇在LINUX平台上的基于caffe深度学习CUDA环境搭建。 CUDA开发我选择的是WIN10的64位系统,采用的CUDA toolkit版本是 cuda 7....原创 2018-11-05 22:24:22 · 327 阅读 · 0 评论 -
CUDA编程入门文章
一、CPU和GPU计算性能对比 首先看一下CPU和GPU的微架构和计算能力对比。例如我的笔记本lenovo Y480,4核CPU,NVIDIA GT650M显卡384个CUDA核。计算能力对比:CPU: 4 * 2.5=10GFLOPSGPU: 384 * 0.88= 337.92GFLOPS 显卡计算性能是4核i5 CPU的33.792倍,因此我们可...原创 2018-11-05 22:54:40 · 582 阅读 · 0 评论 -
CUDA ---- Warp解析
Warp逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质。Warps and Thread Blockswarp是SM的基本执行单元。一个warp包含32个并行thread,这32个thread执行于SMIT模式。也就是说所有thread执行同一条指令,并且每个thread会使用各自的da...原创 2019-03-13 21:32:42 · 749 阅读 · 0 评论 -
CUDA ---- Shared Memory
CUDA SHARED MEMORYshared memory在之前的博文有些介绍,这部分会专门讲解其内容。在global Memory部分,数据对齐和连续是很重要的话题,当使用L1的时候,对齐问题可以忽略,但是非连续的获取内存依然会降低性能。依赖于算法本质,某些情况下,非连续访问是不可避免的。使用shared memory是另一种提高性能的方式。GPU上的memory有两种:· On...原创 2019-03-13 22:04:39 · 808 阅读 · 0 评论 -
CUDA算法:MS-queue算法相关
简介:多核多线程已经成为当下一个时髦的话题,而无锁编程更是这个时髦话题中的热点话题。Linux内核可能是当今最大最复杂的并行程序之一,为我们分析多核多线程提供了绝佳的范例。内核设计者已经将最新的无锁编程技术带进了2.6系统内核中,本文以2.6.10版本为基础做相关解释。非阻塞型同步(Non-blockingSynchronization)简介如何正确有效的保护共...原创 2019-03-13 22:15:40 · 902 阅读 · 0 评论 -
MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
主成分分析(PCA)是用来提升无监督特征学习速度的数据降维算法。看过下文大致可以知道,PCA本质是对角化协方差矩阵,目的是让维度之间的相关性最小(降噪),保留下来的维度能量最大(去冗余),PCA在图像数据的降维上很实用,因为图像数据相邻元素的相关性是很高的。为了方便解释,我们以二维数据降一维为例(实际应用可能需要把数据从256降到50):需要注意的是,两个特征值经过了预处理,其均值为...原创 2019-03-13 22:18:52 · 402 阅读 · 0 评论 -
MachineLearning Exercise 7 : K-means Clustering and Principle Component Analysis
findClosestCentroids.mm = size(X,1);for i=1:m [value index] = min(sum((repmat(X(i,:),K,1)-centroids).^2,2)); idx(i) = index;endcomputeCentroids.mtemp = [X idx];// pdf说能向量化实现更高效,本人对...原创 2019-03-13 22:26:22 · 353 阅读 · 0 评论 -
CUDA算法——Stream and Event
Stream一般来说,cuda c并行性表现在下面两个层面上:Kernel level Grid level到目前为止,我们讨论的一直是kernel level的,也就是一个kernel或者一个task由许多thread并行的执行在GPU上。Stream的概念是相对于后者来说的,Grid level是指多个kernel在一个device上同时执行。Stream和event简介C...原创 2019-03-13 22:37:01 · 627 阅读 · 0 评论 -
《GPU高性能编程CUDA实战》代码整理
CUDA架构专门为GPU计算设计了一种全新的模块,目的是减轻早期GPU计算中存在的一些限制,而正是这些限制使得之前的GPU在通用计算中没有得到广泛的应用。使用CUDA C来编写代码的前提条件包括:(1)、支持CUDA的图形处理器,即由NVIDIA推出的GPU显卡,要求显存超过256MB;(2)、NVIDIA设备驱动程序,用于实现应用程序与支持CUDA的硬件之间的通信,确保安装...翻译 2019-03-12 22:21:41 · 1010 阅读 · 0 评论 -
CUDA ---- GPU架构(Fermi、Kepler)
GPU架构SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。以Fermi架构为例,其包含以下主要组成部分:CUDA cores Shared Memory/L1Cache Register File Load/Store Units Special Function Units Warp Schedul...原创 2019-03-12 22:36:26 · 888 阅读 · 1 评论 -
高性能加速深度学习算法
1.深度学习深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习典型应用为图像识别和语音识别。(由于本人不是深度学习专业人士,对深度学习理论知识不多介绍,说多了就班门弄斧了,后面主要介绍下这些深度学习算法如何进行并行化设计和优化)2.CPU+GPU异构...转载 2019-04-09 20:08:21 · 824 阅读 · 0 评论