- 博客(473)
- 收藏
- 关注
原创 【无标题】IOMMU功能测试软件设计及实现 (二)
PCIe ATS架构及工作原理 (一)IOMMU工作原理,架构以及驱动软件实现 (一)本文提供一个完整的IOMMU功能测试软件设计及其代码实现示例。这是一个实际可编译运行的框架,包含内核模块和用户空间工具。这个完整的测试框架可以全面验证IOMMU的功能、性能、安全性和稳定性。每个测试都有明确的目的、方法和验证标准,可以适应不同硬件平台和测试需求完整IOMMU测试软件实现一、项目总览测试目标A. 基础功能测试完整测试目录请关注微信公众号:tech-holicB. 安全与隔离测。
2026-01-07 18:06:29
880
原创 UC Write会排空前面WC MOVNT Buffer?相应验证代码实现
一、结论与分析简短回答:在x86架构中,UC write不会自动排空前面的WC MOVNT buffer,必须使用SFENCE或MFENCE指令。内存类型行为· WC (Write-Combining): 弱内存排序,写操作可以合并、延迟、重排· UC (Uncached): 强内存排序,写操作按程序顺序执行· MOVNT (Non-Temporal Store): 使用WC内存语义的特殊指令关键规则UC write不会自动刷新WC buffer需要显式内存屏障来确保顺序。
2026-01-02 14:48:05
861
原创 内存控制器(memory controller)架构及其工作原理
总而言之,内存控制器是一个复杂的协调器,它弥合了 CPU 对数据的无尽需求与 DRAM 复杂且受物理规律支配的行为之间的鸿沟,将简单的读/写命令转化为高度优化的电信号交响乐,使您的系统能以最高效率运行。地址解码器将物理地址转换为 (通道) -> (DIMM) -> (Rank) -> (Bank) -> (Row) -> (Column)。· 兼容性: 它确保 CPU 能与行业标准的 JEDEC 内存协同工作,并能执行内存训练(在启动时校准时序)以确保稳定性,尤其是对于超频(XMP/EXPO)内存。
2025-12-14 13:08:49
862
原创 Linux 内核中常见地址的设计原理及其API使用
在Linux内核中,地址类型和它们的正确使用是理解内核内存管理的关键。· 定义:通过vmalloc()或ioremap()创建的地址,不一定有连续的物理映射。· 定义:内核直接映射区域的地址(通常是3GB/4GB分割中的1GB内核空间)· 定义:CPU总线上的实际内存地址,对应RAM芯片上的物理位置。
2025-12-13 10:27:12
555
原创 PCIe Direct Memory Access (DMA) - 软硬件工作原理完全手册
请关注公众号获取完整系统资料*********************请关注微信公众号:颇锐克科技共享*********************DMA 允许 PCIe 设备直接与系统内存之间传输数据,而无需 CPU 持续参与,从而显著提升性能。DMA_BIDIRECTIONAL | DMA 前刷新 & DMA 后失效。· Peer-to-Peer DMA:设备到设备的直接传输。
2025-12-11 10:56:22
694
原创 Linux kernel中断系统架构及应用
驱动开发者需要理解“上半部紧急处理,下半部实际工作”的哲学,根据需求选择合适的下半部机制(对于简单任务,Tasklet;对于复杂或可能阻塞的任务,工作队列或线程化中断),并严格遵守中断上下文的编程约束,才能编写出高效、稳定的设备驱动程序。CPU会暂停当前执行的任务,转去执行一个预先定义好的函数(中断处理程序),处理完毕后再恢复原任务。中断系统一个非常核心的Linux内核主题,本文将梳理内核中断系统的架构,并阐述驱动软件如何应用这一机制。· 中层: 提供统一的中断描述和管理框架,处理流控、亲和性。
2025-12-09 18:13:05
691
原创 AMDGPU backend架构及ISA指令使用
GPU CDNA硬件架构:本文将详细解释 AMD GPU ISA 如何映射到物理硬件,并展示指令是如何执行的。计算单元 (CU) 层次结构执行模型:波前 (Wavefront)· 波前大小: 32 或 64 个线程(RDNA为32/64,GCN为64)· SIMD宽度: 32个ALU通道· 调度粒度: 每个周期调度1个波前到SIMD单元寄存器映射assembly。
2025-12-09 18:00:24
685
原创 PCIe信号链路架构及其Linux kernel系统软件完全开发指南
一、PICe总线系统架构总线矩阵架构详解A. CPU ↔ 内存通路· 路径: CPU核心 → L3缓存 → 集成内存控制器(IMC) → 内存控制器 → DRAM· 特点: 这是系统最高带宽的路径,通常通过多通道DDR接口B. PCIe设备 ↔ 内存通路 (DMA/数据传输)data path:EP → PCIe Switch → RC内部交换矩阵 → IMC → 内存控制器 → DRAM· DMA写操作: EP DMA引擎生成Memory Write TLP,数据直接写入系统内存。
2025-12-06 16:53:48
688
原创 基于PCIe doorbell同步的系统软件实现
PCIe Doorbell工作原理参见:一、基于Doorbell同步机的软件设计流程图核心逻辑说明用户态-内核态交互:通过设备节点和 IOCTL 命令实现跨态通信,触发 DOORBELL 并查询结果。中断同步链路:从寄存器写入→硬件中断触发→CPU 中断分发→内核中断处理→用户态唤醒,形成完整同步闭环。并发安全:内核态通过自旋锁保护临界区,避免多线程/进程访问冲突。二、PCIe DOORBELL 同步实现代码(Linux 内核态)
2025-11-30 17:22:39
1017
原创 AMDGPU MI300架构及各子系统工作原理 (一)
3-2 性能优化方法 优化手段围绕硬件特性适配、软件工具调优和模型架构适配展开,具体如下: 1. 硬件分区与资源本地化:借助MI300支持的计算和内存分区模式优化,比如启用NPS 4模式可本地化内存访问,能让流基准测试的带宽提升5%-10%;其能就近响应XCD的高频数据请求,减少对HBM3的直接访问,在降低功耗的同时,进一步提升数据读取效率,适配AI训练中高频重复的数据调用场景。请关注微信公众号:颇锐克科技共享*********************一、MI300架构图。
2025-11-27 14:29:13
550
原创 训练出Gemini3 的TPUv5e能够取代GPGPU?
TPU难以全面取代GPGPU,而OpenAI并非转向GPGPU,反而已开始租用谷歌TPU,呈现算力多元化布局的态势,具体分析如下: 1. TPU难以取代GPGPU,二者将长期共存- TPU的局限性明显:它的生态根基远不如GPGPU,英伟达CUDA开发者社区规模是谷歌TPU生态的4倍,众多专业算法库、调试工具都围绕GPGPU优化,且TPU仅能通过谷歌云获取,绑定其云服务,多云部署时数据迁移成本高。请关注微信公众号:颇锐克科技共享*********************
2025-11-26 18:02:40
499
原创 DRM Syncobj 工作原理及使用代码实现
struct drm_syncobj_wait wait_args = { .num_fences = 1, .flags = 0, // 0 表示等待所有满足,DRM_SYNCOBJ_WAIT_ANY 表示任意一个 .timeout_ns = 0, // 无限等待(可设为 5e9 表示 5 秒超时) .handles = handles, .seqs = seqs, .result = result };
2025-11-25 18:08:37
467
原创 Linux DRM图形子系统同步机制之dma_resv
当多个进程(或事务)需要同时锁定一组缓冲区,但请求锁的顺序可能形成循环等待时(例如进程A锁了缓冲区1想锁缓冲区2,进程B锁了缓冲区2想锁缓冲区1), ww_mutex 会根据事务的“年龄”(启动顺序)决定回滚(wound)较年轻的事务,让其释放已获得的锁,从而打破死锁局面,让较年长的事务先完成。在获取锁的过程中如果发生冲突,会根据事务的先后顺序(年龄)来解决:较年轻的事务(后发起者)会回退(释放已获得的锁)并等待,让较年长的事务(先发起者)先完成,从而避免死锁。// 共享(读)操作的围栏列表。
2025-11-24 19:12:10
721
原创 如何基于ROCm本地部署开源模型Gemma3
from transformers import AutoTokenizer, AutoModelForCausalLMtokenizer = AutoTokenizer.from_pretrained(“google/gemma-3-4b”)model = AutoModelForCausalLM.from_pretrained(“google/gemma-3-4b”, device_map=“auto”)# 测试推理inputs = tokenizer(“Hello, Gemma 3!
2025-11-24 09:05:57
854
原创 数据中心GPU之间交互工作原理
核心结论数据中心 GPU 交互本质是 “高速互联 + 统一调度 + 数据共享”,通过硬件链路搭建通信通道,结合软件协议与调度框架,实现多 GPU 协同完成大规模计算任务。2. 软件协议与框架(逻辑支撑)底层通信协议:基于 GPU 厂商接口(如 NVIDIA CUDA、AMD HIP)实现基础通信,通过 CUDA-aware MPI(消息传递接口)、NCCL(NVIDIA 集体通信库)等标准化协议,支持多 GPU 数据交换与集体通信(如广播、归约操作)。
2025-11-23 22:47:11
285
原创 如何将CUDA软件移植到ROCm
ROCm(Radeon Open Compute)是 AMD 开源的 GPU 计算平台,与 CUDA 兼容性极高,移植核心是替换 CUDA 专属 API 为 ROCm 等价接口(多数可直接替换头文件/宏定义),无需大幅改写业务逻辑。头文件替换: cuda.h / cuda_runtime.h → hip/hip_runtime.h (HIP 是 ROCm 核心接口,语法与 CUDA 几乎一致);二、完整移植案例(CUDA 向量加法 → ROCm)一、核心移植逻辑(CUDA → ROCm)
2025-11-23 16:40:58
395
原创 显示系统HWUI与SurfaceFlinger 交互机理以及关键代码分析
}} (3)提交软件绘制结果 cpp // Surface.cpp:软件绘制后的 Buffer 提交status_t Surface::unlockAndPostSoftwareBuffer(SkBitmap* bitmap) { // 1. 将 Skia 绘制后的像素数据拷贝到 Surface 的 Buffer memcpy(mCurrentBuffer->bits(), bitmap->getPixels(), bitmap->computeByteSize());
2025-11-22 21:23:37
610
原创 HBM与DDR存储系统的设计差异及市场初探
高带宽存储器(HBM)是一项为突破“内存墙”瓶颈而生的革命性存储技术,多应用在数据密度型计算,如AI、高性能计算和高端显卡,而DDR应用在通用计算中的主存和程序及数据存储。因此,先进的HBM控制器会集成温度传感器,并支持动态热管理。物理层设计需应对如此多信号同步切换带来的巨大同步开关噪声(SSN),这要求精密的电源完整性和信号完整性设计,例如采用密集的去耦电容和严格的阻抗控制布线。总而言之,无论是HBM还是DDR,其市场和价格都牢牢掌握在少数几家巨头手中,并由迅猛的AI需求与受限的产能之间的博弈所驱动。
2025-11-22 16:29:50
554
原创 Gemini3 训练数据中心(data center)系统
更多AI,GPU,Linux,Android,芯片行业技术分享请关注公众号:颇锐克科技共享。更多AI,GPU,Linux,Android,芯片行业技术分享请关注公众号:颇锐克科技共享。二、所需计算资源优化。
2025-11-22 06:58:23
460
原创 基于pytorch 自建AI大模型
一、千万参数大模型核心源码(PyTorch实现) 基于Transformer解码器架构,实现1200万参数大模型(可通过调整维度/层数扩展至千万级),支持文本自回归生成,代码精简且易理解: python。
2025-11-21 22:49:33
903
原创 基于AI和GPU渲染管线的研究
从设计理念看,传统渲染管线基于物理真实性和数学精确性,通过模拟真实世界的光学原理来生成图像,每个渲染阶段都有明确的物理意义,如光线的反射、折射、散射等。DLSS光线重建AI模型是图形领域首个实时Transformers模型,与之前的CNN架构相比,其参数数量增加了数倍,计算性能提升了4倍,能够更合理地平衡整个画面和多个帧中各像素的相对重要程度,生成的图像具有更强的稳定性、更少的伪影、更丰富的运动细节和平滑的边缘。输出合并阶段是渲染管线的最后一步,负责将像素着色器生成的像素数据与渲染目标的内容进行合并。
2025-11-21 20:58:36
1041
原创 2025新增两院院士: 芯片与人工智能方向入选学术及科研支撑材料
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2025-11-21 20:25:51
384
转载 linux Devfreq framwork
drivers/devfreq/devfreq.c devfreq_list devfreq_list_lock find_device_devfreq() - find devfreq struct using device pointer. devfreq_get_freq_level() - Lookup freq_table for the frequency. struct devfre...
2018-03-18 15:54:46
1637
1
转载 reserved-memory 与memreserve的区别
http://blog.csdn.net/kickxxx/article/details/54631535Devicetree 提供了两种方式预留内存: reserved-memory和memreservememreserve示例[cpp] view plain copy print?/memreserve/ 0x40000000 0x01000000 /memreserve/ 0x4000...
2018-03-12 10:56:31
5268
原创 无线组网的方式
参考手册:http://www.usr.cn/Down/Instructions/USR-WIFI232-digonghaoV3.0.pdf
2018-03-03 11:19:39
1221
原创 WIFI 转串口相关开发指南
1)转接板可以使用有人物联网公司的产品:http://www.usr.cn/Download/114.html2)参考http://www.cnblogs.com/lifan3a/articles/7070027.htmlWiFi模块AT指令使用方法AT指令详见说明书:WiFi232-T-S-G2模块。 WiFi-A-B-C-D2模块1:使用AT指令软件 "USR-WIFI232-Setup"工具...
2018-03-03 11:14:55
1253
转载 Modem
问题描述: Modem已经注册成功了,但是android系统显示仍然是无网状态。背景知识: Android为了屏蔽各Modem厂商之间的差异,并未直接使用AT指令,而是定义了通用接口——RIL命令来控制Modem(当然,RIL命令与AT指令之间存在某种不固定的映射关系,因厂商而异)。各Modem厂商则负责提供对应于RIL命令的Vender RIL。RIL是Modem的HAL(硬件抽象)...
2018-03-03 11:04:16
4644
转载 AT指令概论
1.2 AT的优点。 命令简单易懂,并且采用标准串口来收发AT命令,这样对设备控制大大简化了,转换成简单串口编程了。AT命令提供了一组标准的硬件接口--串口。这个简化的硬件设计.较新的电信网络模块,几乎都采用串口硬件接口。AT命令功能较全,可以通过一组命令完成设备的控制,完成呼叫、短信、电话本、数据业务、传真. 1.3 AT命令与ppp协议的关系 在数据通讯的应用中,比如说无线拨号上网。除了...
2018-03-03 09:56:36
945
转载 TCP/UDP 与wifi模块通信项目整理
最近一个月做了一个有关PM2.5室内空气净化的一个项目,控制器采用的是STM32,其中一部分就是实现PC-----控制器------风机之前的通信,采用的技术是WIFI技术,核心部分就是UDP之间的通信。下面总结一下。。。机制:PC采用UDP广播模式,即控制器需要提供一个指定的端口,比如10100,PC通过配置对端IP 255.255.255.255 PORT 10100即可向对端(控制器)发送指...
2018-03-03 08:09:06
4331
转载 基于Socket的UDP和TCP编程介绍
http://blog.chinaunix.net/uid-11848011-id-96439.html一、概述TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。UDP:用户数据报协议。UDP是一...
2018-03-02 11:22:56
790
转载 TCP-IP 协议
在阅读“TCP-IP协议详解”系列文章之前,建议阅读以下两篇文章,以便对互联网协议有个快速的全局了解和把握!互联网协议入门(一)互联网协议入门(二)“小喇叭开始广播啦”,如果你知道这个,你一定是老一辈的人。“小喇叭”是五十年代到八十年代的儿童广播节目。在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始广播了!” 听到这里,收音机前的小朋友就兴奋起来,准备好听节目了:这一期的内容是以太网(Et...
2018-03-02 11:17:34
316
转载 深入理解并发/并行,阻塞/非阻塞,同步/异步
https://www.jianshu.com/p/2116fff869b61. 阻塞,非阻塞首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图:进程状态一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。各个状态的转换条件如上图,其中有个阻塞状态,就是说当线程中调用某个函数,需要IO请求,或者暂时得不到竞争资源的,操作系统会把该线程阻塞起来,避免浪费CPU资源,等到得到了资源,...
2018-02-24 11:08:23
506
转载 uboot 启动流程
前言2017.01 UBoot包含两个阶段的启动,一个是SPL启动,一个是正常的启动我们称为第二阶段Uboot。当然,我们也可以选择使用SPL和不使用。在编译的过程中,是先编译第二阶段Uboot,然后在编译SPL的。这两个阶段的编译时分离的。拥有不同的配置,所以许多地方的宏是和SPL的不一样。而且链接的文件也不一致。所以接下来,我们也会分为两个部分进行分析。12345SPL启动在AM437...
2018-02-23 17:46:14
885
转载 list_head 整理
1、 list_head之前(链表归整)1.1、 单向链表原型:[objc] view plain copystruct simplex { Int value; <span style="white-space:pre"> </span>struct simplex *next; }; 结构图如下所示特点是单向只能从前往后查找,橙色线代表单向循环链...
2018-02-23 17:43:50
694
转载 list_for_each_entry
参考:http://blog.sina.com.cn/s/blog_5e99b41e0100rxgf.htmlhttp://hi.baidu.com/shiftedmind/blog/item/1a7c8381e6a67fa56d8119da.html 在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下: ...
2018-02-23 17:27:53
795
转载 uboot 启动流程
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,同时,此时的uboot.bin也没有结合我们的开发板进行配置,还无法使用。而要进行这样的个性化配置,前提条件就是对uboot开机流程和编译系统有所了解,本文主要讨论前者。在三星的SoC中, 启动流程可以分为三个阶段BL0, BL1, BL2...
2018-02-23 14:41:56
1005
转载 buildroot 构建指南
Buildroot官方全英文使用手册的链接是https://buildroot.org/downloads/manual/manual.html,需要知道每一个细节的朋友,可以仔细查阅,这篇文章只是我自己从中提炼出来的一下快速上手的技巧。如何在现有项目加入自己的APPBuildroot从零开始构建的过程还是很复杂的,以后的文章会一步步介绍。我们先来看看如何在现有项目中加入一个自己的应用的构建方法,...
2018-02-23 12:52:06
2578
转载 linux list_head 理解
在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究一下C语言的面向对象机制)。下面就是kernel中的list_head结构定义:struct list...
2018-02-23 11:24:07
13698
2
转载 Linux系统的守护进程(Daemon Process)
这篇文章介绍守护进程的概念, 结构, 编写守护进程以及报告进程错误状况. 1. 概念:守护进程又称为精灵进程(daemon), 是生存时间比较长的一种进程. 它们常常在系统自举时启动, 仅在系统关闭时才终止. 因为它们没有控制终端, 所以说它们是在后台运行的. 先来介绍一些Linux系统常见的守护进程:init: 它的pid为1, 是系统守护进程, 负责启动系统服务, 这些服务通常自己也拥有守护进...
2018-02-23 09:48:48
1329
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅