标签

计算机 未来 人生......
计算机体系结构

异常处理与系统调用实现细节

项目工程


RISCV不同阶段前递问题/load-use冒险的停顿技术/优化控制冒险发生时浪费的时钟周期问题分析/ID计算加速的专用前递通路问题/PC清理-预测加速问题/流水线清理问题

RISC-V


RISCV直接模式处理例外的实现问题与解决方案/PC的变化与SEPC的存储精确性问题/反相关代码导致的被迫按序执行的问题/内存别名问题

RISC-V


RISCV停顿与非停顿冒险/x0寄存器的数据冒险处理陷阱/寄存器同周期读写的解决方法/解决EX/MEM冒险

RISC-V


RISCV基本设计理念

RISC-V


RISCVcache数据块容量权衡问题/大数据块导致的失效损失长延迟问题/cache容量大小与命中率问题/多路组相联策略减低失效率/组相联组内选择数据块策略

RISC-V


RISCV减低边界检查的开销方法/硬连线为零的可能实现方式/大立即数的RISC-V编址和寻址问题/分支和跳转指令中立即数字段的PC相对偏移表示问题

RISC-V


RISCV舍入问题和中间结果存储问题/浮点并行加速的不稳定性问题以及传统并行算法研究步骤

RISC-V


RISCV超12位立即数字段的跳转问题/解决数据竞争问题的底层支持/数组索引访问与指针访问/常见优化/x86的复杂性缺陷

RISC-V


RISCV乘法硬件加速算法原理/单精度规格化与非规格化最小正数问题/F/D标准扩展与I问题

RISC-V


DOS基础与汇编

x86


超级无敌简单入门x86-8086汇编实验:移送程序代码-最简化安装

最简单的汇编实验...


x86汇编搁置的地方

x86


x86编程思考过程片段(1)关于编程技巧,注意事项,指令细节

x86


01-比较简单的x86-8086汇编实验:将数值显示到屏幕上

一个简单的汇编实验...


x86编程思考过程片段(2)关于编程技巧,注意事项,指令细节

x86


x86编程思考过程片段(3)关于编程技巧,注意事项,指令细节

x86


x86-8086汇编:该架构的中断信息引发,中断向量表的配置,中断例程的执行

细剖x86-8086中断...


本博客的汇编代码的环境规范

大不了,从头来过...


工程实践

构建和管理多文件以及编译流程

项目工程


cmd_c嵌套调用

项目工程


Debug 一切正常,Release 却把写入操作“优化没了”

必要写入藏进断言后,关闭检查会改变程序语义。


“我只是重新编译”,为什么安装目录先消失了?

环境、构建和安装各自负责什么,失败后留下什么。


头文件是一版,生成器是另一版:编译器构建里的“多人接力”

头文件、库、生成器和缓存共同决定工具链身份。


库文件明明在包里,为什么程序还是说找不到?

真实库、SONAME、链接名与运行搜索路径如何连接。


编译器搬了个家,查表模块就失联了

通过真实功能与缺件测试,验证运行资源能随包移动。


把一堆编译产物装成一个文件,到底难在哪里?

模型文件作为协议,必须定义偏移、长度与所有权。


编译已经失败,目录里为什么还有一个“成功的模型”?

输出目录、临时产物和旧文件,让成功与失败可判断。


同一份发布包,为什么每次哈希都不同?

区分归档事件时间、包内时间和字节可复现性。


汇编看起来对了,机器码也会对吗?

伪汇编、汇编、机器码与数学参考各自证明什么。


一份算子文档最有价值的词,可能是“尚未确认”

规范要保留未知项,避免把示例表格写成能力承诺。


搜索到了算子名字,就可以写进“支持列表”吗?

从存在一个名字到完整编译路径,支持需要多层证据。


一条指令的四种身份:代码生成为什么不能只靠字符串

数学运算、内核、发射与编码的四层职责和错误归属。


循环只多了一层,为什么二进制快照像换了一个程序?

循环、标签和独立发射实例如何影响二进制确定性。


catch 住异常之后,半份机器码怎么办?

错误被捕获之后,已产生的状态与输出仍需明确处理。


“数字已经读出来了”,并不代表输入合法

解析成功之后,仍要检查完整消费、符号与字段范围。


工程debug经验

项目工程


时间/log/参数传递和makefile全自动编译

项目工程


系列宏以及函数

项目工程


编译器

Debug 一切正常,Release 却把写入操作“优化没了”

必要写入藏进断言后,关闭检查会改变程序语义。


“我只是重新编译”,为什么安装目录先消失了?

环境、构建和安装各自负责什么,失败后留下什么。


头文件是一版,生成器是另一版:编译器构建里的“多人接力”

头文件、库、生成器和缓存共同决定工具链身份。


库文件明明在包里,为什么程序还是说找不到?

真实库、SONAME、链接名与运行搜索路径如何连接。


编译器搬了个家,查表模块就失联了

通过真实功能与缺件测试,验证运行资源能随包移动。


把一堆编译产物装成一个文件,到底难在哪里?

模型文件作为协议,必须定义偏移、长度与所有权。


编译已经失败,目录里为什么还有一个“成功的模型”?

输出目录、临时产物和旧文件,让成功与失败可判断。


同一份发布包,为什么每次哈希都不同?

区分归档事件时间、包内时间和字节可复现性。


汇编看起来对了,机器码也会对吗?

伪汇编、汇编、机器码与数学参考各自证明什么。


一份算子文档最有价值的词,可能是“尚未确认”

规范要保留未知项,避免把示例表格写成能力承诺。


搜索到了算子名字,就可以写进“支持列表”吗?

从存在一个名字到完整编译路径,支持需要多层证据。


一条指令的四种身份:代码生成为什么不能只靠字符串

数学运算、内核、发射与编码的四层职责和错误归属。


它只是在搬数据,为什么还会算错:张量变换的隐藏契约

坐标、步长、别名和量化参数,让搬数据也有语义。


相同的输出形状,完全不同的答案:池化、缩放与索引归约

窗口分母、插值坐标和最大值索引决定具体答案。


一个函数名,装不下它的数值契约:非线性与归一化的边界

定义域、近似、精度与归约轴,比函数名字更重要。


编译器工程笔记:48 篇双语文章与阅读路线

数值与量化、算子与布局、资源与调度、工程与交付


求个平均值,为什么编译器先写起了循环?

把任意归约轴变成可执行的循环,追踪搬运和布局成本。


消失的维度:keep_dims=false 为什么能把逆置换弄坏?

被删掉的轴不再属于原来的坐标系,逆置换必须重建。


最大值、最小值和求和:长得像三兄弟,不能共用一份数学作业

归约框架可以共享,初始化、累加与重定标不能照搬。


这个归约什么也没做,为什么还不能删?

数学恒等不代表量化编码恒等,空轴和单位轴也有契约。


乘法没算错,尺度乘错了:整数内核的两张账单

逐项核对输入 scale、输出 scale 与中间乘积的范围。


BatchNorm 变成乘加之后,真正的数值工作才开始

从固定统计量到通道乘加,再到乘数、移位和偏置。


只有几个通道参数,为什么局部内存先满了?

避免把通道向量铺满整张量,同时守住广播语义。


写了专用算子,又把它拆掉:一次值得认真记录的设计转向

专用仿射算子的引入与撤回,如何比较维护成本与表达力。


epsilon 明明不是零,到了整数域却差点失踪

从 epsilon、平方与倒平方根追踪归一化的数值范围。


浮点全绿、量化全红:一次重写把输出的身份证换成了输入的

重写结果类型既描述容器,也携带量化含义。


太早变聪明的导入器:当代数优化抢在量化信息前面

代数变换时机、量化元数据匹配和常量处理为何互相制约。


分组卷积:切开蛋糕以后,盘子上的标签也得切

按组切分输入与权重时,连同量化信息一起维护。


转置卷积的权重:形状很诚实,内存却说了另一种方言

逻辑维度顺序和真实权重存储不同,切片公式就会不同。


Reshape 为什么还要写代码:元素没变,搬家路线变了

证明线性元素映射,区分形状变化与布局重排。


当调试器开始撒谎:一次 Permute,三种 Dump 修法

三条分支修法共同揭示观察路径也需要布局契约。


广播不负责喊话:它负责让地址有时前进、有时原地不动

按轴建立地址前进规则,覆盖标量、低秩和复杂广播。


第一行正确,第二行失踪:对齐、Stride 与常量填充的连环案

逻辑宽度、物理步长、对齐补齐与参数表必须一致。


减去零可以消失,零减去你不行:标量算子的方向感

常量折叠、交换律和操作数方向,不能混成一次简化。


Abs 和 Sign:算术只有一行,参数协议却不能复制粘贴

一元算子的数学定义,需要贯穿类型、量化和参数编码。


谁动了我的临时寄存器:让发射器学会借东西、还东西

从手写临时寄存器到明确的借用、释放和嵌套约束。


把激活函数塞进卷积:少一个节点之前,先保住那条量化边界

融合卷积与激活之前,保住中间量化与合法形状。


MatMul 后面有个 Sigmoid:为什么编译器偏偏不肯融合

多消费者、视图和依赖边界如何限制矩阵乘激活融合。


权重跑到左边以后:用一个转置恒等式,搬动整个编译链

转置恒等式只是起点,权重命名与量化轴还要一起移动。


那只“临时”寄存器,为什么总被别人借走?

用作用域表达寄存器所有权,明确自动归还的边界。


图里只是多了几个分叉,为什么同步寄存器先耗尽了?

分叉与依赖汇合如何形成同步资源压力。


视图没有搬数据,为什么内存仍然不能还?

跨过视图链追踪异步消费者,防止过早回收底层存储。


地址能表示,为什么编译器说“内存满了”?

区分可编码地址范围、分配区间和真实内存预算。


同一个最终状态,为什么需要两次写出?

持续状态、最终状态与直接输出,为什么不是同一种缓冲。


等过了事件,为什么还没等到数据?

跨执行单元传递状态时,事件必须覆盖真正的数据生产。


循环只多了一层,为什么二进制快照像换了一个程序?

循环、标签和独立发射实例如何影响二进制确定性。


catch 住异常之后,半份机器码怎么办?

错误被捕获之后,已产生的状态与输出仍需明确处理。


“数字已经读出来了”,并不代表输入合法

解析成功之后,仍要检查完整消费、符号与字段范围。


少算一点,为什么反而不敢优化了?

优化停用也是设计决定:切片、量化与参数尺寸的契约。


内存与并发

它只是在搬数据,为什么还会算错:张量变换的隐藏契约

坐标、步长、别名和量化参数,让搬数据也有语义。


Reshape 为什么还要写代码:元素没变,搬家路线变了

证明线性元素映射,区分形状变化与布局重排。


当调试器开始撒谎:一次 Permute,三种 Dump 修法

三条分支修法共同揭示观察路径也需要布局契约。


广播不负责喊话:它负责让地址有时前进、有时原地不动

按轴建立地址前进规则,覆盖标量、低秩和复杂广播。


第一行正确,第二行失踪:对齐、Stride 与常量填充的连环案

逻辑宽度、物理步长、对齐补齐与参数表必须一致。


谁动了我的临时寄存器:让发射器学会借东西、还东西

从手写临时寄存器到明确的借用、释放和嵌套约束。


那只“临时”寄存器,为什么总被别人借走?

用作用域表达寄存器所有权,明确自动归还的边界。


图里只是多了几个分叉,为什么同步寄存器先耗尽了?

分叉与依赖汇合如何形成同步资源压力。


视图没有搬数据,为什么内存仍然不能还?

跨过视图链追踪异步消费者,防止过早回收底层存储。


地址能表示,为什么编译器说“内存满了”?

区分可编码地址范围、分配区间和真实内存预算。


同一个最终状态,为什么需要两次写出?

持续状态、最终状态与直接输出,为什么不是同一种缓冲。


等过了事件,为什么还没等到数据?

跨执行单元传递状态时,事件必须覆盖真正的数据生产。


少算一点,为什么反而不敢优化了?

优化停用也是设计决定:切片、量化与参数尺寸的契约。


数值计算

相同的输出形状,完全不同的答案:池化、缩放与索引归约

窗口分母、插值坐标和最大值索引决定具体答案。


一个函数名,装不下它的数值契约:非线性与归一化的边界

定义域、近似、精度与归约轴,比函数名字更重要。


求个平均值,为什么编译器先写起了循环?

把任意归约轴变成可执行的循环,追踪搬运和布局成本。


消失的维度:keep_dims=false 为什么能把逆置换弄坏?

被删掉的轴不再属于原来的坐标系,逆置换必须重建。


最大值、最小值和求和:长得像三兄弟,不能共用一份数学作业

归约框架可以共享,初始化、累加与重定标不能照搬。


这个归约什么也没做,为什么还不能删?

数学恒等不代表量化编码恒等,空轴和单位轴也有契约。


乘法没算错,尺度乘错了:整数内核的两张账单

逐项核对输入 scale、输出 scale 与中间乘积的范围。


BatchNorm 变成乘加之后,真正的数值工作才开始

从固定统计量到通道乘加,再到乘数、移位和偏置。


只有几个通道参数,为什么局部内存先满了?

避免把通道向量铺满整张量,同时守住广播语义。


写了专用算子,又把它拆掉:一次值得认真记录的设计转向

专用仿射算子的引入与撤回,如何比较维护成本与表达力。


epsilon 明明不是零,到了整数域却差点失踪

从 epsilon、平方与倒平方根追踪归一化的数值范围。


浮点全绿、量化全红:一次重写把输出的身份证换成了输入的

重写结果类型既描述容器,也携带量化含义。


太早变聪明的导入器:当代数优化抢在量化信息前面

代数变换时机、量化元数据匹配和常量处理为何互相制约。


分组卷积:切开蛋糕以后,盘子上的标签也得切

按组切分输入与权重时,连同量化信息一起维护。


转置卷积的权重:形状很诚实,内存却说了另一种方言

逻辑维度顺序和真实权重存储不同,切片公式就会不同。


减去零可以消失,零减去你不行:标量算子的方向感

常量折叠、交换律和操作数方向,不能混成一次简化。


Abs 和 Sign:算术只有一行,参数协议却不能复制粘贴

一元算子的数学定义,需要贯穿类型、量化和参数编码。


把激活函数塞进卷积:少一个节点之前,先保住那条量化边界

融合卷积与激活之前,保住中间量化与合法形状。


MatMul 后面有个 Sigmoid:为什么编译器偏偏不肯融合

多消费者、视图和依赖边界如何限制矩阵乘激活融合。


权重跑到左边以后:用一个转置恒等式,搬动整个编译链

转置恒等式只是起点,权重命名与量化轴还要一起移动。