编程语言|CUDA入门
文章平均质量分 78
初学Cuda,参考Cuda官方教程、《GPU高性能编程CUDA实战》、《GPU编程指南》、《GPU编程与优化》
hjxu2016
好记性不如烂笔头|
独乐乐不如众乐乐|
你的纠错与关注就是对我最大的支持
展开
-
CUDA库之nvjpeg(一):入门介绍
nvJPEG 库提供了高性能,GPU加速的JPEG图像格式的解码函数,并且普遍应用在深度学习领域和超大规模的多媒体应用中。这个库提供单张图或者多张图同时解码的能力,可以充分利用GPU资源和优化效率,并且使用者也可以管理需要解码的内存,灵活性还是比较强的。使用JPEG图像数据流作为输入从数据流中获取图像的宽和高使用以上获取的信息来管理GPU内存并执行解码操作nvJPEG提供了专用的API,用于从原始JPEG图像数据流中检索图像信息。原创 2024-03-27 14:26:41 · 1695 阅读 · 0 评论 -
CUDA库之NPP(四):内存开辟和字节对齐
博主将在 编程语言|CUDA入门中不定期更新NPP库相关知识文章目录一、前言一、前言本文主要利用npp实现图像中的resize操作,主要步骤如下:1、利用Opencv读取图像;2、将图像数据拷贝到设备端;3、调用nppiResize函数,实现resize操作4、将nppiResize后的图像数据拷贝到Mat,并保存验证结果...原创 2021-09-04 14:29:12 · 2219 阅读 · 0 评论 -
CUDA学习(十三):一步一步为CUDA提速
博主CUDA学习系列汇总传送门(持续更新):编程语言|CUDA入门笔者在CUDA学习(十):向量内积的多种方法实现CUDA(六):多种方法实现向量加两篇文章中,已经用了多种方法来实现向量内积和向量加,但一直没有详细记录多种方法的区别以及这些不同方法之间的速度差距等等.这里笔者做分笔记,浅谈cuda加速的基本技巧.并记录下各种方法快慢的原理文章目录一、前言二、opencv对图像求和 41ms三、最愚蠢的方法,直接在GPU内循环求和 31418ms!四、初级加速:单block,多thread五.原创 2021-02-07 17:27:09 · 8740 阅读 · 6 评论 -
CUDA库之NPP入门(三):NPP实现Resize操作
博主将在 编程语言|CUDA入门中不定期更新NPP库相关知识一、前言本文主要利用npp实现图像中的resize操作,主要步骤如下:1、利用Opencv读取图像;2、将图像数据拷贝到设备端;3、调用nppiResize函数,实现resize操作4、将nppiResize后的图像数据拷贝到Mat,并保存验证结果二、nppiResize_8u_C3R函数定义NppStatus nppiResize_8u_C3R(const Npp8u * pSrc, int nSrcStep, Nppi.原创 2021-01-18 10:25:55 · 5995 阅读 · 1 评论 -
CUDA库之NPP(二):NPP实现YUV转BGR
博主在CUDA库之NPP:NVIDIA 2D Image and Signal Processing Performance Primitives中已经详细介绍了NPP是啥,以及如何编译NPP。这里就以 YUV转BGR为例,来完成NPP中的第一个例子(PS:也是博主的第一个Demo)一、前言本文中的例子,仅适合于 512∗512512*512512∗512倍数的图像,因为npp处理数据时,有字节对齐这个说法,博主计划另写一篇文章,探讨字节对齐,本文不再单独研究。因为只是一个很简单的Demo,所原创 2020-12-15 13:54:27 · 5196 阅读 · 8 评论 -
CUDA库之NPP入门(一):NVIDIA 2D Image and Signal Processing Performance Primitives
那就离不开Cuda中NPP这个库,那就来个初探NPP库。以下翻译自 https://docs.nvidia.com/cuda/npp/index.html文章目录一、What is NPP?二、API接口文档三、头文件四、库文件五、编译程序时,NPP库之间的链接关系一、What is NPP?NVIDIA NPP是2D图像和信号处理的CUDA加速库。NPP库可以在最大限度地提高灵活性,同时保持高性能。可以采用以下两种方式使用NPP库作为一个独立的库,可以最小的工作量向应用程序添加GPU加速原创 2020-12-08 15:06:30 · 10181 阅读 · 3 评论 -
CUDA学习(十二):矩阵乘法
博主CUDA学习系列汇总传送门(持续更新):编程语言|CUDA入门文章目录一、CPU下一般矩阵乘法二、CPU下循环交换矩阵乘法本文章为 《 GPU编程与优化 大众高性能计算》的读书笔记,例子也都取自书中教程。矩阵乘法的运算量和数据量的关系不再是线性关系,对应的运算量为O(n3)O(n^3)O(n3)。矩阵乘法的数学表达式如下:本质上看,矩阵陈发是向量内积的集合,CCC矩阵的每一个元素都是AAA矩阵一行和BBB矩阵一列的向量内积。在C语言中,数据是按行存储的,所以BBB矩阵的访存不连续,导致.原创 2020-11-24 19:48:50 · 4678 阅读 · 1 评论 -
CUDA学习(十一):原子操作实现向量内积
文章目录一、原子操作的概念二、一次原子操作替换两次归约三、Block内归约,block间原子操作本文章为 《 GPU编程与优化 大众高性能计算》的读书笔记,例子也都取自书中教程。向量内积运算中,需要用到的原子操作函数是原子加法函数,GPU的向量内积运算包含的两个累加部分都可以采用原子操作替换,分别是block内thread间归约和block间归约,当然也可以只用一次原子操作。原子操作又可以分为全局存储原子操作和共享存储原子操作,抢号能对应向量内积中的两个累加部分。一、原子操作的概念摘自 CUDA原创 2020-11-20 09:46:05 · 1377 阅读 · 2 评论 -
CUDA学习(十):向量内积的多种方法实现
文章目录一、CPU上实现向量内积二、GPU下单Block分散归约向量内积三、单Block低线程归约向量内积四、多block向量内积本文章为 《GPU编程与优化 大众高性能计算》的读书笔记,例子也都取自书中教程。向量内积运算中各元素的运算间存在简单联系,即需要累加所有元素乘积结果。向量内积结果的累加过程称为归约(reduction)向量内积运算在数学上的计算公式为也就是A和B的向量长度相等,相同索引的元素相乘,然后将乘积结果累加,得到结果C一、CPU上实现向量内积#include <std原创 2020-11-18 20:19:54 · 2427 阅读 · 2 评论 -
CUDA学习(九):共享内存
转自 CUDA学习笔记(6) 共享内存与全局内存 共享内存(Shared memory)是位于每个流处理器组(SM)中的高速内存空间,主要作用是存放一个线程块(Block)中所有线程都会频繁访问的数据。流处理器(SP)访问它的速度仅比寄存器(Register)慢,它的速度远比全局显存快。但是他也是相当宝贵的资源,一般只有几十KByte。 全局显存(Global memory)的大小比共享显存(Shared memory)大了几个数量级。当然,共享显存的访问速度也一定比全局显存快。再从硬件上看:转载 2020-11-18 13:56:11 · 2979 阅读 · 0 评论 -
TensorRT(6):指定GPU列表和设置GPU索引
文章目录1、cudaGetDeviceCount()函数2、cudaSetDevice()函数3、cudaGetDeviceProperties()函数4、cudaChooseDevice()函数5、cudaSetValidDevices()函数遇到的情况是,服务器上有两张卡,默认是跑到卡0上了,现在想在卡1上运行TRT的接口。找了一圈,没有发现TRT提供指定GpuId的设置的参数。可以用CUDA提供的设备管理函数来指定GPU索引号需要调用CUDA函数中的cudaSetDevice(gpuId)选择原创 2020-10-29 11:13:24 · 5882 阅读 · 0 评论 -
CUDA学习(八):CUDA流(Stream)
CUDA流(Stream)转自CUDA流(Stream)转载 2020-10-23 15:17:52 · 1966 阅读 · 0 评论 -
CUDA学习(七):CUBLAS库实现向量加法
文章目录一、CUBLAS(V2)库的主要流程说起CUDA,不得不提NVIDIA巨资打造的CUDA库,CUDA函数库可以看做GPU程序的优化极限。针对向量加法,CUBLAS库函数中cublasaxpy()函数可以实现向量加法功能,在float的前提下,可以用cublasSaxpy()函数。本节主要学习了cublas库的调用方法:包括代码上的主要流程以及CMakeList.txt链接库。一、CUBLAS(V2)库的主要流程1、引用头文件cublas_v2.h2、利用cublasHandle_t申明原创 2020-07-28 23:34:07 · 3153 阅读 · 1 评论 -
CUDA(六):多种方法实现向量加
文章目录一、单block 单thread相加二、单block多thread相加向量加法是高性能运算中最简单的运算,本章节将通过CUDA中的几种加法例子来理解CUDA中thread/block的概念一、单block 单thread相加GPU端的向量加法与CPU端类似,只是核函数申明需要用__global__限定符标识;核函数调用时需要<<< X, X>>>配置grid和block维度。/**====================================原创 2020-07-06 22:41:20 · 2217 阅读 · 0 评论 -
CUDA学习(五):GPU体系结构的相关术语
一、GPU中的几个概念二、【CUDA学习】GPU硬件结构原创 2020-07-02 22:21:50 · 794 阅读 · 0 评论 -
CUDA学习(四):CUDA编程七个步骤
文章目录一、cudaMalloc、cudaMemcpy和cudaFree 介绍二、第一个例子,实现GPU端的加法可以像调用C函数那样将参数传递给核函数当设备执行任何有用的操作时,都需要分配内存,例如将计算机返回给主机。一、cudaMalloc、cudaMemcpy和cudaFree 介绍内存空间开辟、内存复制和内存释放static __inline__ __host__ cudaError_t cudaMalloc( T **devPtr, size_t size)ex原创 2020-07-01 23:38:41 · 4121 阅读 · 1 评论 -
CUDA学习(三):查询GPU设备
文章目录一、cudaDeviceProp 类二、Demo获取显卡名称一、cudaDeviceProp 类全靠荡,中文不全可以看英文/** * CUDA device properties */struct __device_builtin__ cudaDeviceProp{ char name[256]; /**< 设备名称,比如1080Ti ASCII string identifying device */ cudaU原创 2020-06-30 23:33:52 · 2952 阅读 · 0 评论 -
CUDA学习(二):Cmake编译Hello cuda!
文章目录一、配置CMakeLists.txt二、hello cuda!ubuntu下写Cu代码,那首选IDEL当然是CLion了。Clion编译Cuda需要CMakeLists.txt一、配置CMakeLists.txt0、用CLion新建立一个工程 CUDA Executable,或者直接建立一个普通的C++ Executable将主函数main.cpp变成了main.cu。然后配置CMakeList.txt文件1、FIND_PACKAGE找到已经安装的CUDA2、使用CUDA_ADD_L原创 2020-06-28 22:58:20 · 8720 阅读 · 14 评论 -
CUDA学习(一):Makefile编译Hello cuda!
一、Linux下编译系统Centos7.4, cuda10文件目录.├── helloCuda.cu└── Makefilec++使用的是 gcc hello.cpp -o hellocuda是采用nvcc编译 将gcc改成nvcc即可make./helloCuda二、hello cuda!#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>__glob原创 2020-05-12 16:24:43 · 4389 阅读 · 2 评论