#!/bin/bash # 由 ab_repeat.sh 与 screen.sh 共用;两处必须用同一个判据,否则筛选放行的算子 # 到了 A/B 那步又被拦下,或者反过来。 # 一个 run 生成代码的指纹:只取 .ttgir 的相对路径 + 内容。 # 路径进指纹是因为"变体集合变了"与"某个变体内容变了"同样算改变,而只 cat 内容 # 会把前者洗掉。只认 .ttgir 则是因为 dump 目录里还有 index.tsv 和 naming.md: # 一个 kernel 都没编出来的 run 只剩这两个文件、两侧完全相同,会把"什么都没生成" # 报成"开关没改变生成代码"——router_gemm 在 MUSA 上就是这样。 # 零 kernel 返回非零,交给调用方当作"没有可比的 IR",而不是"一致"。 ir_fingerprint() { local dir="$1/ttgir" [[ -d "$dir" ]] || return 1 local n n=$(find "$dir" -name '*.ttgir' -type f 2>/dev/null | wc -l) (( n > 0 )) || return 1 local out out=$( { find "$dir" -name '*.ttgir' -type f | LC_ALL=C sort | while IFS= read -r f; do printf '%s\n' "${f#"$dir"/}"; cat "$f" done; } | sha256sum | cut -d' ' -f1 ) [[ -n "$out" ]] && printf '%s' "$out" }