- 博客(637)
- 资源 (3)
- 收藏
- 关注
原创 基于AMDGPU-ROCm的深度学习环境搭建
在风起云涌的AI江湖,NVIDIA凭借其CUDA生态和优秀的硬件大杀四方,立下赫赫战功,而另一家公司AMD也不甘示弱,带着他的生态解决方案ROCm开始了与不世出的NVIDA的正面硬钢,"ROCm is the answer to CUDA", AMD官网如是说。ROCm全称是Radeon Open Compute,从功能上,它是AMD提供的一套用于支持异构计算和GPU加速计算的开发工具和平台。
2024-02-24 08:42:15 1268
原创 OpenGL Mesa库在ubuntu22.04上的编译
安装后,不需要重新启动系统,glxinfo|grep OpenGL将会发现系统的MESA驱动已经被更换。重启后使用的仍然是新编译的MESA驱动。
2023-09-19 23:04:47 328
原创 Linux Buddy算法&系统分析
例如,LINUX内核设置的MAX_ORDER为11,最大有效取值为10.所以 pfn的低10位为0,也就是PFN必须按1
2023-05-16 07:37:33 186
原创 分析和解决问题的心得总结
如果从外延的角度来分析系统API的定义,你会发现和我们通常看到的软件栈层次结构恰恰相反。越高层的靠近应用的API,其包含的场景内容语义内涵越丰富,相应外延越小,只能适用于特定场景。或者说,所有的应用高层API都是基于底层API实现的,但是底层API可以实现多种应用场景的高层API,并不局限于一种,逻辑结构欧拉图如下图所示:逻辑有些类似于生物学分类按照:界-门-纲-目-科-属-种 将生命类群进行命名和划分。
2023-01-09 23:28:21 1855
原创 Cuda异步计算并行编程原理和存储管理
优化时遵守的一些原则:1.Grid一定要给足block.2.Block内一定要给足thread,目的是提高并发WARP的数目,隐藏延迟.3.Block内线程的数目一定是warpsize的整数倍.每个warp的执行上下文(execution context,如程序计数器 和 寄存器等)在warp的整个生命周期内都被保存在片上内存(on-chip memory)。因此从一个执行上下文切换到另一个执行上下文是无开销的。
2022-12-17 07:49:21 1058
原创 CPU虚拟化技术及QEMU/KVM虚拟机安装实践
计算机可虚拟化的原因是因为计算机是一个离散的系统,由于资源有限,计算机只能描述有限数量的事务,只能计算到某个固定数,然后就会用尽计算机上的所有东西。在离散系统上,让另外一个事务去虚拟化一个已经存在的事物,只不过是复制创造一个和已存在事务完全一样的事件序列。现代物理告诉我们,我们的宇宙是离散和有限的,人们首先发现了自然数,接着是0,然后又发现了自然数的对立面负数,进而宣告整数的发现。后来人们觉得整数还是不够用,就发明了比例,也就是分数,所有之前发现的数在一起构成有理数集合。
2022-11-21 22:47:25 3664
原创 关于处理器静态&动态内存屏障的原理和应用
barrier();r1 = y;barrier();r2 = x;编译为汇编指令.textrun1:.LFB0:ret.LFE0:run2:.LFB1:ret.LFE1:同样是movl指令,却代表这读和写两个意思,这一点和RISC处理器定义不太一样,无论是ARM,MIPS还是RISCV,读和写分别是两条不同的指令,ARM是ldr/str,MIPS是ld/sw,RISCV则和MIPS是同样的定义。
2022-11-01 23:18:10 317 2
原创 Verify与Validate的区别
Verification and Validation are the terms used for the checking process of a software. Verification is the checking of a product or software at its development phase either it is being developed to meet the required specifications. Validation is the checki
2022-10-30 15:18:40 1674
原创 图解辗转相除法(欧几里得算法)求解最大公约/最小公倍数
基本原理:两个整数的最大公约数等于,其中较小的数和两数的差的最大公约数。个人解析:若A、B有最大公约数K(A > B),则,A、B、(A - B)、A mod B(A / B的余数),都是K的倍数。即余数(A - B)和 B 的最大公公约数也是 K。由此递归,可知当 A mod B = 0,即 A 是 B 的倍数时,此时,B 即为 K。实际上,存在如下定理:两数最大公约数与最小公倍数的积等于两数之积,用公式表示就是:当时最大公因数*最小公倍数=pq。
2022-09-12 19:04:19 4121
原创 qemu中断model虚拟化是如何实现的?
当系统调用CPSR指令关闭ARM IRQ/FIQ中断的时候,QEMU模拟器将其转换为HOST的HELPER cpsr_write调用,调用中修改env->daif值关闭中断标志位CPSR_I/CPSR_F.之后在每次的中断执行入口函数arm_cpu_exec_interrupt中,如果检测到外设有CPU_INTERRUPT_HARD或者CPU_INTERRUPT_FIQ类型的中断请求,则继续检测daif的中断标志状态,如果中断被DISABLE,则退出中断处理,继续执行线程代码。
2022-09-11 23:44:21 583
原创 Ubuntu22.04安装CUDA深度学习环境&&cuda principle
对于BLOCK和GRID的尺寸,也用相应的三维常向量来表示,BLOCK的尺寸保存在常向量blockDim中,GRID的尺寸保存在gridDim中,他们都是CUDA C的内建变量,可以直接在设备代码中使用,在计算中,用户常常要给每个线程一个唯一的标识符,即线程号,以便给每个线程分配不同的任务。blockdim/griddim设计为三维的应该没有特别的原则性的必须这样做的理由,从计算结构的角度,二维甚至一维的与三维是等价的,三维可以做的,一维二维都可以做到。最后一行加上: blacklist nouveau。
2022-09-10 01:15:44 5702 1
原创 Img2Col卷积转矩阵的硬件的计算方式
卷积转GEMM神经网络90%以上的计算单元都是由卷积和全链接构成的,所以说,一个具有tensor core矩阵乘法单元的加速卡,已经足以加速绝大部分CNN类型的网络了。
2022-09-04 23:13:54 316
原创 C-Model以及ASIC设计
之前的工作中对C-Model有过简单接触,当时的情况是这样的,在客户现场遇到一个视频解码问题,简单描述就是一段码流经过VPU解码后,显示出来的画面有一点儿轻微马赛克,当时不确定是码流问题还是VPU IP内的解码算法问题,后面对比了样机表现,发现并没有马赛克。于是基本确定是VPU 的解码算法问题,VPU是当时的东家设计的,于是就把码流拿回去请专家分析。专家很快就给出了分析结果以及解决方案,至于为何这么快,后来才了解到,专家把码流在CModel上跑了一遍,很快复现到问题,后面解决问题也水到渠成了。.......
2022-08-30 22:45:52 3540
原创 GPGPU&&渲染GPU的工作原理和认知总结
从系统架构来看,针对GPU的架构转型还在进行过程中,目前GPU依然还处于外设的地位,还没有摆脱其从属身份,因为这个根本特性,对GPU的编程并不像对CPU编程那样直接,而调试和优化GPU程序的难度就很大了,要比CPU程序复杂很多。
2022-08-29 23:41:09 1457
原创 Qemu在ARM和X86平台上的运行机制初探
当QEMU进行IO操作时,将触发QEMU从指令翻译模式切换到HELPER模式,控制权将从QEMU切换到HELPER函数,HELPER函数截获IO端口地址,读写值,数据宽度等相关信息,并将这些信息传递给模拟设备,由模拟设备完成具体的IO操作。HELPER函数充当的角色之一类似于地址译码电路,HELPER函数需要根据地址信息,判断出选择那个外设。
2022-08-23 23:06:42 721 1
原创 利用roofline模型分析异构系统算力VS带宽
roofline模型用于描述在计算平台的算力和带宽的限制下,程序所能达到的理论性能上界。可以看到,roofline模型的纵轴为可达算力:其中A I AIAI为访存比,B W BWBW为带宽。如果把带宽比作水管,把算例比作流过水管的水流,可以形象展示如下:针对这种划分,我们大概可以将模型分为两类:1.算力未发挥型的,对应爬坡图.2.带宽未发挥型的,对应roof图.3.在转折点处,既不浪费带宽,也不浪费算力,算是一个平衡,是不是纳什均衡?...
2022-08-23 10:27:30 575
原创 一种多媒体框架中的零buffer拷贝实现机制
BUFFER管理是多媒体框架设计实现中的核心任务,在常见的多媒体框架,比如FFMPEG,GST等中,BUFFER管理的代码实现都是复杂且代码量非常大的部分。从某种意义上说,多媒体应用的核心在于BUFFER管理,一个高效易用的BUFFER管理框架不但可以提供友好的开发模型,而且还可以最大限度的挖掘VPU的计算能力,提高多媒体应用的效率。为什么可以通过零拷贝来优化多媒体框架?
2022-08-13 15:40:59 715 1
原创 Linux下的OpenGL 3D渲染接口是谁提供的?Mesa
2D情况下的渲染比较简单,无论软件渲染还是硬件加速,本质上都是生成图像的像素阵列,只不过一个是由CPU来计算的,而另一个是由GPU来计算的,当然,对于硬件加速的情况,也不是完全用不到CPU,在这种情况下,CPU主要充当一个翻译角色,将数学,几何模型按照GPU的要求翻译为其可以识别的指令和数据。
2022-08-06 11:15:28 590
原创 DeadLock(死锁)问题的可视化分析方法
预防死锁的规则,给定所有互斥操作一个全序(至于什么是全序可以去查看集合论教材),用人话说就是所有的锁按照一个类似于自然数那样的严格顺序去获取。这样的获取方式就是安全的。扩展到三个执行流的情况,执行流超过三个涉及到高维空间就很难想象了,就以三个执行流1把锁为例说明问题,它的禁止区域是一个长方体。程序按照执行流的多寡可以按照如下图进行划分:给与多个独立的硬件执行流,有些并发程序可以变成并行程序,但并不是所有的并发程序都可以变成并行程序。
2022-07-22 18:08:51 782
原创 计算一组Tensor的直方图C算法实现
本文介绍其程序实现首先构造一组TENSOR向量,维度为150528的列向量。观察其原始的直方图分布,其分布特点如下图所示运行3BINS。
2022-07-20 21:24:51 325
原创 等额本金和等额本息还款方式的差异分析
等额本金的优劣分析:1.还款额总和少于等额本息,主要原因是等额本金总利息少.2.还款初期压力较大,还款末期压力较小。如下图,两种方式利息的每月占比情况:等额本息的优劣分析:1.还款额总和大于等额本金,主要原因是等额本息情况下,还款前期利息比重大,末期才会体现出本金的比重.2.每个还款期还款额度固定,便于提前安排家庭开支。3.占用银行本金的能力强,对于善于理财投资的人来说,如果能够抵抗住多支付的利息,是个不错的选择。
2022-07-14 23:29:32 1798 1
原创 为什么做生意可以让双方生活的更好?
经济学中有个著名的结论,贸易可以让贸易双方都获益,这里我们用一个例子来说明,为什么是这样的。分析如下:馒头对于甲的价值: 0.5瓶啤酒=1个馒头馒头对于乙的价值: 6瓶啤酒=1个馒头结论1:馒头对于乙的价值更大,1个馒头对甲只值半瓶啤酒啤酒对于甲的价值: 2个馒头=1瓶啤酒啤酒对于乙的价值: 0.16667个馒头=1瓶啤酒结论2:啤酒对于甲的价值更大,1瓶啤酒对乙只值0.16667个馒头所以,如果甲1个馒头换乙3瓶啤酒喝,对两个人都划算。乙怎么想?本来我一个馒头值6瓶啤酒,现在我只要出三瓶啤酒,就能换来一个
2022-06-24 23:18:27 752
原创 ubuntu18.04安装并测试gem5模拟器
开发环境安装依赖:sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python依赖简单介绍如下:SCons:gem5使用SCons作为它的构建环境。SCons类似于make,它将Python脚本用于构建过程的所有方面。这使得构建系统非常灵活(
2022-05-27 06:45:20 1232
原创 RSA密钥生成原理以及工具rsaeuro的移植和编译
rsaeuro是一款小巧的开源rsa算法库,它支持生成RSA Key,签名,校验,对称加密,哈希算法等多种功能,可以说是一款应对非对称加解密应用的利器,被广泛应用在多种嵌入式应用场合,比如前东家的高安机顶盒,下面简述一下它的开发步骤。
2022-05-20 21:37:24 1218
原创 QEMU&KVM 虚拟机实例demo以及RISCV上KVM的实现分析
KVM通过一组IOCTL向用户空间导出接口,这些接口能够用于虚拟机的创建,虚拟机内存的设置,虚拟机VCPU的创建与运行等,按照接口所使用的文件描述符不同,KVM的这组IOCTL接口可以分为三类:0./dev/kvm节点对应全局kvmfd, 通过kvmfd创建每个虚拟机对应的vmfd, 再由vmfd为每个虚拟VCPU创建一个vcpufd,vcpufd通过vmfd暴露的接口获取。KVM全局管理用kvmfd,虚拟机管理用vmfd, vcpu运行用vcpufd. 内核对应三套chrdev的fops.
2022-05-02 10:36:06 2531
原创 qemu 启动ARM虚拟机的几点释惑
1.hw/arm/boot.c是各类BOOT的集散地,另一个之前接触过的BOOT为smpboot(为某款双核A7设计SMP版的FREERTOS,在这里得到启动灵感)。2.QEMU虚拟机本身对系统行为的模拟是完备的,不需要修改GUEST内核,所以基本上,QEMU启动命令的每个选项,背后都有文章,主要分成两个方面进行模拟,第一是对CPU的模拟,这是靠TCG翻译完成的,对于算力密集型程序,TCG会很忙很忙。第二个是对IO行为的模拟,而这个是依赖对各类IO支持完成的。
2022-05-01 12:06:46 2260
原创 linux4.15 arm qemu @ubuntu18.04环境搭建与bootgraph启动优化
本环境对内核和BUSYBOX的版本要求并不严格,只要是同一个时期的内核和Busybox,都不会有太大问题,比如下面用的busybox-1.35.0.tar.bz2搭配linux-5.15.90.tar.xz也是可以的。
2022-04-26 20:44:56 2445 1
原创 Linux系统 mmap 存储映射
括号中表示预期行为,括号外部的表示在LINUX系统中的实际行为,比如组合SHARED/EXEC的读行为,对于一个可执行的共享地址来说,没有给与PROT_READ属性,预期当然不可读,但是由于CPU执行上面的代码,必须要进行读操作,而实际的硬件架构和及并没有区分执行读和其它方式的读,所以,实际上对于这样的内存,仍然是可读的。remap_pfn_range/io_remap_page_range负责为一段物理地址建立新的页表,在很多架构上,这两个函数是等价的,大部分清宽下会使用前者。
2022-04-23 12:43:23 1430 1
原创 MIPS Linux内核编译构建环境的搭建
AI的端侧应用离不开各种算力平台,目前形成了CPU+NPU,CPU+FPGA以及CPU+GPU的几类算力搭配,他们各有优势,也各有弱点。先看它们的共同点,从组合名字可以看出,那就是他们都依赖CPU,这是因为无论NPU,FPGA还是GPU,它们的架构特点决定了在流水线pipeline,逻辑控制方面要弱于CPU,它们要么作为专用算力加速器,没有完备的指令集系统,比如GPU有简单的流水线,可以完成取指,解码执行的操作,但是它的流水线适合做大量的SIMD并行数据计算,无法完成复杂的执行流以及逻辑控制。另外还有一些没
2022-04-17 21:34:45 2965 1
原创 Dhrystone DMIPS跑分原理以及CPU&NPU等效算力分析
下载dhrystone,编译,排错,再编译,再排错,编译PASS,一顿操作之后,dhrystone成功被移植到某款Cortex-A7平台,主频跑1.2G HZ的情况下,在melis上测试,结果如下:msh />dhrystone Dhrystone Benchmark, Version 2.1 (Language: C) Program compiled without 'register' attribute Please give the number of runs throu
2022-04-16 19:43:40 3801 1
原创 全连接层的算力(矩阵乘法)计算方式
神经网络的全链接层计算过程可以看成两个矩阵相乘,如下图所示,一个MxN的矩阵乘以一个NxP的矩阵,得到一个MxP的矩阵,进行乘法的次数为:(N)*(M*P)加法次数为:(N-1)*M*P所以,矩阵乘法总的计算量为(N)*(M*P)+(N-1)*M*P = (2N-1)*M*P每计算出一个结果,需要对一个N维向量作内积,内积需要进行N次乘法和N-1次加法(第一次计算不需要作加法,或者看成+0,就不需要-1了),计算一个结果的计算次数为2N-1.比如,就拿3*3的矩阵乘法为例:计算如下:所以,它的计算量为:乘法
2022-04-09 08:56:55 4826 1
原创 V853 RTSP AI人脸检测串流功能开发
本篇介绍的过程并不复杂,原理上比上篇博客介绍的要简单一些,有趣的地方在于将之前的编码落盘和预览转换为了两路RTSP子码流输出,这样码流可以传的更远一些。V833/V831目标检测demo方案开发_papaofdoudou的博客-CSDN博客_v833整个应用方案原理如下:闲言少叙,下面开始技术流水账:第一步,打开Tina EMAC以太网络支持。由于uart2和emac phy是share pin的,所以需要事先将默认配置为uart功能的PIN角修改为emac功能,方法是cconfig
2022-03-23 19:48:36 1696
原创 双线性内插法进行图像旋转算法的C代码实现
原图:代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stddef.h>#include <stdint.h>#include <fcntl.h>#include <unistd.h>#include <assert.h>#include <sys/ioctl.h>#include
2022-03-20 06:45:08 2861
原创 GDB 命令脚本的编写以及调试技巧汇总
在GDB调试程序的时候,如果程序带有很长的参数列表,或者调试命令本身很长,需要频繁启动调试会话时,频繁输入参数或者命令严重拖慢调试节奏,这里记录一个GDB非常有用的参数-x,可以将调试参数和调试命令以调试脚本的形式提供给GDB调试会话,这样就不用频繁输入调试命令和参数了。Linux上,万事不决问"男人","man"就是这个男人(还好是单数,如果是men就有点儿邪恶了), 我们先man一把gdb,看官方文档对 "-x"选项的解释。
2022-03-18 12:28:01 4237
原创 验证darknet中前处理做图像缩放(双线性内插值法)scale的算法效果
关于图形scale原理的介绍可以参考下面的文章用最近邻插值(Nearest Neighbor interpolation)进行图片缩放_papaofdoudou的博客-CSDN博客_最近邻插值算法原理个图片缩放的两种常见算法: 最近邻域内插法(Nearest Neighbor interpolation) 双向性内插法(bilinear interpolation)本文主要讲述最近邻插值(Nearest Neighbor interpolation算法的原理以及python实现基本原理最简单的图像缩放算
2022-03-17 17:37:22 1576
原创 Darknet卷积层算力评估
darknet是用C语言开发的一款非常精简高效的推理框架,它的开发者也是YOLO的作者,关于darknet推理环境的介绍网上有很多,不再过多介绍,这里只是尝试解读darknet推理过程中的一些细节知识点,就从推理输出的算力来源开始。一张经典的输出:推理过程中的LOG显示中,BF是BFOPS的缩写,它表示什么意思呢?BFLOPS 有两个不同场景下的解释。 第一种是描述硬件运算性能的单位,这时其全称是Billion Float Operations Per Second,即每秒能进行多少个十亿次
2022-03-15 23:44:37 4361 1
原创 用布雷森汉姆(Bresenham)算法直接在YUV图上绘制图形
Bresenham的线算法以Jack Elton Bresenham命名,他于1962年在IBM开发。是计算机图形学中的经典算法,恰好最近公司项目中需要实现类似的功能,于是就实践了一把,为了以后帕坑方便,记录在此。图形转YUV我们是在YUV裸数据上去绘,而通常的图像都是代容器格式的JPG或者PNG等等,所以需要首先将图片转换为YUV裸数据,我们用FFMPEG这款视频处理领域的瑞士军刀完成此功能。常用的YUV格式有NV12和NV21两种,,NV12 分两个平面,Y 平面和 UV 平面存储,UV 在
2022-03-05 01:54:02 2201
原创 cuda-z/gpu-z/cpu-z工具分析GPU显卡和CPU算力信息
类似于Windows下使用CPU-Z工具查看CPU信息,Linux下也可以使用CUDA-Z工具来查看显卡资源/支持信息。
2022-02-06 12:18:45 8089
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人