- 博客(65)
- 资源 (1)
- 收藏
- 关注
原创 基于硬件插值的 gaussian blur 算法的理解
offset(t1, t2) 是一个基于高斯权重的加权平均值,算出的是一个 offset(t1) 和 offset(2) 中间的一个偏移值,然后硬件基于这个偏移做一次插值,offset(t1,t2) 这个在 GPU 中是一个归一化的值。对于这个理解,首先高斯权重的和为1,其次新的y(插值结果)是两个点共同作用的结果,那么插值的权重也对应于两个点的权重。简单理解一下计算过程,就是 1 和 2 、3 和 4 两组像素点的偏移和权重带入公式的计算结果。这是新的插值计算结果,然后的计算逻辑是。
2024-12-18 11:07:06
978
原创 linux 开发机与测试机建立 ssh 隧道
在建立 ssh 隧道的时候一定要使用 127.0.0.1,使用 localhost 建立隧道,adb 无法识别,不知道问题是什么。
2024-10-15 12:02:37
380
原创 内存池可视化
该项目提供了一套 hook 机制用于获取一个 C++ 项目整个声明周期中的内存峰值,并使用 html 呈现出来,源代码采用线程局部内存(TLS)解决if (tls) {if(tls) {} } };这里使用了一个 recur_depth 变量,每次递归 +1,当值大于 0 时直接返回,避免递归调用 malloc。
2024-04-22 12:51:48
475
原创 NonCopyable
这是一个正确的测试案例,注意 Derive 类的拷贝构造和拷贝赋值写法,如果省略掉基类信息(NonCopyable),那么在调用 Derive 的拷贝构造和拷贝赋值时,NonCopyable 实际上调用的是构造函数,从而丧失了目标功能。将拷贝构造和拷贝赋值设为私有成员,子类无法访问,通过该方式实现上述功能,当然更合理的写法是采用 delete 操作符。这样显示的告诉编译器,禁止生成拷贝构造和拷贝赋值函数。
2024-01-09 13:41:08
446
原创 Chart 11 OpenCL案例
这是 opencl 的最后一章了,没什么特别的,写了一个 cv::Mat 乘以一个标量,基于 buf 和 image 两种方法实现。附上一个网站供大家学习 opencl API,这是一个官方网站,可以查询对应的 API 调用方法OpenCL 官网。
2023-12-22 14:38:49
489
原创 Chart 10 OpenCL 优化教学
这一章提供了一些示例,以演示使用前几章讨论的优化技术。除了一些简单的代码片段演示外,我们还通过使用前几章中讨论的多种实践方法,逐步优化了两个知名的图像处理 filter,即 Epsilon filter 和 Sobel filter。本章提供了一些示例和代码片段,演示了前几章介绍的优化规则以及性能的变化。开发人员应该尝试在真实设备上跟随这些步骤。由于编译器和驱动程序的升级,不是所有的结果都能够完全重现。但总体而言,通过这些优化步骤应该能够实现类似的性能提升。
2023-12-15 01:04:10
530
原创 Chart 9 Adreno GPU的 OpenCL 扩展
OpenCL平台或设备可能通过扩展机制支持未纳入核心标准的功能。KHR扩展由OpenCL标准工作组批准,但供应商支持是可选的。表示这些扩展的字符串以cl_khr开头。这些扩展通常由多个供应商支持,并且如果它们声称支持这些扩展,就必须通过一些一致性测试。KHR扩展的规范可在Khronos的官方OpenCL网站上找到。一些KHR扩展可能会在OpenCL标准的新版本中成为核心功能。EXT扩展由OpenCL标准工作组批准,但供应商支持是可选的。表示这些扩展的字符串以cl_ext开头。
2023-12-13 13:48:20
785
原创 Chart 7 内存优化
内存优化是最关键且有效的OpenCL性能技术。许多应用程序受限于内存而非计算能力。因此,精通内存优化对于OpenCL优化至关重要。
2023-12-09 16:24:55
239
原创 C++ 拷贝函数的一个注意事项
看了定义我们就理解了问题所在,b 这个对象没有被创建,所有一定会有一个构造函数会被调用,而不能赋值。c这个对象已经存在,不能再重新构造,只能调用赋值操作。- 拷贝复制函数:从另一个同类型对象拷贝其值到自我。- 拷贝构造函数:以同类型对象初始化自我。先看下面的代码,需要注意的是。
2023-10-31 14:48:19
136
原创 ARMv8架构简介
armv8架构简介,只介绍了neon指令集、处理器、寄存器部分,其他arm指令集、电源管理、内存单元、缓存等不做介绍,neon开发很少涉及到
2023-09-14 12:48:19
1333
原创 ARMv7系统寄存器
本文档介绍 NEON 和 VFP 的系统寄存器,他们用于描述 NEON 和 VFP 的系统架构。包括:FPSCR, FPEXC, FPSID,MVFR0/1.
2023-09-14 12:43:42
522
原创 【深入理解计算机系统】第九章 虚拟内存
如果TLB有个组,那么TLB索引(TLBI)是由VPN的t个最低位组成的,TLB标记是由VPN的剩余的位组成。在最糟糕的情况下,val 的内容对应于虚拟内存的某个合法的读/写区域,于是我们就覆盖了这块内存,这通常会在相当长的一段时间以后造成灾难性的、令人困惑的后果。任务结构中的一个条目指向mm_struct,它描述了虚拟内存的当前状态,其中pgd指向第一级页表的机制,mmap指向一个vm_area_stucts的链表,该链表描述了当前虚拟地址空间的一个区域,pgd则存放在CR3控制寄存器中。
2023-08-28 13:04:20
201
原创 【深入理解计算机系统】第八章 异常控制流
程序计数器的一个值序列:,其中是某个相应指令的地址,其中,到的过度为控制转移,这样的控制转移序列叫处理器的控制流。当和不相邻时(发生了突变),则发生了跳转、调用、返回这样的程序指令,这些突变称之为异常控制流(ECF)。异常控制流可以发生在:硬件层,硬件检测到的事件会触发控制突然转移到异常处理程序;操作系统层,内核通过上下文切换将控制从一个进程转移到另一个进程;应用层,一个进程发送信号到另一个进程。
2023-08-28 12:51:20
201
原创 【深入理解计算机系统】第七章 链接
编译时,编译器向汇编器输出每个全局符号(强符号和弱符号),汇编器隐含地编码至可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。不允许有多个同名的强符号如果有一个强符号和多个弱符号同名,那么选择强符号如果有多个弱符号同名,那么选择任意一个可以使用 -fno-common 编译选项,编译时,遇到多重定义符号,则触发一个错误。
2023-08-28 12:37:56
227
原创 Git命令简单使用
上传仓库到 git 上之前需要配置用户名和邮箱在本地仓库中使用名称初始化git init使用下面的命令将文件添加到仓库在所作的改动后面增加索引在git上创建一个和文件夹同名的仓库,使用下面命令链接仓库使用下面的命令将本地仓库推送到远程仓库。
2023-08-28 10:35:04
792
原创 GaussianBlur对分
高斯滤波是一种线性平滑滤波,用于消除高斯噪声。高斯滤波的中心点权重更大,原理中心的权重较小,其维度为奇数。高斯核函数用于将有限维数据映射到高维空间。通常定义为空间中任意一点 x 到某一中心点 μ 之间的欧式距离的单调函数。高斯核的计算公式为:Gx2πσ1e−2σ2x−μ2Gxy2πσ1σ21e−((2σ12x−μ122σ22y−μ22))其中,
2023-08-28 10:22:03
210
原创 OpenCV简介
OpenCV(开源计算机视觉库:http://opencv.org)是一个开源库,包含数百种计算机视觉算法。当前的 OpenCV 实现是完全可重新输入的。也就是说,不同类实例的相同函数或相同方法可以从不同线程调用。此外,相同的 Mat 可以在不同的线程中使用,因为引用计数操作使用特定于体系结构的原子指令。
2023-08-27 01:35:22
914
原创 roof-line模型
算力π:计算平台的性能上限,指的是一个计算平台倾尽全力每秒钟所能完成的浮点运算数。单位是 FLOPS or FLOP/s。带宽β:也即计算平台的带宽上限,指的是一个计算平台倾尽全力每秒所能完成的内存交换量。单位是Byte/s。计算强度上限I:两个指标相除即可得到计算平台的计算强度上限。它描述的是在这个计算平台上,单位内存交换最多用来进行多少次计算。单位是FLOPs/Byte。Iπβ。
2023-08-24 11:22:26
233
原创 【深入理解计算机系统】第六章 存储器的层次结构
具有良好局部性的程序倾向于一次又一次地访问相同的数据项集合,或是倾向于访问邻近的数据项集合。具有良好局部性的程序比局部性差的程序更多地倾向于从存储器层次结构中较高层次处访问数据项,因此运行得更快。
2023-08-23 18:13:35
168
原创 源码编译OpenCV android库,并编写一个native demo程序
不必配置环境变量,因为在编译时会指定NDK的路径,因为服务器的cmake版本是3.16.3基本上够用NDK路径。
2023-07-17 11:39:53
916
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人