- 博客(139)
- 资源 (1)
- 收藏
- 关注
原创 Qcom与Android元数据对比解析
特性首要目标兼容性、标准化性能、灵活性适用阶段HAL边界交互(与框架/应用)HAL内部处理(管线节点间)优化方向减少拷贝、优化Vendor Tag查询、利用Binder大块传输内存池化、无锁设计、异步流水线、零拷贝传递对开发者可见性高(应用开发者、框架开发者)低(主要影响HAL底层开发者、驱动工程师)开发与优化建议:理解数据流:清晰区分某次元数据读写是发生在Android框架边界还是HAL内部管线,这决定了你应关注哪套体系的问题。性能剖析:使用systrace或平台性能工具定位延迟。
2026-05-07 09:15:01
94
原创 Metadatapool类型详解及应用场景
在CamX(Camera eXtension)架构中,是相机HAL层元数据管理的核心内存池组件,主要用于高效地分配和复用MetaBuffer对象(即元数据缓冲区)。根据其生命周期、作用域和使用场景,被设计为多种类型,每种类型服务于相机管线中不同的处理阶段和组件。
2026-05-07 09:09:29
91
原创 Qcom Camera HAL元数据池分类与应用
在Qcom Camera HAL中不是一个单一实体,而是一个根据作用域(Session/Pipeline)、用途(输入/输出/内部)和格式(ChiMetadata/camera_metadata_t)分层、分类的体系。其核心设计思想是通过预分配和复用,将元数据的内存管理从动态、不可控转化为静态、可预测,从而满足相机子系统对高性能、确定性的严苛要求。理解不同池的分类及其使用场景,是进行性能调优、内存优化和解决复杂异步元数据流问题的关键基础。
2026-05-07 09:06:14
91
原创 异步等待与回调机制解密
针对“出口转换异步收集未就绪数据”的问题,核心在于设计一种高效、低延迟的机制,以非阻塞的方式处理那些在数据转换(如 CamX 中 Android 与 Qcom 元数据格式转换)过程中,由于依赖关系或计算未完成而暂时无法获取的数据项。这通常涉及等技术的组合。以下是几种核心解决方案及其在 CamX 架构下的具体实现推演。
2026-05-07 09:00:59
146
原创 无锁队列解决MetadataPool锁竞争
高并发下的锁竞争主要发生在对空闲槽位(Slot)索引队列的并发访问上,尤其是GetSlot(分配)和(回收)操作频繁时,互斥锁(std::mutex)会成为显著的性能瓶颈,导致线程阻塞和延迟增加。针对此问题,存在多种成熟的无锁(Lock-free)或低锁(Low-lock)替代方案,其核心思想是。
2026-05-07 08:49:23
212
原创 Qcom MetadataPool 内存复用机制解析
Qcom通过预分配固定大小内存块、引用计数生命周期管理和惰性重置三大机制,实现了在高并发连拍场景下内存块的高效复用。其本质是一个为相机元数据定制的对象池(Object Pool)模式,通过空间换时间,将不可预测的动态内存管理转化为确定性的内存循环利用,从而满足了相机 HAL 对高吞吐、低延迟的严苛要求。有效的调优在于根据并发度合理配置池深度、减少锁竞争、并监控池的使用水位,确保内存复用流水线始终畅通。
2026-05-07 08:45:29
195
原创 Qcom与Android Metadata差异解析
Android Metadata 是确保兼容性的“基石”,而 Qcom Metadata 是实现差异化竞争和性能突破的“利器”。在开发中,应优先使用 Android 标准接口保证基本功能,仅在必须调用芯片特定能力或进行极致优化时,才通过。
2026-05-07 08:30:04
172
原创 Android与Qcom元数据转换性能瓶颈解析
CamX 架构下元数据转换的性能瓶颈是一个系统工程问题,主要存在于入口的扩展映射、出口的异步收集以及池化内存管理三个环节。这些瓶颈在高端机型的多帧合成、高分辨率高速连拍等极限场景下会被放大。减少不必要的转换和数据搬运、优化共享资源(如 MetadataPool)的访问模式,并通过 profiling 工具进行量化分析和针对性调优。理解这些瓶颈点是进行 Camera HAL 深度性能优化的关键前提。
2026-05-07 08:29:34
160
原创 静态ID加速CamX Vendor Tag查找
通过为高频 Vendor Tag 预定义静态整数 ID,并贯穿应用于 HAL 注册、内部存取及上层调用全链路,可以彻底消除运行时字符串查找的开销,是解决 CamX 架构下 Vendor Tag 查找慢问题的根本性优化方案。该方案以牺牲少量灵活性为代价,换取了显著的性能提升,尤其适用于对延迟敏感的高帧率视频、高速连拍以及实时预览等场景。实施关键在于严格维护一套跨层的、一致的静态 ID 定义,并辅以充分的测试验证。
2026-05-07 08:28:43
249
原创 深度学习入门:多层感知机实现异或门
最近又开始看深度学习的内容了,好久不用忘得差不多了,先从最简单的感知机入手了,这里记录下用2层感知机实现异或门。
2023-04-26 00:08:05
2588
原创 c++多线程编程 Trap 2: std::promise多次set_value引发的灾难
c++多线程编程Trap 2: std::promise::set_value在一个线程中多次调用
2023-04-02 14:18:37
1283
原创 Bug分析: cuda程序cudaGetDeviceProperties()返回unknown error
cuda程序cudaGetDeviceProperties()返回unknown error
2022-08-29 23:26:07
1605
1
原创 CUDA C编程10:核函数可达到的带宽
系列文章目录文章目录系列文章目录前言一、理论知识二、案例分享2.1 朴素转置2.2 展开转置2.3 对角转置2.4 通过瘦块方法来增加并行性2.5 完整代码:总结参考资料前言忙里偷闲,继续学习CUDA C编程,今天开始学习核函数的带宽的相关知识点,提高性能。一、理论知识分析核函数性能时,要注意以下两点:(1)内存延迟:完成一次内存请求的时间;(2)内存带宽:SM访问设备内存的速度,以每单位时间内的字节数来度量。之前了解的改进核函数性能的方法有两种:(1)通过最大化并行线程束
2022-04-19 01:46:26
1627
原创 CUDA C编程: win10 vs2017开启与关闭一级缓存
系列文章目录文章目录系列文章目录前言开启与关闭一级缓存总结参考资料前言这里跟大家分享下win10 vs2017中如何启用与关闭一级缓存开启与关闭一级缓存在win10 vs2017项目属性页面中添加如下编译命令可以开启或关闭GPU设备一级缓存://开启一级缓存-Xptxas -dlcm=ca//关闭一级缓存-Xptxas -dlcm=cg这里有一点要特别注意,上述编译命令是大小写敏感的,否则win10 vs2017会报编译错误。总结以上是本人实际经验,如有错误,
2022-04-16 00:37:34
862
原创 CUDA C编程10:内存访问模式之全局内存读取
系列文章目录文章目录系列文章目录前言一、内存访问模式之全局内存读取1. 内存访问模式基础知识1.1 对齐和合并访问二、全局内存读取示例1.代码实现2.NVIDIA Visual Profiler运行结果分析总结参考资料前言之前在复习现代C++的新特性,没有继续CUDA C编程的学习,今天开始继续之前的学习,这里跟大家分享内存访问模式中全局内存读取的知识。一、内存访问模式之全局内存读取1. 内存访问模式基础知识我们所编写的GPU程序容易受到内存带宽的限制,因此,最大限度利用全局内存
2022-04-08 00:40:44
3748
原创 CUDA C编程9:内存管理之统一虚拟寻址、统一内存寻址
系列文章目录文章目录系列文章目录前言一、统一虚拟寻址1. 统一虚拟寻址技术2. 示例程序二、统一内存寻址1.统一内存寻址技术2.示例程序总结参考资料前言这里开始介绍内存管理中的统一虚拟寻址和统一内存寻址技术的相关知识点。一、统一虚拟寻址1. 统一虚拟寻址技术只有计算力在2.0及以上版本的设备支持一种特殊的寻址方式,即为统一虚拟寻址(UVA)。有了UVA,主机内存和设备内存共享统一虚拟地址空间,说白了,和之前介绍的零拷贝内存技术的功能相同,不需要cudaMemcpycudaMemc
2022-03-11 01:13:16
4745
原创 CUDA C编程8:内存管理之零拷贝内存
系列文章目录文章目录系列文章目录前言一、零拷贝内存相关知识点二、零拷贝内存示例1. 代码实现2. 运行结果总结参考资料前言这里跟大家分享内存管理第三篇:零拷贝内存。一、零拷贝内存相关知识点之前学习的CUDA知识中,主机不能直接访问设备变量,需要通过cudaMemcpycudaMemcpycudaMemcpy函数实现主机与设备间数据拷贝,当然设备也不能直接访问主机变量。这里介绍的零拷贝内存则是个例外,主机和设备都可以访问零拷贝内存。注意,零拷贝内存相当于从全局内存中分出的一块独立
2022-03-10 01:15:03
3597
原创 CUDA C编程7: 内存管理之固定内存
系列文章目录文章目录系列文章目录前言一、固定内存相关知识点二、固定内存示例总结参考资料前言这里开始介绍CUDA C编程内存管理中的固定内存相关知识。一、固定内存相关知识点系统分配的主机内存默认是可分页的,GPU不能在可分页主机内存上安全地访问数据,这是因为主机操作系统在物理位置上移动数据时,GPU无法控制。当从可分页主机内存传输数据到设备内存时,CUDA驱动程序首先分配临时页面锁定的或固定的主机内存,将主机源数据复制到固定内存中,然后从固定内存传输数据给设备内存。使用如下函数可
2022-03-08 23:56:57
1825
原创 CUDA C编程6 - 内存管理之内存分配、传输与释放
系列文章目录文章目录系列文章目录前言一、内存管理相关概念1. 内存分配和释放2. 内存传输二、内存分配、传输与释放示例总结参考资料前言这里开始跟大家分享CUDA内存管理相关的知识。一、内存管理相关概念这里主要介绍如何使用CUDA函数来显示管理内存和数据移动。CUDA提供了在主机端准备设备内存的函数,并且显示的向设备传输数据和从设备中获取数据。1. 内存分配和释放在主机上使用如下函数分配全局内存:cudaErrortcudaMalloc(void∗∗ devPtr,
2022-03-08 00:38:22
1996
原创 CUDA C编程5 - CUDA内存模型
系列文章目录文章目录系列文章目录前言一、CUDA内存模型1. 寄存器2. 本地内存3. 共享内存4. 常量内存5. 纹理内存6. 全局内存7. GPU缓存二、静态全局内存示例总结参考资料附录前言最近在温习CUDA C 全局内存的知识,这里对关键知识点进行总结并分享给大家。较差的全局内存访问方式是造成内存负载效率大幅下降的原因之一。这里主要介绍以下几点内容:剖析核函数与全局内存的联系及其对性能的影响;介绍全局内存访问模式介绍如何通过核函数高效的利用全局内存一、CUDA内存
2022-03-06 22:31:23
1541
原创 CUDA C编程4 - 动态并行理解
系列文章目录文章目录系列文章目录前言一、动态并行概念二、嵌套执行三、动态并行的限制条件四、嵌套规约4.1 基本方法(线程同步及线程块同步)4.2 加速方法(去除线程同步以及线程块同步)4.3 进一步加速方法(待完善。。。)五、运行结果总结参考资料附录:完整代码前言之前学习了CUDA C编程中动态并行技术, 这里进行总结,以加深理解,并希望能够对大家有所帮助。一、动态并行概念之前接触的CUDA C设备函数的调用都是在CPU端进行的,即设备函数的执行在CPU的控制下。自然而然,我们就会
2022-03-01 01:29:26
2280
1
原创 CUDA-C编译错误 -动态并行程序
文章目录前言问题描述及分析动态并行实例程序动态并行程序运行结果总结参考资料前言今天试着在windows 10 VS2017上编译并运行CUDA-C中动态并行技术的简单程序,想看看该技术的运行效率,但是编译就出错了,这里记录下解决过程。问题描述及分析动态并行程序的HelloWorld示例编写好后,编译程序时,出现如下错误:从错误提示中可知,设备函数需要单独的编译模式,结合参考书中介绍的编译命令,需要将 -rdc=true, 即强制生成可重定位的设备代码,这是动态并行的一个要求。基于这个知识,在编译
2022-02-24 23:46:27
1242
原创 CUDA C编程3 - 并行性衡量指标
系列文章目录文章目录系列文章目录前言一. CUDA C并行性衡量指标介绍二、案例介绍1. 案例说明2. 案例实现3. 结果分析总结参考资料前言CUDA编程,就是利用GPU设备的并行计算能力实现程序的高速执行。CUDA内核函数关于网格(Grid)和模块(Block)大小的最优设置才能保证CPU设备的这种并行计算能力得到充分应用。这里介绍并行性衡量指标,可以衡量最优性能的网格和模块大小设置。一. CUDA C并行性衡量指标介绍占用率(nvprof 中的achieved occupanc
2022-02-17 01:34:45
1954
原创 CUDA C编程1 - 入门介绍
系列文章目录文章目录系列文章目录前言1. CUDA C程序组成2. CUDA C编程范式总结参考资料前言今天开始又一次开始学习CUDA C编程,今后也会陆续更新学习笔记以及代码,希望加深记忆的同时,能够跟大家分享学习所得。1. CUDA C程序组成CUDA C程序主要包括两部分:(1)主机代码(2)设备代码CUDA程序保存为.cu文件,CUDA平台使用编译器nvcc编译器来编译设备代码,运行在GPU上;使用C语言编译器来编译主机代码,运行在CPU上。2. CUDA C编程范式
2022-01-13 00:17:45
1230
原创 图像处理:摩尔纹
文章目录1. 什么是摩尔纹?2. 怎样消除摩尔纹?总结1. 什么是摩尔纹?什么是摩尔纹?当我们对着电脑屏幕拍照时,会发现规则的彩色条纹,那就是我们常说的摩尔纹,它是由于采样不足,离散图像数据混淆产生的。刚才说的在空域上的混淆产生的摩尔纹;时域上也会混淆产生摩尔纹,比如拍照时快门速度不够【车轮效应】2. 怎样消除摩尔纹?空域上的摩尔纹可以通过如下两种方法来消除:(1)增加采样频率;(2)平滑滤波详细说明请参考【Link】总结本人之前有用手机拍摄电脑上的发票,发现拍摄出现的图像有彩色条纹
2021-12-09 00:45:57
6393
原创 Linux编程知识点2:进程
文章目录前言1. 进程控制块2. 三个特殊的进程3. 进程的状态总结参考文献前言今天跟大家分享Linux中进程的相关知识。1. 进程控制块进程控制块(Process Control Block, PCB)是对并发进程进行控制和管理的数据结构,在Linux内核中由task_struct结构体定义的。PCB中存放了描述进程和控制进程运行的所有信息,部分信息如下:(1)进程标识符(2)进程当前状态(3)进程的程序和数据地址(4)进程资源清单(5)进程优先级(6)CPU现场保护区(7)用于
2021-11-30 23:55:08
1418
原创 Linux编程知识点1:静态库与动态库
文章目录前言1. 静态库与动态库2. Linux下动态库和静态库存储总结参考文献前言因为项目需要,最近在学习Linux的相关知识,这里总结一个比较重要的知识点:静态库与动态库。1. 静态库与动态库Linux支持两种类型的库,即静态库与动态库。这两个库的主要区别在于库中代码被载入的时刻不同:(1)静态库:在编译链接过程就载入静态库的代码并将代码直接放置到可执行程序中;(2)动态库:在编译链接过程仅仅引用动态库(个人理解,就是记录动态库的地址),在程序运行时将动态库代码加载到内存中。动态库的优
2021-11-29 22:08:46
497
原创 OpenCV CUDA编程Issue: GpuMat::upload()第一次调用速度很慢问题
文章目录Issue描述Issue分析实验结果总结Issue描述之前一直在学习OpenCV CUDA编程,遇到一问题:第一次调用GpuMat::upload()函数时,速度出奇的慢,大约要2-4分钟才能继续运行,后面调用GpuMat::upload()函数则没有这个问题。Issue分析在网上查找原因,说的最多的就是第一次调用upload()函数需要初始化CUDA,所以第一次花费比较长时间也是合理的。还有另外的说法,即CMake Opencv CUDA库时,没有配置正确GPU设备的计算能力值,即配置
2021-11-16 13:55:55
4245
原创 VS2017 OpenCV CUDA库学习1:图像加法操作
文章目录前言1. OpenCV CUDA库使用框架2. C++ 调用OpenCV CUDA库实现图像加法操作3. 执行结果总结学习资料VS2017 CUDA编程学习1:CUDA编程两变量加法运算VS2017 CUDA编程学习2:在GPU上执行线程VS2017 CUDA编程学习3:CUDA获取设备上属性信息VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现VS2017 CUDA编程学习5:CUDA并行执行-线程VS2017 CUDA编程学习6: GPU存储器架构VS2017
2021-11-15 22:19:21
3044
原创 Linux编程:Shell编程基础知识
文章目录前言1. 编写第一个Shell程序2. 如何运行Shell程序3. Shell命令的退出状态4. 复合命令总结前言这里记录Shell编程的学习笔记,为巩固基础并分享给大家。1. 编写第一个Shell程序编写first.sh程序文件:第一行指定了Shell解释器类型,"#!"后面紧跟的字符串为解释器路径,在执行时首先启动解释器程序,然后运行后面的Shell命令,这里以及后面都是用bash解释器。2. 如何运行Shell程序运行Shell程序的方法有3种:(1)赋予程序文件可执行权
2021-11-14 23:12:54
1767
2
原创 VS2017 CUDA编程学习实例3:CUDA实现直方图统计
文章目录前言1. C++ CUDA实现直方图统计3. 执行结果总结学习资料VS2017 CUDA编程学习1:CUDA编程两变量加法运算VS2017 CUDA编程学习2:在GPU上执行线程VS2017 CUDA编程学习3:CUDA获取设备上属性信息VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现VS2017 CUDA编程学习5:CUDA并行执行-线程VS2017 CUDA编程学习6: GPU存储器架构VS2017 CUDA编程学习7:线程同步-共享内存VS2017 CU
2021-11-14 16:14:05
2589
3
原创 VS2017 CUDA编程学习实例2:CUDA实现秩排序
文章目录前言1. C++ CUDA实现秩排序3. 执行结果总结学习资料VS2017 CUDA编程学习1:CUDA编程两变量加法运算VS2017 CUDA编程学习2:在GPU上执行线程VS2017 CUDA编程学习3:CUDA获取设备上属性信息VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现VS2017 CUDA编程学习5:CUDA并行执行-线程VS2017 CUDA编程学习6: GPU存储器架构VS2017 CUDA编程学习7:线程同步-共享内存VS2017 CUDA
2021-11-14 15:04:16
3016
原创 VS2017 CUDA编程学习12:CUDA流
文章目录前言1. CUDA流的理解2. C++ 实现CUDA流3. 执行结果总结学习资料VS2017 CUDA编程学习1:CUDA编程两变量加法运算VS2017 CUDA编程学习2:在GPU上执行线程VS2017 CUDA编程学习3:CUDA获取设备上属性信息VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现VS2017 CUDA编程学习5:CUDA并行执行-线程VS2017 CUDA编程学习6: GPU存储器架构VS2017 CUDA编程学习7:线程同步-共享内存VS
2021-11-12 21:49:56
3451
原创 VS2017 CUDA编程学习11:CUDA性能测量
文章目录前言1. CUDA事件API2. C++ 实现CUDA事件例子3. CUDA事件例子的执行结果4. NVIDIA Visual Profiler工具总结学习资料VS2017 CUDA编程学习1:CUDA编程两变量加法运算VS2017 CUDA编程学习2:在GPU上执行线程VS2017 CUDA编程学习3:CUDA获取设备上属性信息VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现VS2017 CUDA编程学习5:CUDA并行执行-线程VS2017 CUDA编程学习6
2021-11-11 20:18:57
1840
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅