Articles
12
Tags
24
Categories
7
Home
0X7C00
项目演示
Back to Home
Home
项目演示
Created
2026-01-12
|
Updated
2026-01-20
|
Post Views:
Author:
nv3ifu
Link:
https://nv3ifu.github.io/2026/01/12/Project-Demo/
Copyright Notice:
All articles on this blog are licensed under
CC BY-NC-SA 4.0
unless otherwise stated.
项目
演示
Previous
Waste
本文为学习 Computer Enhance - Waste 的整理。 核心观点提升程序性能只有两条路: 减少要求 CPU 执行的指令总数 调整这些指令,让它们更高效地穿过 CPU 除此之外,别无他法:要么减少数量,要么加快速度。 CPU 正在执行的指令中,存在大量指令,它们所做的事情,与实际程序逻辑毫无关系。 案例:计算 A + B运行在两个较为极端的环境下: C 语言:编译为原生机器码,运行在 CPU 上 Python:编译为字节码,运行在 CPython 虚拟机上(没有 JIT) C 语言实现测试代码: 12345678910int __declspec(noinline) add(int A, int B){ return A + B;}#pragma optimize("", off)int main(int ArgCount, char **Args){ return add(1234, 5678);} 可以看到为了实现 A + B,只使用了 一条 ADD 指令。 Python ...
Next
Cache
DRAM 读取速度太慢,所以就有了缓存。但同时也引入了缓存抖动、伪共享、读后写、一致性等需要解决的问题,这篇博客中就来介绍下相关的概念。 缓存的种类 L1:指令缓存、数据缓存,核独占 L2:数据指令通用,核独占 L3:核共享 这里以包含式 L3 为例: L3 包含 L1/L2 的所有数据 L3 的目录记录:这行在哪些核的 L1/L2 里 举例:Core 1 想读一个地址: 查 L3 目录 发现 Core 0 有 Modified 副本 通知 Core 0 写回 按照 L1 → L2 → L3 顺序访问,一个 miss 了就下一个,访问速度递减,大小递增。 缓存映射方式缓存映射方式主要有三种: 直接映射(1 路组相联) 组相联 全相联(缓存行数 = 路数) 下面的动画中详细解释: 👉 点击查看组相联缓存动画演示 缓存行置换算法常用的是 Tree PLRU(用二叉树近似 LRU)。为什么不用纯 LRU 呢?是因为硬件成本的问题: 存储缓存行状态需要额外的空间 N 路组相联需要的空间 = log₂(N!) × 组数 =...
nv3ifu
Articles
12
Tags
24
Categories
7
Follow Me
Announcement
This is my Blog
Recent Posts
Page Fault Clustering
2026-01-21
constexpr:编译期求值的秘密
2026-01-15
Virtually Indexed, Physically Tagged (VIPT)
2026-01-14
Single Instruction, Multiple Data (SIMD)
2026-01-13
Break the Serial Dependency Chain
2026-01-13