编译器Lexing(一):前端&正则表达式
发布于
编译器前端从哪里开始理解一段程序 把一段程序交给编译器时,最先面对它的并不是优化器,也不是代码生成器,而是前端。前端的任务很直接:先确认这段程序是不是合法的,再把原始字符整理成后续阶段真正能处理的结构...
继续阅读 →Next Door 0.5x Engineer
发布于
编译器前端从哪里开始理解一段程序 把一段程序交给编译器时,最先面对它的并不是优化器,也不是代码生成器,而是前端。前端的任务很直接:先确认这段程序是不是合法的,再把原始字符整理成后续阶段真正能处理的结构...
继续阅读 →发布于
前言 参考文章SMT and CMP Architectures。 理解 SMT 和 CMP 为什么会一起定义现代处理器 今天讨论处理器性能,已经不能只盯着主频和单核速度。真正决定上限的,是一颗芯片能...
继续阅读 →发布于
前言 原文A practical guide to building agents。 怎样把 AI Agent 真正做出来 AI Agent 值得投入的地方,不是把聊天能力再包装一层,而是让系统真正代...
继续阅读 →发布于
多处理器最难的不是多加几个核 今天几乎所有计算机都在谈多核,但多处理器真正困难的地方,从来不只是把核心数量堆上去。难点在于:怎样让多个执行单元共享同一份内存,又让它们看到的结果既正确、又足够快。只要这...
继续阅读 →发布于
引言 原视频The Cost of Concurrency Coordination with Jon Gjengset。 Mutex 真的慢吗 很多人一谈到并发,就会下意识地把性能问题归到锁头上: ...
继续阅读 →发布于
前言 论文原文Efficient Benchmarking of AI Agents。 让 AI Agent 排行更便宜的一种办法 给 AI agent 做评测,正在变成一件越来越贵的事。和传统语言模...
继续阅读 →发布于
现代乱序处理器之所以快,很大程度上靠的是“先做能做的事”。寄存器相关性可以靠重命名拆开,但一碰到内存,事情立刻复杂起来:一条 load 到底能不能先跑?它读到的值应该来自 cache,还是来自某条更老...
继续阅读 →发布于
做计算机系统设计,几乎不存在“更快、更省电、更便宜”同时成立的完美答案。真正的工作,通常是在功耗、性能、面积三者之间做受约束的最优化;而真正的难点,则是在测量时别把自己骗了。把这两件事放在一起看,才能...
继续阅读 →发布于
处理器前端最难的一件事,不是把指令取出来,而是要在结果还没出来之前,先决定下一步往哪走。分支一旦猜错,流水线就要回滚,前面抢跑出来的工作都会白做。真正优秀的分支预测器,做的不是“碰运气”,而是在有限的...
继续阅读 →发布于
如果想真正理解今天高性能处理器的基本套路,MIPS R10K 是一个非常好的切入口。它诞生于 1990 年代中期,但很多今天仍在使用的核心思想,在它身上都已经相当成熟:寄存器重命名、乱序执行、按序提交...
继续阅读 →