- 博客(219)
- 收藏
- 关注
转载 内存狂飙:ROS 2中间件中的偷天陷阱
出现异常情况时,通过 top / htop 持续观察 ROS2 进程的内存变化,可以确认一个事实:内存占用并非偶尔跳变,而是以近乎线性的方式稳步上升,且与具体业务行为并不相关:即便换成最简单的 ROS2 官方 ros2 topic list 程序,也没有摆脱 GB 级别内存增长这一现象。,而不是业务代码或上层调度。结合前面的现象与调用路径,对“长度为什么会读错”这一问题现象,最合理的解释是:通信双方对内部消息的布局/长度存在不一致,导致接收端按错误的规则拆包,从而把错误位置的字节当成长度字段。
2026-01-14 22:26:52
49
原创 中断和邮箱:RK3568异构通信实践
而IPIC则是更加高级的完全可编程中断控制器,所谓的完全可编程,实际上指的就是寄存器提供的可配置属性,INTMUX的寄存器没有提供多少可以配置的属性,但是IPIC就提供了非常丰富的可配置属性(详见8.4章中的MCU寄存器描述信息)。RK3568的M核默认是使用AHB总线访问内存的,但是这并不代表M核不能使用AXI总线,在TRM手册中,我们可以看到,MCU是否通过AXI总线访问内存是可以动态配置的,只不过这个配置默认是不会启用的。最大的好处就是通信效率高,且速度快,缺点则是可以传输的数据较小。
2026-01-13 22:46:04
428
原创 <span class=“js_title_inner“>中断和邮箱:RK3568异构通信实践</span>
而IPIC则是更加高级的完全可编程中断控制器,所谓的完全可编程,实际上指的就是寄存器提供的可配置属性,INTMUX的寄存器没有提供多少可以配置的属性,但是IPIC就提供了非常丰富的可配置属性(详见8.4章中的MCU寄存器描述信息)。RK3568的M核默认是使用AHB总线访问内存的,但是这并不代表M核不能使用AXI总线,在TRM手册中,我们可以看到,MCU是否通过AXI总线访问内存是可以动态配置的,只不过这个配置默认是不会启用的。最大的好处就是通信效率高,且速度快,缺点则是可以传输的数据较小。
2026-01-13 22:46:04
808
原创 Linux任务调度探秘(续):截止时间调度器(DL)
• 在 task_tick_dl 中调用:task_tick_dl 是调度器的周期性回调,由内核时钟中断定期触发,因此 update_curr_dl 会按固定时间粒度(通常为 tick 或高精度定时器)更新 runtime 消耗,实现基于时钟周期的精确计费。例如,在大小核架构中,大核和小核即使执行相同的时间,实际完成的工作量也不同。• 通过更新当前任务函数(update_curr_dl)与时钟滴答函数(task_tick_dl),剖析运行时间(runtime)的计费机制、周期重置逻辑以及限流的实现原理。
2026-01-07 22:29:51
1022
原创 <span class=“js_title_inner“>Linux任务调度探秘(续):截止时间调度器(DL)</span>
• 在 task_tick_dl 中调用:task_tick_dl 是调度器的周期性回调,由内核时钟中断定期触发,因此 update_curr_dl 会按固定时间粒度(通常为 tick 或高精度定时器)更新 runtime 消耗,实现基于时钟周期的精确计费。例如,在大小核架构中,大核和小核即使执行相同的时间,实际完成的工作量也不同。• 通过更新当前任务函数(update_curr_dl)与时钟滴答函数(task_tick_dl),剖析运行时间(runtime)的计费机制、周期重置逻辑以及限流的实现原理。
2026-01-07 22:29:51
327
原创 <span class=“js_title_inner“>Linux任务调度探秘(续):截止时间调度器(DL)</span>
那么选中的任务在执行过程中,其runtime是如何更新的?• 在 task_tick_dl 中调用:task_tick_dl 是调度器的周期性回调,由内核时钟中断定期触发,因此 update_curr_dl 会按固定时间粒度(通常为 tick 或高精度定时器)更新 runtime 消耗,实现基于时钟周期的精确计费。• 在出队操作中调用:当任务被切换或主动让出 CPU 时(如在 dequeue_task_dl 路径中),也会调用 update_curr_dl,以确保最后一次执行片段的时间被准确计入预算。
2026-01-07 22:29:51
614
原创 新年致格友: 从格物致知到以物为师
以我的亲身经历来说,大学里学的X86+DOS,加一点Windows,工作多年做的也主要是X86,创业这几年,做的很多产品都是ARM + Linux。要探究ARM的A系统,那么有GDK8,有幽兰,要探究RISC-V和AMP,那么有GDK5。正立的用于指导学习,也是AI训练的方法,也就是要从“物”和实例下手,从看得见摸得到的实物开始学习,这样不空洞,不乏味,具体而生动。格物者,格,尽也,须是穷尽事物之理。那么格致学都学哪些内容的,包含今天的物理和化学是比较确定的,其实还不止于此,再看一张图吧。
2026-01-02 13:00:14
1190
原创 RK3568 RISC-V核UART5输入功能排查纪实
整个过程证明了在异构多核平台上进行驱动调试时,对特定核心(如RISC-V)基础BSP代码(尤其是中断、异常等底层机制)进行验证的必要性,以及当高级抽象机制失效时,逐层深入分析直至硬件操作层面的调试方法的价值。问题始于RK3568 RISC-V MCU核上的RT-Thread系统,把UART5用作RT-Thread的串口终端时,UART5串口呈现“单向通讯”状态:发送(TX)功能正常,但接收(RX)功能完全失效。:RT-Thread串口框架内部对中断信号量的依赖,在中断失效时意外阻塞了轮询路径。
2025-12-29 13:31:15
1015
原创 <span class=“js_title_inner“>RK3568 RISC-V核UART5输入功能排查纪实</span>
整个过程证明了在异构多核平台上进行驱动调试时,对特定核心(如RISC-V)基础BSP代码(尤其是中断、异常等底层机制)进行验证的必要性,以及当高级抽象机制失效时,逐层深入分析直至硬件操作层面的调试方法的价值。问题始于RK3568 RISC-V MCU核上的RT-Thread系统,把UART5用作RT-Thread的串口终端时,UART5串口呈现“单向通讯”状态:发送(TX)功能正常,但接收(RX)功能完全失效。:RT-Thread串口框架内部对中断信号量的依赖,在中断失效时意外阻塞了轮询路径。
2025-12-29 13:31:15
710
原创 <span class=“js_title_inner“>RK3568 RISC-V核UART5输入功能排查纪实</span>
整个过程证明了在异构多核平台上进行驱动调试时,对特定核心(如RISC-V)基础BSP代码(尤其是中断、异常等底层机制)进行验证的必要性,以及当高级抽象机制失效时,逐层深入分析直至硬件操作层面的调试方法的价值。问题始于RK3568 RISC-V MCU核上的RT-Thread系统,把UART5用作RT-Thread的串口终端时,UART5串口呈现“单向通讯”状态:发送(TX)功能正常,但接收(RX)功能完全失效。:RT-Thread串口框架内部对中断信号量的依赖,在中断失效时意外阻塞了轮询路径。
2025-12-29 13:31:15
682
原创 Linux任务调度探秘(下):实时调度(RT)
• 若属于不同调度类,则比较调度类的优先级层级:当被唤醒任务的调度类优先级高于当前任务(例如rt>cfs),则调用 resched_curr() 设置 TIF_NEED_RESCHED 标志,表明当前任务应被重新调度,以便高优先级任务及时获得CPU。现在我们知道:调度的基本单元是 sched_rt_entity,调度的场所是 rt_rq,而调度的方法由 rt_sched_class提供。在介绍调度实体 sched_rt_entity 时,其结构中包含一个指向所属实时运行队列的 rt_rq 字段。
2025-12-28 09:52:29
449
原创 引脚复用之困:当UART5在RK3568上患上“选择性耳聋”
在开发板的世界里,引脚(Pin)堪称最抢手的“剑门蜀道”。GDK5开发板的精妙之处在于,它让强大的ARM Cortex-A核运行Linux,同时让旁边高效的RISC-V MCU核运行RT-Thread实时操作系统,二者组成一个AMP(非对称多处理)异构系统,堪称学习嵌入式高级架构的理想实验场。在GDK5的AMP架构中,A核(Linux)和RISC-V核(RT-Thread)是共享部分底层硬件资源的,A核对引脚的重新配置,直接影响了RISC-V核的UART5控制器接收数据的能力。:这是“功能组”的定义。
2025-12-26 14:30:08
868
原创 <span class=“js_title_inner“>引脚复用之困:当UART5在RK3568上患上“选择性耳聋”</span>
在开发板的世界里,引脚(Pin)堪称最抢手的“剑门蜀道”。GDK5开发板的精妙之处在于,它让强大的ARM Cortex-A核运行Linux,同时让旁边高效的RISC-V MCU核运行RT-Thread实时操作系统,二者组成一个AMP(非对称多处理)异构系统,堪称学习嵌入式高级架构的理想实验场。在GDK5的AMP架构中,A核(Linux)和RISC-V核(RT-Thread)是共享部分底层硬件资源的,A核对引脚的重新配置,直接影响了RISC-V核的UART5控制器接收数据的能力。:这是“功能组”的定义。
2025-12-26 14:30:08
985
原创 《格友》十年:人生最贵有恒
就像买书,买时兴致很高,但读书很慢,把买来的书读完不容易。Bjarne先生出生于1950年,1979年29岁时,开始设计和研发一门新的语言,1983年定名为C++,1985年发布第一个版本。今年也刚好是《格友》公众号10年,10年时间,《格友》坚持自己的特色,认真撰写每一篇文章.......读书、工作、结婚生子,世界这么大,要四处走走,太多的事要做了。于是,开头的命题就变成了,我们能否坚持把一件事做好,做得有头有尾,不要虎头蛇尾。第一眼看到这个印章,它就打动了我的心,我将它拍下来,送给了我的小女儿。
2025-12-25 21:52:32
106
原创 Linux 任务调度探秘(中):完全公平调度器(CFS)
现在我们可以大致理解为何需要“调度实体”这一结构:任务(task_struct)和任务组(task_group)是两种不同的数据结构,为了在调度过程中实现统一处理,内核将它们共有的调度相关信息封装起来,抽象出一个通用的结构——即“调度实体”。简单说:CFS调度总是选择 vruntime 最小的任务来运行——也就是红黑树中最左侧的节点,但也会结合调度器的提示(如 next、last、skip 等),在不破坏公平性的前提下,适当优化响应性和调度效率。中间的孩子“装备简陋”,nice值低,她跑得比较慢。
2025-12-23 22:05:23
741
转载 定位和求解Debian 13 下 PipeWire 无声问题
然而,由于ARM 生态中的声卡驱动(ASoC)与 PC 架构(HDA Intel)存在巨大差异,使用ARM硬件的用户常遇到“无声”问题。典型的症状是系统可以识别到底层 ALSA 设备,但 PipeWire 无法将其抽象为可用的“接插器”(Sink),导致桌面音量图标失效,无法播放声音。但 RK3588 的声卡驱动暴露的控制项(Controls)往往不标准,导致 ACP 无法构建出立体声(Stereo)或 5.1 声道配置,最终放弃接管该设备。模式,从而绕过复杂的场景检测,直接驱动 PCM 硬件。
2025-12-19 21:13:51
134
原创 Linux 任务调度探秘(上):调度框架与优先级仲裁
因此,我们改为直接遍历各调度类的子队列(如 cfs_rq、rt_rq、dl_rq),避免全量扫描任务链表。简单解释一下这个过程:先把当前任务用prev存起来,然后调用pick_next_task()来选出下一个任务,最后在context_switch()执行上下文切换的时候,会修改curr,指向选出的下一个任务。调度类中 pick_next_task()用于选择下一个任务,那么遍历调度类的顺序则决定了优先级,顺序在前的调度类,它的pick_next_task()会被优先调用,优先级就更高。
2025-12-03 22:35:12
893
原创 李逵遇李鬼:实战图形驱动混搭导致的系统黑屏
(版本单向满足,比如引用方需要符号版本,但定义方不需要,或者引用方不需要版本,但定义方提供的符号版本也在要求的范围内),但如果符号版本完全无法匹配,那么就不会设置备用符号,直接返回空指针。所以,要是符号正确,那么符号的哈希一定能匹配上掩码,但有没有可能错误的哈希也匹配上呢,也是可能的,不过在哈希的加持下概率是很小的,但是无法匹配上的哈希,那就一定错误的。当定义方的符号版本是弱符号时,这个符号会被留下来,如果后面没有匹配到强符号时才会时候,如果定义方的符号就是强符号,那么这个符号会立即返回使用。
2025-11-28 22:40:03
668
原创 谁说空指针不能访问的?
在C语言这种手动管理内存的程序语言中,一般会按照默认的规则将空指针视为不可访问。去查找VMA,如果VMA可用,那么就按照指定地址分配,这个时候内核会直接返回指定的地址,但如果通过指定的地址申请内存失败,那么这个内核会按照默认的逻辑自顶向下的查找可用内存区域,此时就不会根据指定地址进行分配了,而且在自顶向下查找的过程中,内核会通过。内存分配涉及到物理内存这种宝贵的物理资源,这种敏感的资源一般都是由内核管理的,进程想要访问内存,需要先通过系统调用向内核提出申请,应用程序是无法访问未经内核同意的内存区域的。
2025-11-16 23:05:04
595
原创 LINUX内核驱动的一处神来之笔
而Windows驱动则不然,它会遍历所有表项,如果发现表项中描述的端口号超过了端口数,那么就报告枚举失败,罢工而退。USB总线始于1995年,30年里一路走来,经历了很多个版本,从控制器角度来看,有OHCI、UHCI、EHCI、XHCI等。考虑到硬件成本和使用场景,XHCI的端口可以具有不同的能力,比如幽兰代码本的USB口就有支持USB 3.0,也有只支持USB 2.0。这样单独为了兆芯的硬件而增加代码成本有点高,由此而看,上面的while循环中的break,不仅优雅,而且通用,真是妙极,神乎其技!
2025-11-13 22:20:44
308
原创 Linux系统的设备总线(/sys/bus)原理与实践
当一个设备被添加到系统时,会调用 device_add() 函数,而 device_add() 的核心动作之一,就是主动将设备交由其所属总线进行处理——通过调用 bus_probe_device(),总线正式介入设备注册流程,主导后续的驱动匹配过程。该命令以树形结构展示了 /sys/bus 目录下所有已注册的总线类型(如 pci、usb、platform、i2c 等),并对每种总线分别列出其管理的设备和已加载的驱动程序,清晰呈现了系统中各类总线与其关联设备和驱动之间的层次关系与组织结构。
2025-11-10 11:06:03
692
原创 Linux系统的设备类(/sys/class)原理与实践
在 /sys/devices 那片由总线、控制器、地址交织而成的密林中,/sys/class 如同一张精心绘制的地图——不展示每一条小径的曲折,只标注“此处有网卡”“彼处是电池”。概而言之,/sys/class 忽略物理连接,只按设备的 “功能用途” 分组,每个功能目录下的文件以链接形式直接指向 /sys/devices 中对应的真实设备节点,这种方式极大降低了设备访问的复杂度。就像诗句中在人潮中执着寻找 “那人”,满脑子都是 “他该在灯火最亮的地方”,却没料到答案偏偏藏在看似清冷的 “阑珊处”。
2025-10-31 22:55:54
422
转载 为AMP而生,GDK5套件细节公布
某种程度来说,AI革命对很多程序员喜忧参半,AI的编程能力与日俱增,与程序员抢饭碗是不争的事实。而且,这个趋势不可阻挡,如何在这场变革中找到自己的机会是关键,AMP便是给底层技术人的一个机遇,衷心希望格友们能抓住这个机遇。AMP在机器人、电力系统、自动驾驶、精密机床等产业中都有非常高的匹配度,AMP技术提供的"让Linux和RTOS无缝并行运行"的能力,是这样行业所亟需的。概而言之,它们既需要。的时代里,它的优点再次凸显出来,正在受到越来越多的青睐。屏线前请务必确认电压选择跳线帽配置正确!
2025-10-18 08:29:24
125
原创 Linux 系统的设备树(sys/devices)原理与实践
从名字就能看出:"5-1"中的"5" 对应 _usb5(USB 总线 5),"1" 表示插在根集线器的 1 号端口,等于告诉系统:"我插在它的 1 号口,归它管"。在探究 /sys/devices 的过程中,我从 kobject 的字段定义、kset 的集合管理,一路追踪到 kernfs_create_dir_ns 的目录创建过程,最终在 fc880000.usb 与 _usb5 的父子关系中,清晰印证了内核设计的精密逻辑。在做这个任务的过程中,我做好了前面的部分便停止了。中,并没有做层级的区分。
2025-10-17 18:07:14
735
原创 AMP的道与器
从2005年开始公开讲授“Windows内核及高级调试”课程,曾在微软的Webcast和各种技术会议上做过《Windows Vista内核演进》、《调试之剑》(全球软件战役研究峰会)、《感受和思考调试器的威力》(CSDN SD2.0大会)、《Windows启动过程》、《如何诊断和调试蓝屏错误》、《Windows体系结构——从操作系统的角度》(以上三个讲座都是微软“深入研究Windows内部原理系列”的一部分)等。,主要功能:加载固件,启动和停止远程处理器,使用的内存,中断控制器和中断分发,时钟,
2025-10-16 17:43:26
322
转载 具身智能下的实时陷阱:线程风暴致系统卡死
很多工具验证、系统实验、性能分析都是在它上面完成的 (图中是我在幽兰笔记本上编译 Wireshark 并进行 USB 抓包的画面,用于分析 USB 调试链路) 在这个过程中,它不仅是一台设备,更像是一位沉默的搭档,默默见证着我的成长和进步。尤其是在算法侧常用的并发库(如 ONNX Runtime、OpenMP、TBB)与实时任务混跑的场景下,一旦调度属性被无意间继承,就可能引发一场“看似网卡掉线,实则CPU被锁死”的事故。当你再遇到那种“莫名卡死”的系统时,也许答案并不在外设,而藏在。网口无法ping通。
2025-10-13 13:08:07
75
转载 调试神秘的EL3
进一步说,不同的代码运行在不同的级别。应用程序运行在级别最低的EL0,操作系统运行在EL1,VMM运行在EL2,最高级别的EL3留给系统固件,一般称为ATF(ARM Trusted Firmware),也称TZM(Trust Zone总督)。NDB迅速响应,通过ADI接口与SoC对话,让对方进入调试模式,一切就绪后,NDB显示出命令行提示符,等待更多命令。我在U-Boot课程中,曾经翻来覆去、浓墨重彩的讲过MaskROM,简单说,它是SoC厂商在出厂前烧到芯片内的一段程序,它以可信固件的身份工作EL3。
2025-09-09 11:28:29
111
原创 Indler漏洞更新
概括一下,Indler漏洞已经报告,某些内核已经修正这个问题,比如幽兰代码本使用的内核是修正了这个问题的,但是内核的主线代码还没有修正。这个漏洞的另外一个危害就是会导致内核不稳定,一旦触发,那么内核数据被意外覆盖,导致莫名其妙的BUG,这也正是格蠹当初注意到它的原因。Kees向我要了重现步骤,我把本来中文写的重现步骤翻译为英文后发给了他,他回复说,他会把这件事加到他的计划里。关于这个漏洞的危害,至今没有已知的RCE(远程执行代码)利用方法,但是DoS攻击的方法是比较多的。Kees可能是忙不过来了。
2025-09-07 11:47:45
744
原创 新版微信的374崩溃
可能是释放的块本身有问题,比如参数是野指针,多次释放,也可能是其它代码把堆搞坏了,这次调用触发了问题,冤枉背锅。堆的问题也常常反应了代码中的一些深层问题,比如频繁的动态分配,分配释放逻辑混乱等。归纳一下,这次崩溃是因为新版微信进程内的进程堆发生故障,在Weixin.dll释放堆块时触发了NTDLL的堆检查机制,报告致命错误,打开桌子边上的《格蠹新编》,翻到94页,图15-2,调用栈里,主程序就是WeChat。双击报告附带文件中的dmp文件,WinDBG被唤起,自动打开了这个转储文件,让我禁不住看了几眼。
2025-09-03 14:23:54
946
原创 U-BOOT构建脚本闪退之谜
主线代码反向移植到幽兰代码本本来使用的v2017版本时,遇到构建脚本闪退的问题。因为这个问题涉及到多种程序文件和配置文件的配合,比较新颖,所以特别将其记录下来。如果大家想重现和体验这个问题,那么非常简单,只要打开toosl/Kconfig, 找到config MKIMAGE_DTC_PATH这一行,将其修改为。函数的参数是个很大的params结构体。回头追查产生命令的代码,仔细看snprintf的第一个动态内容,来自一个名叫。看起来是调用dtc来编译设备树文件的命令行,但是却没有关键的dtc程序名。
2025-08-26 10:38:08
347
原创 在调试器下理解Linux内核的追踪事件和追踪器
【RZ】是有关联的两个概念,事件是基本的信息提供器,tracer是一种追踪信息定制机制,内部常称为plugin,tracer可以和事件关联,比如graph_trace tracer与graph_trace_entry_event和graph_trace_ret_event是关联的。Linux内核的追踪机制是实现系统调试和优化的一项关键设施,也是很多上层工具赖以生存的基础,包括eBPF、trace_cmd、Kernel Shark、其中1号栈帧的lk!在追踪机制中,追踪事件和追踪器是一对有关联的关键概念。
2025-08-25 15:18:09
785
原创 格蠹之役何茫茫?
上周四周五(8.14-15)两天,我在南京一家公司里讲调试课,周五中午课间休息时,上海的同事发来一条消息:“收到一个快递”,并且附带了一张照片。这两年,AI技术大兴其道,加上外企裁员,一些技术同行失业了,更多的同行则受到了心理上的影响,对编程和软件技术的热情下降,失去斗志,切换到“躺平”模式。打开我电脑上存放《格蠹汇编》书稿的文件夹,还有一个postpub目录,里面放着一些照片,拍的是《格蠹汇编》出版后的一个签售会。讲座现场,大约有几十个人参加,大多是喜爱调试的同行,特别是《高端调试》网站的一些网友。
2025-08-24 11:32:01
998
1
原创 PC经验和U-BOOT的启动菜单
我尝试关闭SMART监视,然后退出BIOS,重新启动,很有效果,刚才的报警消息没有了,屏幕上显示操作系统的徽标,过一会后,成功进入系统,虽然本地屏幕花屏了,但是我可以通过网络远程登录。幽兰使用的U-Boot代码来自瑞芯微开发的一个分支,这个分支是基于U-Boot主代码树的2017版本,因为此,这个分支的代码的版本号里有个明显的v2017标记。在我看来,不管是普通用户,还是专业用户,当他遇到眼前的计算机罢工,无法启动而焦急万分无计可施时,你告诉他,可以进到BIOS做某某设置,他都会眼前一亮。
2025-08-22 22:38:21
1063
转载 英特尔对LINUX的真爱是普渡众生还是养虎为患?
从下面这张我维护多年的Linux内核发展表可以清楚看到,2000年是个重要分水岭,2000年之前,Linux的体量就那么一点,2000年之后则高速发展。我在英特尔工作时,曾经从这里飞到硅谷区域的英特尔行政总部,英特尔的研发中心有大巴坐到机场,拿着英特尔的胸卡就可以登机,特别的方便。一个简单的解释是,如果没有Linux,那么小的芯片厂商根本没有机会进入高端的计算市场,因为没有操作系统支持它,它自己没有能力研发操作系统,微软这样的操作系统厂商也不可能支持它们。但其实圈里人都知道,投入最大的就是英特尔。
2025-08-10 11:33:53
60
原创 让人撇嘴的崩溃和让人叹服的可调试性
我特意“打开所在的文件夹”,看了一眼刚刚下载好的文件,对它说:“你好啊,美国来的客人,上海欢迎你!新版本装好后,启动wpa,界面果然和以前不一样,布局更漂亮了,右侧还多了个“欢迎使用的新的启动器!更难得的是,把鼠标移到变量上,立刻显示出了变量的值,XPerfProcessingSource.XPerfAddInDirectory的值确实是我安装WPT的路径。我估计VS要忙一会,就切到微信界面,看了几条消息。为此,我特意把安装程序复制到一个新的本子上,重复上面的步骤,结果还是同样的症状,致命的异常,崩溃。
2025-07-12 17:34:07
892
转载 AI时代,编程已死?不,它比以往任何时候都更重要!
如果没有专业开发者的严格数据治理和算法监控,AI可能被喂入毒数据(Poisoned Data)或脏数据(Dirty Data),轻则导致模型失效,重则可能被恶意利用 - 比如生成虚假信息、操纵金融系统,甚至干扰关键基础设施,这些都将对社会秩序造成严重威胁。例如:2023年,Stack Overflow的一项调查显示,87%的开发者使用AI辅助编程,但其中76%的人表示仍需手动修改AI生成的代码。这说明,AI目前只能作为“然而讽刺的是,那些宣称“AI取代编程”的人,可能从未真正理解AI是如何被创造出来的。
2025-06-28 08:50:53
192
原创 让人喷饭的BUG在哪里?
回过头来看,这个表面上非常明显的BUG,实际上还是有些复杂的,不是简单的单点错误,而是牵涉到多个函数。对于这样的BUG,不上调试器的话,是不太容易看出来的。踪时,我发现事件的pmu_name属性不为空,而且大核的叫cpu_core,小核的叫cpu_atom。,更重要的是,当场证明了这一定是BUG,因为眼力过人的李博士看出是用小核的时钟数去除大核的指令数,指桑骂槐,张冠李戴。对于大矩阵乘法的1号算法,大核的IPC为2.46,小核的IPC为0.73,大核的表现优于小核。函数中遍历事件列表,搜索指定类型的事件。
2025-06-12 22:18:10
1051
原创 破纪录的IPC和让人喷饭的BUG
但我觉得,VTune的信息有待更新,对于最新的微架构,IPC的理论上限应该是6。上午的第一讲讲的是时间测量,第二讲是时钟,第三讲是IPC,也就是每个时钟能执行的指令数(Instructions Per Cycle)。和前一天一样,大家使用自己喜欢的环境做试验,有的用至强,有的用酷睿,也有人用AMD的Ryzen(锐龙)和EPYC。正在这僵持的窘境,经常“语出惊人”的李博士给出了一个惊人的猜测:可能是用大核的指令数去除小核的时钟数了。看到10.83这样的结果,我是无论如何不相信的,坚信是哪里出了问题。
2025-06-10 22:02:02
366
原创 使用VTune远程优化LINUX程序
今天是第一天,北京的天气非常好,蓝天白云,晴空万里,天气有些热,还好室内中央空调充足,而且人手一把新款的“格物致知”扇子(^_^)。使用霄龙笔记本的同学在得意了好一阵子后,在做VTune试验时遇到问题了,VTune可以安装在AMD系统上,但是很多试验都无法做——报告不支持的处理器型号(^-^)。接下来,再刷新VTune的界面,就可以选择各种高级优化试验了,比如基于硬件事件的采样。上午从Intel的CPU讲起,回顾IA历程,介绍Core、UnCore,讲的有点多,只做了一个小试验(感受x86的变长指令)。
2025-06-06 22:56:28
718
转载 致广大而尽精微——读张银奎《软件简史·序》后感
我读了《序》和前两章,随后在动车上和飞机上,我每读一章前,我就再看一遍《序》,已经记不清楚读了多少遍《序》。每读一遍《序》,我就想到《典籍里的中国》中的编写典籍的那些先辈们在历史长河中躬身入局、身体力行地将文化和智慧保存下来,传承中国文化、传承中国精神,让我们薪火相传、接续前行。张银奎说:“历史本来就是有趣的,很多学科都是有趣的,我们应该发现它的趣味,归还它本来的趣味给每个喜欢求知的心灵。我想,他是以人文情怀审视软件的,他应该是想打破技术与人文的边界,想软件开发应关注人的需求、社会责任和文化价值。
2025-06-05 13:10:36
102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅