Toggle navigation
Bruce Lee's Notes
HOME
ARCHIVES
ABOUT
CATEGORIES
TAGS
SEARCH
English
English
简体中文
Archives
Browse English posts by date.
2026
09-20
A Function Name Cannot Hold Its Numerical Contract
09-16
Same Output Shape, Different Answers: Pooling, Resizing, and Index Reductions
09-09
It Only Moves Data. How Can It Still Be Wrong?
09-04
An Instruction’s Four Identities: Why Code Generation Needs More Than Strings
08-29
You Found the Operator’s Name. Does That Make It Supported?
08-25
The Most Useful Words in an Operator Specification May Be “Not Yet Confirmed”
08-18
The Assembly Looks Right. Does That Mean the Machine Code Is Right?
08-13
Why Does the Same Release Package Get a Different Hash Every Time?
08-07
Compilation Failed. Why Is There Still a “Successful Model” in the Directory?
08-03
Why Is Packing Compiler Outputs into One File Hard?
07-27
The Compiler Moved. Its Lookup-Table Module Didn’t Get the Address
07-22
The Library Is in the Package. Why Can’t the Program Find It?
07-16
One Version of the Headers, Another Version of the Generator
07-12
“I Only Rebuilt It.” Why Did the Installation Directory Disappear?
07-05
Debug Works, but Release “Optimizes Away” a Write
06-30
Fewer Operations—So Why Disable the Optimization?
06-25
“I Parsed a Number” Does Not Mean the Input Is Valid
06-20
One More Loop, and the Binary Snapshot Looks Like a Different Program
06-14
You Caught the Exception. What Happens to the Half-Written Machine Code?
06-08
I Waited for the Event. Why Isn't the Data Ready?
06-03
Why Write the Same Final State Twice?
05-29
The Address Fits. Why Does the Compiler Say Memory Is Full?
05-23
The View Moved No Data. Why Can’t We Return the Memory?
05-17
A Few More Branches in the Graph—and Synchronization Registers Run Out First?
05-12
Why Does Someone Keep Borrowing My “Temporary” Register?
05-07
When Weights Move to the Left: A Transpose Identity That Moves the Whole Compiler Chain
05-01
A Sigmoid After MatMul: Why the Compiler Still Refuses to Fuse It
04-25
Putting Activation Inside Convolution: Preserve the Quantization Boundary Before Removing the Node
04-20
Who Moved My Scratch Register? Teaching an Emitter to Borrow and Return
04-15
Abs and Sign: One Line of Arithmetic Does Not Make Their Parameter Contracts Interchangeable
04-09
Subtracting Zero Can Disappear; Subtracting from Zero Cannot
04-03
The First Row Works, the Second Disappears: Alignment, Strides, and Padded Constants
03-29
Broadcasting: Sometimes the Right Address Is the One That Does Not Move
03-25
When the Debugger Starts Lying: One Permute, Three Ways to Fix Dump
03-18
Why Does Reshape Need Code? The Elements Stay the Same; Their Route Changes
03-13
Transposed Convolution Weights: The Shape Is Honest, but Memory Speaks Another Dialect
03-07
Grouped Convolution: Once You Slice the Cake, Slice the Labels Too
03-03
The Importer Got Clever Too Soon: Algebraic Optimization before Quantization Metadata
02-24
Floating Point Passes, Quantization Fails: A Rewrite Gives the Output the Input’s Identity
02-19
Epsilon Was Nonzero—Until It Nearly Vanished in the Integer Domain
02-13
Build a Dedicated Operator, Then Remove It: A Design Change Worth Recording
02-09
Just a Few Channel Parameters—So Why Is Local Memory Full?
02-02
Once BatchNorm Becomes Multiply-Add, the Numerical Work Begins
01-28
The Multiplication Is Right; the Scale Is Wrong: An Integer Kernel’s Two Ledgers
01-22
This Reduction Does Nothing—Why Can’t We Delete It?
01-18
Max, Min, and Sum: Similar Operators, Different Mathematical Homework
01-11
The Vanishing Dimension: How keep_dims=false Can Break an Inverse Permutation
01-06
Just Take the Mean—Why Is the Compiler Writing Loops?
01-02
Compiler Engineering Notes: 48 Bilingual Articles and Reading Paths
2025
04-20
ROS2 Fleet Coordinator V1: From Task Submission to Route Dispatch
03-28
Why Planning Uses Services While State and Assignments Use Topics
03-25
Why the Project Has Not Chosen Nav2-First Integration
03-24
DDS Sandbox Restrictions and the Limits of ROS 2 Runtime Verification
03-21
Why Conflict Detection and Reservations Are the Next Major Complexity Increase
03-17
robot_agent: Execution States and Waypoint Progression
03-15
path_planner: Graph Model, BFS, and Route Stitching
03-10
fleet_manager: Task Queue, Planner Dependency, and Assignment State Retention
01-08
Unit Impulse and Unit Step in Continuous and Discrete Time
2024
10-10
Beyond Technical Depth: What Else Makes a Capable Engineer?
10-01
Task Contexts, Stack Initialization, and Context Switching
09-30
Memory Management and Task Switching in a Multiprogram Environment
09-20
Building Multiple Applications and Managing the Compilation Pipeline
09-15
Implementing RISC-V Trap Handling and System Calls
09-15
Compiling, Loading, and Executing a User Program
09-15
From Compilation to Execution: Loading Navy Applications in Nanos-lite
09-01
Device Interfaces, Tracing, and Memory-Mapped I/O in NEMU
08-30
Startup Assembly and Experiments With printf
08-25
ELF Symbol Handling and Abstract Machine Infrastructure
08-20
Implementing and Using Memory and Function Tracing
08-18
Tracing Infrastructure and an Instruction Ring Buffer
08-08
Timing, Logging, Argument Passing, and Automated Makefile Builds
07-13
A Possible Implementation of sprintf and stdarg
07-13
Project Makefiles and NEMU Batch Mode
07-13
Reading the Source: Traps, Abstract Machine, and the Runtime Environment
05-31
Engineering Debugging Notes
05-10
Variadic Macros, Token Pasting, and Callback-Style Macro Expansion
05-09
Commenting Multiline Macros: A Mistake That Cost an Afternoon and an Evening
05-08
How the YEMU Emulator Works
05-08
Notes on Operand Decoding and Implementing RISC-V Instructions
05-08
C Preprocessor Token-Pasting Operator
04-08
Tracing the Nested Calls Behind cmd_c
04-08
Instruction Pattern Matching: The Macros and Functions Behind INSTPAT
03-23
Using a Macro to Check Whether Another Macro Is Defined
02-26
Cache Capacity, Block Size, Miss Penalties, and Set Associativity
02-14
Precise Traps, Multiple Issue, Register Renaming, and Memory Aliasing
02-03
Stage-Specific Forwarding, Load-Use Stalls, Early Branches, and Pipeline Flushes
01-26
Pipeline Hazards, Forwarding, Register Timing, and the x0 Trap
01-14
Rounding, Intermediate Results, Parallel Floating-Point Arithmetic, and Processor Design
01-06
Multiplication Hardware, Subnormal Floating-Point Values, and the RISC-V F/D Extensions
01-03
Bounds Checks, Calling Conventions, Large Immediates, and PC-Relative Addressing
01-03
Long Branches, Synchronization, Compiler Optimizations, and x86 Complexity
01-01
Fundamental RISC-V Design Principles
2023
12-12
Where I Left Off in My x86 Assembly Notes
10-11
x86 Programming Notes, Part 3: Execution, Descriptors, and Mode Switching
09-23
x86 Programming Notes, Part 2: I/O, Calls, Interrupts, and Protected Mode
09-14
Assembly Environments and Conventions Used in This Blog
09-11
x86 Programming Notes, Part 1: Techniques and Instruction Details
08-10
Preparing for the Long Haul
08-01
8086 Interrupts: Sources, the Vector Table, and Handler Execution
07-30
A Simple 8086 Assembly Lab: Displaying a Number on Screen
07-25
AI: What We Should Understand and How We Might Develop
07-15
A Beginner 8086 Assembly Lab: Copying Program Code
07-14
DOS Basics and the Beginning of Assembly Programming
VISITORS
FEATURED TAGS
C/C++
AI
Computer Architecture
Operating Systems
Engineering
Compilers
Memory and Concurrency
Numerical Computing
Mathematics
Reflections
Robotics
ABOUT ME
Don't wait Don't wait Don't wait for anything...
RECENT POSTS
A Function Name Cannot Hold Its Numerical Contract
Same Output Shape, Different Answers: Pooling, Resizing, and Index Reductions
It Only Moves Data. How Can It Still Be Wrong?
An Instruction’s Four Identities: Why Code Generation Needs More Than Strings
You Found the Operator’s Name. Does That Make It Supported?
archives
2026 (49)
2025 (9)
2024 (34)
2023 (11)
categories
C/C++
x86
ROS2
Career and Reflections
Engineering
RISC-V
Compiler Engineering
Signals and Systems
ESC