自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(648)
  • 资源 (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 2962 1

原创 Linux内核对象引用计数和生命周期管理

int value;int pad;if(!data)2.如果对对象的引用不是临时的(pointer is not temporary),特别是对象会以指针引用的形式传递到异步上下文(另一个被处理器调度的独立线程),必须在传递这个指针引用之前,增加对对象的引用计数。调用kref_get增加引用计数前,如果上下文已经持有了一个引用计数,则kref_get过程不需要锁保护。int value;int pad;if(!

2023-11-20 22:29:59 528

原创 OpenGL Mesa库在ubuntu22.04上的编译

安装后,不需要重新启动系统,glxinfo|grep OpenGL将会发现系统的MESA驱动已经被更换。重启后使用的仍然是新编译的MESA驱动。

2023-09-19 23:04:47 617

原创 LINUX页表切换(调度)在不同架构上的实现

Linux页目录存放在 struct mm_struct字段中,通过current->mm->pgd访问。下面分析不同架构下堆栈切换逻辑。

2023-08-29 07:45:57 123

原创 Linux Buddy算法&系统分析

例如,LINUX内核设置的MAX_ORDER为11,最大有效取值为10.所以 pfn的低10位为0,也就是PFN必须按1

2023-05-16 07:37:33 356

原创 分析和解决问题的心得总结

如果从外延的角度来分析系统API的定义,你会发现和我们通常看到的软件栈层次结构恰恰相反。越高层的靠近应用的API,其包含的场景内容语义内涵越丰富,相应外延越小,只能适用于特定场景。或者说,所有的应用高层API都是基于底层API实现的,但是底层API可以实现多种应用场景的高层API,并不局限于一种,逻辑结构欧拉图如下图所示:逻辑有些类似于生物学分类按照:界-门-纲-目-科-属-种 将生命类群进行命名和划分。

2023-01-09 23:28:21 2121

原创 Cuda异步计算并行编程原理和存储管理

优化时遵守的一些原则:1.Grid一定要给足block.2.Block内一定要给足thread,目的是提高并发WARP的数目,隐藏延迟.3.Block内线程的数目一定是warpsize的整数倍.每个warp的执行上下文(execution context,如程序计数器 和 寄存器等)在warp的整个生命周期内都被保存在片上内存(on-chip memory)。因此从一个执行上下文切换到另一个执行上下文是无开销的。

2022-12-17 07:49:21 1901

原创 CPU虚拟化技术及QEMU/KVM虚拟机安装实践

计算机可虚拟化的原因是因为计算机是一个离散的系统,由于资源有限,计算机只能描述有限数量的事务,只能计算到某个固定数,然后就会用尽计算机上的所有东西。在离散系统上,让另外一个事务去虚拟化一个已经存在的事物,只不过是复制创造一个和已存在事务完全一样的事件序列。现代物理告诉我们,我们的宇宙是离散和有限的,人们首先发现了自然数,接着是0,然后又发现了自然数的对立面负数,进而宣告整数的发现。后来人们觉得整数还是不够用,就发明了比例,也就是分数,所有之前发现的数在一起构成有理数集合。

2022-11-21 22:47:25 5515

原创 关于处理器静态&动态内存屏障的原理和应用

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 429 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 2185 2

原创 基于原子操作的无睡眠锁实现

原子操作是全芯片系统级工程,原子操作的路径可能需要经过多个IP环节,每个环节都需要支持原子操作的硬件基础设施,缺失任何一个环节将无法做到原子操作。比如,GPU设备如果需要原子访问HOST Memory,中间会经过GPU本身的L2->AXI总线->NOC->PCIe->Host Memory等环节,中间每个环节都需要支持原子操作,如果某个环节不支持,比如PCIE不支持发送原子访问包,则无法用HOST 内存实现原子操作。

2022-10-03 11:50:23 392

原创 图解辗转相除法(欧几里得算法)求解最大公约/最小公倍数

基本原理:两个整数的最大公约数等于,其中较小的数和两数的差的最大公约数。个人解析:若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 8666

原创 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,则退出中断处理,继续执行线程代码。如果使用qemu-$

2022-09-11 23:44:21 673

原创 Ubuntu22.04安装CUDA深度学习环境&&cuda principle

对于BLOCK和GRID的尺寸,也用相应的三维常向量来表示,BLOCK的尺寸保存在常向量blockDim中,GRID的尺寸保存在gridDim中,他们都是CUDA C的内建变量,可以直接在设备代码中使用,在计算中,用户常常要给每个线程一个唯一的标识符,即线程号,以便给每个线程分配不同的任务。blockdim/griddim设计为三维的应该没有特别的原则性的必须这样做的理由,从计算结构的角度,二维甚至一维的与三维是等价的,三维可以做的,一维二维都可以做到。最后一行加上: blacklist nouveau。

2022-09-10 01:15:44 6879 1

原创 Img2Col卷积转矩阵的硬件的计算方式

卷积转GEMM神经网络90%以上的计算单元都是由卷积和全链接构成的,所以说,一个具有tensor core矩阵乘法单元的加速卡,已经足以加速绝大部分CNN类型的网络了。

2022-09-04 23:13:54 397

原创 C-Model以及ASIC设计

Cmodel一般应用在芯片开发前期,在芯片还没有制造出来的时候,为了避免等待而设计的芯片模型,目的是使部分应用可以在模型上开发,验证。这样做使芯片设计和软件开发可以并行直行,提高开发效率。开发模型可以用下图表示:一个典型的cmodel模型实现,Verisilicon NPU中的CMODEL,可以看到,循环中不断的调用执行接口:在构造初始化的过程中创建CMODEL主线程以及中断线程:中断线程:模拟中断挂起:HW Kici off硬件中断线程,实现中断按照事件逻辑触发,而不是在循环中轮询执行。

2022-08-30 22:45:52 5139

原创 GPGPU&&渲染GPU的工作原理和认知总结

从系统架构来看,针对GPU的架构转型还在进行过程中,目前GPU依然还处于外设的地位,还没有摆脱其从属身份,因为这个根本特性,对GPU的编程并不像对CPU编程那样直接,而调试和优化GPU程序的难度就很大了,要比CPU程序复杂很多。

2022-08-29 23:41:09 1753

原创 Linux链表(哈希,双向)使用总结

代码实现:stddef.hlog2.hlist.hhmap.hhmap.cmain.c添加释放LIST_HEAD。

2022-08-27 13:09:00 504

原创 Qemu在ARM和X86平台上的运行机制初探

User mode:用户模式,在这种模式下,QEMU 运行某个单一的程序,并且适配其的系统调用。通常我们遇到的异构 PWN 题都会使用这种模式,这种模式可以简单轻便的模拟出其他架构程序的执行过程,使做题人的重心倾斜于分析异构的题目文件上,而不是转换过程中。System mode:系统模式,在这种模式下,QEMU 可以模拟出一个完整的计算机系统。包含TCG/TCI两个后端。KVM Hosting 模式,使用KVM作为加速后端。

2022-08-23 23:06:42 1112 1

原创 利用roofline模型分析异构系统算力VS带宽

roofline模型用于描述在计算平台的算力和带宽的限制下,程序所能达到的理论性能上界。可以看到,roofline模型的纵轴为可达算力:其中A I AIAI为访存比,B W BWBW为带宽。如果把带宽比作水管,把算例比作流过水管的水流,可以形象展示如下:针对这种划分,我们大概可以将模型分为两类:1.算力未发挥型的,对应爬坡图.2.带宽未发挥型的,对应roof图.3.在转折点处,既不浪费带宽,也不浪费算力,算是一个平衡,是不是纳什均衡?...

2022-08-23 10:27:30 647

原创 一种多媒体框架中的零buffer拷贝实现机制

BUFFER管理是多媒体框架设计实现中的核心任务,在常见的多媒体框架,比如FFMPEG,GST等中,BUFFER管理的代码实现都是复杂且代码量非常大的部分。从某种意义上说,多媒体应用的核心在于BUFFER管理,一个高效易用的BUFFER管理框架不但可以提供友好的开发模型,而且还可以最大限度的挖掘VPU的计算能力,提高多媒体应用的效率。为什么可以通过零拷贝来优化多媒体框架?

2022-08-13 15:40:59 824 1

原创 Linux下的OpenGL 3D渲染接口是谁提供的?Mesa

2D情况下的渲染比较简单,无论软件渲染还是硬件加速,本质上都是生成图像的像素阵列,只不过一个是由CPU来计算的,而另一个是由GPU来计算的,当然,对于硬件加速的情况,也不是完全用不到CPU,在这种情况下,CPU主要充当一个翻译角色,将数学,几何模型按照GPU的要求翻译为其可以识别的指令和数据。

2022-08-06 11:15:28 817

原创 DeadLock(死锁)问题的可视化分析方法

预防死锁的规则,给定所有互斥操作一个全序(至于什么是全序可以去查看集合论教材),用人话说就是所有的锁按照一个类似于自然数那样的严格顺序去获取。这样的获取方式就是安全的。扩展到三个执行流的情况,执行流超过三个涉及到高维空间就很难想象了,就以三个执行流1把锁为例说明问题,它的禁止区域是一个长方体。程序按照执行流的多寡可以按照如下图进行划分:给与多个独立的硬件执行流,有些并发程序可以变成并行程序,但并不是所有的并发程序都可以变成并行程序。

2022-07-22 18:08:51 1079

原创 计算一组Tensor的直方图C算法实现

本文介绍其程序实现首先构造一组TENSOR向量,维度为150528的列向量。观察其原始的直方图分布,其分布特点如下图所示运行3BINS。

2022-07-20 21:24:51 350

原创 等额本金和等额本息还款方式的差异分析

等额本金的优劣分析:1.还款额总和少于等额本息,主要原因是等额本金总利息少.2.还款初期压力较大,还款末期压力较小。如下图,两种方式利息的每月占比情况:等额本息的优劣分析:1.还款额总和大于等额本金,主要原因是等额本息情况下,还款前期利息比重大,末期才会体现出本金的比重.2.每个还款期还款额度固定,便于提前安排家庭开支。3.占用银行本金的能力强,对于善于理财投资的人来说,如果能够抵抗住多支付的利息,是个不错的选择。

2022-07-14 23:29:32 2362 1

原创 CPU,GPU,NPU的架构差异对比

关于CPU,GPU,NPU的结构总结如下图所示:

2022-07-11 13:07:21 11295

原创 为什么做生意可以让双方生活的更好?

经济学中有个著名的结论,贸易可以让贸易双方都获益,这里我们用一个例子来说明,为什么是这样的。分析如下:馒头对于甲的价值: 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 929

原创 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 1486

原创 RSA密钥生成原理以及工具rsaeuro的移植和编译

rsaeuro是一款小巧的开源rsa算法库,它支持生成RSA Key,签名,校验,对称加密,哈希算法等多种功能,可以说是一款应对非对称加解密应用的利器,被广泛应用在多种嵌入式应用场合,比如前东家的高安机顶盒,下面简述一下它的开发步骤。

2022-05-20 21:37:24 1755

原创 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 2780 1

原创 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 2468

原创 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 2787 1

原创 Linux系统 mmap 存储映射

括号中表示预期行为,括号外部的表示在LINUX系统中的实际行为,比如组合SHARED/EXEC的读行为,对于一个可执行的共享地址来说,没有给与PROT_READ属性,预期当然不可读,但是由于CPU执行上面的代码,必须要进行读操作,而实际的硬件架构和及并没有区分执行读和其它方式的读,所以,实际上对于这样的内存,仍然是可读的。从上图中可以看到,这段匿名区域(可能是MMAP区域,现在的MALLOC都用MMAP实现)地址是向下增长的,像栈一样,就像前面提到的第二种情况,这是在哪里控制的呢?

2022-04-23 12:43:23 1746 1

原创 MIPS Linux内核编译构建环境的搭建

AI的端侧应用离不开各种算力平台,目前形成了CPU+NPU,CPU+FPGA以及CPU+GPU的几类算力搭配,他们各有优势,也各有弱点。先看它们的共同点,从组合名字可以看出,那就是他们都依赖CPU,这是因为无论NPU,FPGA还是GPU,它们的架构特点决定了在流水线pipeline,逻辑控制方面要弱于CPU,它们要么作为专用算力加速器,没有完备的指令集系统,比如GPU有简单的流水线,可以完成取指,解码执行的操作,但是它的流水线适合做大量的SIMD并行数据计算,无法完成复杂的执行流以及逻辑控制。另外还有一些没

2022-04-17 21:34:45 3386 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 4417 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 5892 1

原创 判断点和直线位置关系的算法实现

在线段上给定点P的所在方向意味着给定点P和线段(比如AB)的坐标,我们必须确定点P相对于线段的方向。也就是这个点是在线段的右边还是在线段的左边。这个点可能在线段的后面,在这种情况下,我们通过延伸线段来假设一条假想的线,并确定点的方向。点与直线的位置关系,只有三种情况存在,分别是点在直线左边,或在直线右边,或在就在线段本身上。这是一个非常基本的问题,在在线地图导航中经常遇到,例如:假设用户a在下图中必须到达C点,用户首先到达B点,但之后用户a如何知道他需要右转还是左转?

2022-03-26 16:17:28 2199 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 1829

原创 双线性内插法进行图像旋转算法的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 2925

原创 GDB 命令脚本的编写以及调试技巧汇总

在GDB调试程序的时候,如果程序带有很长的参数列表,或者调试命令本身很长,需要频繁启动调试会话时,频繁输入参数或者命令严重拖慢调试节奏,这里记录一个GDB非常有用的参数-x,可以将调试参数和调试命令以调试脚本的形式提供给GDB调试会话,这样就不用频繁输入调试命令和参数了。Linux上,万事不决问"男人","man"就是这个男人(还好是单数,如果是men就有点儿邪恶了), 我们先man一把gdb,看官方文档对 "-x"选项的解释。

2022-03-18 12:28:01 4867 1

东南大学自动控制系课程件

东南大学自动控制系课程件,包含重要课程的重要内容,是您居家生活的好助手。

2010-02-08

RFID数据采集系统设计

这个资源不错哦,大家快来下吧,非常好的真的很不错哦噢噢哦哦

2009-06-20

inside the c++ object

C++经典书籍,书中详细叙述了C++内部对象模型的实现,虚函数的实现,看完此书你会有豁然开朗的感觉

2009-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除