- 博客(14)
- 收藏
- 关注
原创 手写cuda算子:CUDA算子向量化访存实现float/float4/half/half2/int/int4 6种数据类型的elementwise计算 (六)
多数据格式cuda向量化访存计算
2025-03-16 20:29:32
744
2
原创 GPU视频编解码:X86 DeepStream 视频编解码入门(三)
1.CVCUDA是字节和NVIDIA开发的基于CUDA进行视频图像处理工具,代替OpenCV。3.代码讲解(非常简洁,比前面几个系列硬编解码都nice!3. nvidia-nvimgcodec这是处理图片的工具。2.编码前后文件大小对比,降低了75%+存储空间。4.pycuda提供python cuda 接口。2.python3 版本 必须得是3.10。1.视频编码:成功将mp4进行h264编码。3.安装 :必须是python3.10。2.whl文件下载:以下方式都行。3.cuda 版本必须大于12。
2025-03-16 00:27:19
862
原创 GPU视频编解码:X86 VideoProcessFrame 视频编解码入门(二)
2. 测试 GPU 硬件编码功能:读取输入视频,解码并编码成 H.264,验证编码的帧数与解码的帧数是否一致。2.设备端为auto-dl的远程设备(在wsl上cuda-11.8编译不出来PyNvCodec)1.基础配置:cuda12.1+python3.12,cuda不要低于12.1,python3.10以上。3.测试在 输入视频分辨率动态变化 时,解码器和编码器的重新配置功能。1.VPF框架目前不支持Jetson系列,实验设备为X86主机,4.中间会出现一个error,安装一下依赖就好了。
2025-03-15 16:10:37
688
原创 GPU视频编解码:Jetson VPI+multimedia_api视频编解码入门(一)
2. cuda h264解码。1.cuda h264编码。
2025-03-15 12:13:15
507
原创 手写cuda算子:一个CUDA算子融合5个OP: cuda_resize_pad_cvtcolor_nhwc2nchw_normlize实现超5000倍加速CPU推理 (五)
1.resize_pad算子:这个op在上面一篇文章里面也介绍了,主要分为两部分,遍历dst矩阵每一个位置,通过matrix_dst2src计算该位置在src源图像中的临近位置,用双线性插值通过四个最邻近位置计算实际位置,越界的就默认填充const_value2.cvtcolors算子:这个op其实就是在填充双线性插值之后填充dst矩阵时将这个指针的bgr三个值0和2位置交换就实现了!
2025-03-13 15:57:58
1331
1
原创 手写cuda算子:融合算子Fuse_Resize_Pad_Bgr2rgb实现超50-2000倍加速CPU推理 (四)
3.在cuda核函数里面通过遍历dst每一个位置,通过matrix_dst2src 仿射变换计算该位置在src源图像的位置;此时的位置是一个浮点数结果,需要通过双线性插值计算目标点的值。1.cuda计算与cv::resizepad的时间对比(jetson目前内存有泄漏,晚上更新大batch的case)推理前,声明指针-->根据超参数batch分配显存-->将cv::Mat指针数据拷贝到device。2.cuda计算与cv::resizepad_bgr2rgb的时间对比。1.仿射变换与放射变换矩阵。
2025-03-12 17:36:07
916
1
原创 手写cuda算子:实现GPU+CPU FP32+FP16+INT8精度矩阵乘法Y=X@W(三)
【代码】手写cuda算子:实现GPU+CPU FP32+FP16+INT8精度矩阵乘法Y=X@W(二)
2025-03-11 00:42:11
622
原创 手写cuda算子:实现GPU+CPU FP32+FP16+INT8精度矩阵哈达玛积(二)
【代码】手写cuda算子:实现GPU+CPU FP32+FP16+INT8精度矩阵哈达玛积(二)
2025-03-10 22:41:04
499
1
原创 手写cuda算子:实现GPU+CPU FP32/FP16/INT8精度矩阵加法运算(一)
使用模板函数实现FP32+FP16+INT8矩阵加法运算,不再重复定义函数,重复分配内存·
2025-03-09 00:34:58
1322
原创 Jetson系列: tensorrt-cuda-cpp超200fps加速推理yolov8/11(二)
1.使用cuda重写模型前后处理,使用tensorrt推理模型,全过程pipline在GPU上运行,大大降低了由于模型前后处理在cpu运算,以及数据从host 拷贝到device,从device拷贝到host带来的时间消耗。五.CmakeLists(TensorRT_ROOT&&TensorRT_LIB_ROOT 需要修改 )2.下面是我进行模型转换并设定dynamicbatch进行推理的转换命令。三、pipline的tensorrt模型推理。二、pipline的模型前处理。
2025-03-08 17:10:01
626
1
原创 Jetson系列: tensorrt-python推理yolov5(一)
2.使用trtexec模型工具将模型序列化成tensorrt框架能够加载的二进制文件,后缀名随意常见的是*.trt或者*.engine,下面是fp32和fp16两种格式的engine文件本地序列化。在使用tensorrt进行加速之前需要将自己的torch模型转为onnx格式的,这个操作很基础就不赘述了,自己根据自己的任务、部署设备选择合适的batch/infersize/opset。使用加载的model创建tensorrt模型推理上下文context。tensorrt二进制文件加载。
2025-03-08 10:25:15
1131
5
原创 Cuda编程之Cublas矩阵乘法运算cublasSgemm参数列表解析(三)
w矩阵的维度是[4,3],很显然这样的维度是不能直接y=x@w的,需要进行转置;很多文章里面写的m,n,k解释是m是A矩阵的行,n是B矩阵的列,k是A矩阵的列同时也是B矩阵的行,这是因为他是基于Trasformer里面多头注意力机制Q@K.T进行定义的,在这里我感觉容易给大家造成混淆并且难以与这里的cublas多种维度进行结合。w左矩阵在进行trans_op之前维度是[3,4],x右矩阵维度是[3,2],结果矩阵维度是[4,2]-->因此leading dimension分别是3,3,4。
2025-03-07 23:56:41
763
1
原创 Cuda编程之基于Cublas实现矩阵乘法运算Y=X@W.T(二)
cublas默认列优先读取数据,但是我们的目的基于行优先的数据进行计算和存储,如果目标公式是y=x@w-->cublas实际就是有y.T = w.T@x.T;如果目标公式是y=x@w.T;那么就要在cublas中将权重矩阵设定成需要进行转置CUBLAS_OP_T->cublas实际就是有y.T = w@x.T。#5.此次利用cublas实现了在不手动进行行列转置的情况下实现了y=x*w.T。##torch.nn.linear公式解读###1.基于Cublas实现y=x@w.T#
2025-03-07 23:03:36
358
原创 Cuda编程之基于Cublas实现矩阵乘法运算Y=X@W(一)
cublas默认列主序,那么我们如果预期Y=X*W;其实计算的是Y.T=X.T*W.T;geem运算结束之后,c++以默认行主序进行读取得到结果其实是Y=W*X;因此在cublasSgeem参数列表里面d_B处于d_A之前;实际运算方式为Y.T = W.T*X.T;此时c++再以行主序进行访存,得到的结果就是(Y.T).T = Y=X.W;C++默认以行主序进行存储和读取,但是cublas默认利用列主序进行读取和存储如果我们利用行主序的数据输入cublas最终得到的结果会与预期结果不符合。
2025-03-01 22:32:55
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人