''

Orien Daily

  1. 图着色:编译器为什么会把变量当成地图来涂色写程序时,我们看到的是变量名:a、b、sum、temp

    图着色:编译器为什么会把变量当成地图来涂色

    写程序时,我们看到的是变量名:a、b、sum、temp。可 CPU 真正能快速使用的,不是这些名字,而是数量很少的寄存器。问题来了:程序里变量可能有几十上百个,寄存器却只有十几个,编译器凭什么决定谁住进寄存器,谁被赶到内存里?

    这里会出现一个很漂亮的离散数学模型:图着色。编译器先看每个变量的“活跃区间”,也就是它从什么时候开始有用,到什么时候彻底不用。如果两个变量在同一段时间都还要被使用,它们就不能放在同一个寄存器里。于是编译器把变量画成点,把“不能共用寄存器”的关系画成边。这样一来,分配寄存器就变成了给图上的点涂颜色:相邻的点不能同色,每一种颜色就是一个寄存器。

    这个转化的味道很好,因为它没有硬写一堆“如果变量 A 和变量 B 冲突怎么办”的特殊判断,而是把问题换成了一个统一的数据结构。数据结构对了,后面的算法才有地方站住脚。现实里的编译器当然不会天真地求一个完美最优解,因为一般图着色是 NP-hard,追求完美会把编译时间烧掉。它们通常用启发式算法:先挑容易处理的点删掉,最后再倒回来上色;如果颜色不够,就把某些变量 spill 到内存里。

    难点在这里:

    所以寄存器分配不是一个小优化,它是编译器把数学模型塞进现实机器里的典型例子。抽象得太少,代码会变成补丁堆;抽象得太狠,又会慢到不实用。好实现通常卡在中间:模型干净,策略务实。

    思考题:如果一个函数里有 8 个变量,但机器只有 4 个寄存器,是不是一定要把 4 个变量放到内存?

  2. 📸 @ajkendof【第1回アジア・オセアニア剣道選手権大会】[The 1st Asia Oceania Kendo Championship]第1回アジア・オセアニア剣道選手権大会の写真を別カメラ撮影分を含めて全4879枚、公式Flickrに掲載いたしました

    📸 @ajkendof
    【第1回アジア・オセアニア剣道選手権大会】
    [The 1st Asia Oceania Kendo Championship]

    第1回アジア・オセアニア剣道選手権大会の写真を別カメラ撮影分を含めて全4879枚、公式Flickrに掲載いたしました。ご覧ください。
    大会アルバム → https://www.flickr.com/photos/aj_kendo_f/albums/72177720332425331 #kendo #剣道 #1AOKC
    原文 #剣道

  3. 📸 @shinji_marosan ×3皆様おはようございます😊(2回目)今朝は1週間ぶりにウォーキングしました夜中に台風が通り過ぎて何事もない様子でしたで、体重測定…体重105.0kg 体脂肪率 32.8%ウォーキングしなかったから爆増してる😭う〜ん😥今日夜も 稽古です3段昇段審査まで2ヶ月を切ったから焦ってます😅 #剣道原文 #剣道

    📸 @shinji_marosan ×3
    皆様おはようございます😊(2回目)
    今朝は1週間ぶりにウォーキング
    しました
    夜中に台風が通り過ぎて何事もない
    様子でした
    で、体重測定…
    体重105.0kg 体脂肪率 32.8%
    ウォーキングしなかったから
    爆増してる😭

    う〜ん😥

    今日夜も 稽古です
    3段昇段審査まで2ヶ月を切ったから焦ってます😅 #剣道
    原文 #剣道

  4. 🌅 Orien Daily 朝刊【6.2】1️⃣ Adafruit遭法律函 — 商标争议升温2️⃣ 社媒年龄验证争议 — 网络自由受压3️⃣ Janet语言走红 — 小语言有取舍4️⃣ Uber限制AI开销 — 预算四月烧穿5️⃣ 微软推AI测试 — 文本生成评估6️⃣ 微软做智能体安卓 — 代理优先系统7️⃣ 和歌山最高警报 — 古座川已氾滥8️⃣ Holo3.1发布 — 本地电脑代理频道:@OrienDaily

    🌅 Orien Daily 朝刊【6.2】
    1️⃣ Adafruit遭法律函 — 商标争议升温
    2️⃣ 社媒年龄验证争议 — 网络自由受压
    3️⃣ Janet语言走红 — 小语言有取舍
    4️⃣ Uber限制AI开销 — 预算四月烧穿
    5️⃣ 微软推AI测试 — 文本生成评估
    6️⃣ 微软做智能体安卓 — 代理优先系统
    7️⃣ 和歌山最高警报 — 古座川已氾滥
    8️⃣ Holo3.1发布 — 本地电脑代理
    频道:@OrienDaily