w
This commit is contained in:
parent
03ddaa09f2
commit
caa90775f9
89 changed files with 7126 additions and 0 deletions
89
IMPLEMENTATION_REPORT.md
Normal file
89
IMPLEMENTATION_REPORT.md
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# Mandelbrot Deep Zoom v23 実装報告
|
||||
|
||||
## 結論
|
||||
|
||||
`IMPROVEMENT_PROPOSAL.md`で定義したv23の実装、ローカル数値検証、WASM再現build、Hosted/Standalone成果物の生成まで完了した。実ブラウザでのみ測定できる性能・表示・操作・download検証は、今回の環境にin-app browser bindingがないため未実行である。したがって、実装と非ブラウザgateは合格、browser acceptance gateは保留として扱う。
|
||||
|
||||
## 実装済み
|
||||
|
||||
- 常時RAFを廃止し、invalidate時だけ動くevent-driven schedulerへ変更した。
|
||||
- wheel/pinch/pan中は再投影だけを行い、settle後に計算を1回開始する。
|
||||
- Preview時間予算を110msへ下げ、cold deep Previewは幅48px以下から開始する。以後は実測MPPでPreview寸法を決める。
|
||||
- 標準deepのCoveredは実測MPPから約1.4秒のpixel budgetを算出する。未計測・再投影のみの場合は保守的MPPを使い、DPR下限は固定比率ではなく長辺64pxとするため4Kでも予算が効く。精細・精度優先ではこの時間適応を行わない。
|
||||
- 処理モードの自動到達点を固定し、省電力はPreview、標準はCovered、精細はRefined、精度優先はValidatedで停止する。標準では境界AAと未確定追加反復を既定で実行しない。
|
||||
- 精細の未確定追加反復は全未確定pixelではなくescape境界候補に限定し、1 viewあたりdeep 384点/shallow 4,096点を上限にする。
|
||||
- `Reprojected → Preview → Covered → Refined → Validated/検証未完了`を分離した。
|
||||
- Coveredはeffective DPRの表示Canvas全域をpixel中心`(x + 0.5, y + 0.5)`で計算する。
|
||||
- escape field、分類、confidenceと彩色を分離し、palette変更時の反復再計算を廃止した。
|
||||
- fieldへ各sampleの実escape iterationを保持し、再着色・未確定継続・Export監査で近似値ではなく同じ数値結果を使う。
|
||||
- adaptive 2×/4× AA、linear-light resolve、byte-budget detail cacheを実装した。
|
||||
- 深部Worker、deep/BLA/color WASM、reference資産を遅延生成し、Worker数を実測とmemory budgetで増減する。
|
||||
- deep/BLA/colorはmainで各1回だけcompileし、compile済み`WebAssembly.Module`をWorkerへstructured cloneする。Worker sourceから埋込payload、palette LUT、RGBA生成の重複を除き、Workerは数値fieldだけを返す。
|
||||
- 通常jobから学習したstrip時間とWorker数をkernel version・端末特性keyで永続化し、次回起動で再利用する。
|
||||
- fixed-point direct、perturbation、rebase、BLA、局所guarded directを共通tile schedulerへ接続した。
|
||||
- deep切替を固定zoom閾値ではなくpixel stepとULPの比、hysteresisで決める。
|
||||
- deep切替とguard bitsへ直近orbitのglitch/未確定/補修率を加え、精度昇格時は低精度で作った基準軌道を破棄して再構築する。
|
||||
- 高精度directを約6msでyieldする非同期処理へ変更し、取消可能にした。
|
||||
- f64解析・収縮判定は`INTERIOR_LIKELY`のまま保持し、ValidatedではP/P+64双方の固定小数点整数不等式で主カージオイド/周期2球を証明できたsampleだけを`INTERIOR_PROVEN`へ昇格する。
|
||||
- 精度優先のdeep描画では、基準軌道もP/P+64で独立再計算して疎なcheckpointとescape位置を照合し、不一致時はglobal reference全体を32 bit昇格して作り直す。
|
||||
- 1×/2×/4×/custom、1×/2×2 AA、Balanced/Validated、進捗、取消に対応する独立tile exportを実装した。
|
||||
- Export sidecarへViewSpec、precision/iteration policy、未確定sample数、backend、全kernel SHA-256、色空間、encoder、paletteを記録する。
|
||||
- version付きURL、戻る/進む、座標・spanの正確値入力/copy、Undo/Redoを実装した。
|
||||
- 初回UI、一般statusと診断status、mobile compact status、keyboard操作、live region、visible focus、44px target、reduced motion/transparencyを実装した。
|
||||
- Hosted版はcontent-hashed外部WASMとstreaming compile、Standalone版は3ファイル直開きを維持した。
|
||||
- cacheは件数ではなくmobile 96 MiB/desktop 192 MiBのlogical byte ledgerで管理する。
|
||||
|
||||
## 再現buildと配布
|
||||
|
||||
- `src/shallow_kernel.c`、`src/deep_kernel.c`、`src/bla_kernel_v18.c`、`src/color_kernel.c`、`src/abi.json`を配置した。
|
||||
- `toolchain.lock.json`でclang 17.0.6、target、SIMD/scalar flagsを固定した。
|
||||
- 公式SHA-256を照合したclang 17.0.6とNode.js v22.18.0で8 WASMを再buildした。
|
||||
- shallow、deep、BLA、colorのgoldenとSIMD/scalar同値gateに合格後、payloadと`kernels.js`を昇格した。
|
||||
- `scripts/build-kernels.ps1`は同一payloadだけを自動deduplicateし、異なるCOLOR variantsも正しく保持する。
|
||||
- `scripts/build-hosted.ps1`は現manifest以外の古いcontent-hashed WASMを削除する。
|
||||
|
||||
生成先:
|
||||
|
||||
- Hosted: `dist/hosted/`と`dist/wasm/`
|
||||
- Standalone: `dist/standalone/`
|
||||
- 再現build: `build/wasm-v23/`
|
||||
|
||||
現在の非圧縮基準値は、Hosted first view 142,046 bytes、Standalone 170,593 bytesである。詳細なfile hashは`audit/v23-source-baseline.json`に記録した。
|
||||
|
||||
## 合格済みgate
|
||||
|
||||
- source contract: pass
|
||||
- kernel source/ABI contract: pass
|
||||
- fixed-point precision 256/320 bit: pass
|
||||
- 基準軌道P/P+64 checkpoint一致と故意の不一致検出: pass
|
||||
- analytic interior integer proof 256/320 bit: pass
|
||||
- pixel mapping 851 samples、shallow/deep/BLA、2×/4× tile seam: pass
|
||||
- 配布shallow WASM pixel contract 1,440 samples、mismatch 0: pass
|
||||
- generated-WASM shallow/color/deep/BLA golden: pass
|
||||
- SIMD/scalar結果比較: pass
|
||||
- 本体、shallow Worker、deep WorkerのJavaScript構文: pass
|
||||
- mock DOM初期化とv23 diagnostics: pass
|
||||
- compile済みdeep/BLA/color Moduleのstructured clone・instantiate: pass
|
||||
- Node固定scene性能基準と処理量契約: pass(`audit/v23-node-performance.json`)
|
||||
- Hosted/Standalone buildと全payload SHA-256: pass
|
||||
|
||||
toolchainを利用できる環境では次で省略なしに再実行できる。
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/test-all.ps1 -RequireToolchain
|
||||
```
|
||||
|
||||
## Browser acceptance gate
|
||||
|
||||
`tests/browser-benchmark.html`は`tests/scenes.json`のmobile/desktop/4K profileと6 sceneを走査し、Preview、Covered、Refined、idle scheduler/write、long task、logical memory、canvas SHA-256をJSON化する。desktop/z0ではwheel連打、省電力がPreviewで停止すること、標準がCovered後にAA・追加反復を開始しないこと、即時再着色、64px Export、Validated Export取消、機械判定できるaccessibilityも実行し、結果へacceptance判定を付ける。今回の環境ではbrowser bindingがなかったため、`audit/v23-browser-baseline.json`は意図的に`not-run`のままである。
|
||||
|
||||
残る実機確認:
|
||||
|
||||
- mobile/desktop/4Kの表示画像とnative coverage
|
||||
- 操作反映p95、Preview/Covered/Refined所要時間
|
||||
- idle時の予約RAF/timer/background job/Canvas・DOM write 0
|
||||
- browser/GPUを含むobserved peak memory
|
||||
- Export寸法、完了前downloadなし、取消、PNG/JSON内容
|
||||
- keyboard-only、focus、44px target、live status、page zoomとcanvas pinchの操作確認
|
||||
|
||||
このgateが合格するまで、v23の実装完了と数値gate合格は主張できるが、固定実機に対する性能目標の達成は主張しない。
|
||||
Loading…
Add table
Add a link
Reference in a new issue