perf(amr): batch the coarse-fine flux rewrite into one device launch for packed Diffusion
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 52/100
- issue の種類
- リファクタリング
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- julia
- 領域
- backend, performance
調査の方向性
Start with _cf_flux_rewrite! and _cf_flux_rewrite_adjoint!, tracing their host loops over cfflux descriptors and the adjoint zero_ghosts! path. Use test/forest_diffusion.jl's KA-CPU direct-launch tests first, then run the CUDA leg with MFO_TEST_GPU=true. Done means bit-parity with the host loop and no change to the exchange count.
索引モデルが issue の本文から書いたものです。
説明
Follow-up to #59 / #76.
The packed Diffusion sweep on a GPU backend is one KernelAbstractions launch over (blocksize..., nleaves) for the stencil, but the conservative coarse–fine seam (_cf_flux_rewrite! / _cf_flux_rewrite_adjoint!) still runs as a host loop over the cfflux descriptors — a few small broadcast launches on device views per coarse–fine face, ahead of (forward) or after (adjoint) the stencil launch. The launch count therefore still scales with the number of coarse–fine faces, which only partly meets #59's "leaf-count-independent launch structure" acceptance item. The adjoint's per-leaf zero_ghosts! before the gather kernel is the same pattern (pre-existing on the other adjoint kernels).
Proposed: a device-resident twin of the cfflux table (SoA of leaf/face/offset descriptors) and one @kernel per direction that applies every face rewrite in a single launch, keeping the per-face body identical to the host loop so the numerical definition does not fork. Same for a batched ghost-zeroing kernel on the adjoint path. Acceptance: bit-parity with the host loop on the test/forest_diffusion.jl KA-CPU direct-launch tests and on the CUDA leg (MFO_TEST_GPU=true), and no change to the exchange count.
🤖 Beep boop — filed by Claude, not Kyle leaving himself homework.
- 主要言語
- Julia
- スター
- 3
- フォーク
- 1
- 平均マージ
- 1日 28分
- マージ済み PR(30日)
- 6
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
RallypointOne/MatrixFreeOperators.jl のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
-
performance
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
-
perf(forest): thread the reference BlockForest path — leaf sweeps and exchange descriptor loopsオープンperformance
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
RallypointOne/MatrixFreeOperators.jl の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 61/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
Deltares/Wflow.jl#1145 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
JuliaDiff/FiniteDiff.jl#238 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
JuliaDiff/SparseMatrixColorings.jl#356 ·
メンテナーはふだん 1 日以内に返信