Skip to content

差し渡しを取らない軸の断りをシェーダーへ向ける - #207

Merged
routersys merged 3 commits into
mainfrom
dev/ComputeWeave.FixedAxisReport
Sep 7, 2026
Merged

差し渡しを取らない軸の断りをシェーダーへ向ける#207
routersys merged 3 commits into
mainfrom
dev/ComputeWeave.FixedAxisReport

Conversation

@routersys

@routersys routersys commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Summary / 概要

群を待つシェーダーの投入を断るとき、呼び出しに存在しない引数の名前を報告していました。断る条件は変えず、名前の側だけを直します。

For(x, y, shader) は3つ目の差し渡しを1に固定します。Z 方向のスレッド数が2以上だと1は群の倍数にならないので断られますが、そのとき報告される名前が z でした。2引数の入口に z という引数はありません。1引数の For(x, shader) では Y と Z の両方が同じ形になります。

差し渡しを取らない軸については、shader を名指しします。群の大きさを持つのがその引数で、6つの公開の入口すべてがこの名前を使っています。どの軸が足りないかは本文が述べます。差し渡しを取る軸は、これまでどおりその引数の名前を報告します。

Linked issue / 関連する課題

Closes #203

Kind / 種別

  • Bug fix / 不具合修正
  • Behavior change with no API change / API変更を伴わない挙動の変更

Behavior change / 挙動の変更

公開APIは変わりません。投入が断られる条件も変わりません。

差し渡しを取らない軸で断られたときの ArgumentException が、yz ではなく shader を名指しします。本文は軸と、その軸の群のスレッド数を述べ、その軸の差し渡しを取る入口へ移る必要があることを述べます。

3つの差し渡しを取る入口は変わりません。xyz を渡して断られた場合は、これまでどおりその引数の名前を報告します。

Verification / 検証

名指しの規範

srcArgumentException の送出を全数で分けました。呼び出しが複数行にまたがるので、括弧の釣り合いで読んでいます。

件数
引数を名指しする 105
名指ししない 1

名指ししない1件は ArrayPoolBinaryWriter の内部の不変条件で、利用者の引数を検査するものではありません。利用者に見える経路で名前を持たない形は、この木に前例がありません。

引数の値ではなく引数の性質が食い違う場合にその引数を名指しするのは、.NET の標準の形でもあります。Array.Copy は階数が違うとき sourceArray を名指しします。ここで食い違うのはシェーダーの群の大きさなので、名指しするのは shader です。

スイート

この枝の 1df697aa で測りました。判定は失敗した試験の名前で行い、失敗は0件です。

スイート 合計 失敗 成功 省略
ComputeWeave.Tests 4167 0 4115 52
ComputeWeave.Tests.SourceGenerators 528 0 528 0
ComputeWeave.D2D1.Tests 204 0 196 8
ComputeWeave.D2D1.Tests.SourceGenerators 225 0 225 0
ComputeWeave.Tests.Internals 1085 0 1085 0
ComputeWeave.D2D1.Tests.AssemblyLevelAttributes 4 0 4 0

ComputeWeave.Testsmain の4163件から4件増えているのは、足した2本が2つの装置で走るためです。他の5本は main と同じ値です。

ComputeWeave.Tests.GlobalStatements は要約を出さない工程で、終了コード0と Test passed successfully! を返します。解全体の建て直しは警告0、誤り0でした。

変異

名前を選ぶ判断を1つずつ壊しました。変異を当てない対照は失敗0件です。

壊した判断 結果
1引数の入口でも Y を引数として名指しする Y の行が2装置で落ちます
2引数の入口でも Z を引数として名指しする Z の行が2装置で落ちます
軸の名札を入れ替える 両方の行が2装置で落ちます
名前を渡さない形にする CS8625 で建ちません

最後の1つは試験ではなく型で守られています。名前を受け取る引数が string なので、名前を持たない形は署名を変えない限り書けません。

引数を実際に取る軸の行、つまり yz を名指しする既存の2本は、どの変異でも落ちていません。断りの範囲は広がっていません。

Notes / 補足

退けた設計

差し渡しを取らない軸へ、1ではなくその軸のスレッド数を渡す形を退けました。群が埋まるので断りは起きなくなりますが、DispatchSize のその軸が1から群の大きさへ変わり、余白のスレッドが本体を走ります。既存のシェーダーの意味を変えるので、名前の誤りを直すための変更としては大きすぎます。

名前を持たない ArgumentException を投げる形も退けました。課題の本文はこの形を挙げていますが、上の走査のとおり、この木では106件中1件しかない形です。課題を書いた時点では走査していませんでした。

実装の形

3つの差し渡しを取る内部の投入へ、呼ぶ側がいくつ書いたかを渡します。1引数と2引数の入口が固定する軸は、その数から分かります。断る条件も、報告する順序も、検査の位置も変えていません。

3つの軸は、それぞれ自分の剰余で守る対称な形にしました。X だけ差し渡しを取らない場合が無いので短く、その理由を注記に書いています。Z の剰余の検査は、そこへ到達する時点で必ず真ですが、規則をその場で読めるようにするために置いています。

軸を名指しする側と引数を名指しする側で、規則を述べる最初の文が同じなので、定数へ出しました。

測っていないこと

投入を伴わない工程での挙動は測っていません。この検査は投入の直前に走るので、装置が無い機械では試験そのものが走りません。

乖離台帳

ComputeContext は上流由来です。群を待つ投入を断る既存の行へ、差し渡しを取らない軸の名指しの規則と、名指しの規範を測った件数を書き足し、実装のコミットを引きました。行は増やしていません。監査は空です。

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

PRレビュー / PR review

変更 3 ファイル、コミット 3 件。 / 3 files, 3 commits.

検証の要否 / Verification required

以下を走らせ、失敗した試験の名前と失敗の様子を変更前と突き合わせてください。総数だけで判断しないでください。
Run the following and compare the names and failure modes against the same suites before your change. Do not judge by totals alone.

dotnet build ComputeWeave.sln -c Release -p:Platform=x64
dotnet test tests/ComputeWeave.Tests.SourceGenerators/ComputeWeave.Tests.SourceGenerators.csproj -c Release -p:Platform=x64
dotnet test tests/ComputeWeave.Tests.Internals/ComputeWeave.Tests.Internals.csproj -c Release -p:Platform=x64
dotnet test tests/ComputeWeave.Tests/ComputeWeave.Tests.csproj -c Release -p:Platform=x64
dotnet test tests/ComputeWeave.Tests.DeviceLost/ComputeWeave.Tests.DeviceLost.csproj -c Release -p:Platform=x64

確認できた点 / Confirmed

  • 概要が書かれています。 / A summary is present.
  • 検証の結果が書かれています。 / Verification results are present.
  • 関連する課題が示されています。 / A linked issue is referenced.
  • 実装と検証テストが別のコミットに分かれています。 / Implementation and tests are in separate commits.

これは自動の確認で、査読の代わりにはなりません。指摘は判断の材料であって、従う義務はありません。
This is an automated check, not a substitute for review. Findings are input to a decision, not obligations.

@routersys routersys added bug Something isn't working / 不具合が起きている behavior change Behavior change with no API change / API変更を伴わない挙動の変更 labels Sep 7, 2026
@routersys
routersys force-pushed the dev/ComputeWeave.FixedAxisReport branch from 3d028a6 to e847789 Compare September 7, 2026 04:41
@routersys
routersys force-pushed the dev/ComputeWeave.FixedAxisReport branch from e847789 to 05c6f4b Compare September 7, 2026 04:48
@routersys
routersys force-pushed the dev/ComputeWeave.FixedAxisReport branch from 05c6f4b to 1df697a Compare September 7, 2026 05:20
@routersys routersys changed the title 差し渡しを取らない軸の断りから引数名を外す 差し渡しを取らない軸の断りをシェーダーへ向ける Sep 7, 2026
@routersys
routersys merged commit 7537e26 into main Sep 7, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

behavior change Behavior change with no API change / API変更を伴わない挙動の変更 bug Something isn't working / 不具合が起きている

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 差し渡しを取らない軸の断りが、呼び出しに無い引数を名指しする

1 participant