Operation state cooperation that goes through uncustomized sender layers (sort of forwarding environment)
まだ誰も着手していません。
評価
調査の方向性
まず、customized when_all と exec::fork_join に関係する operation-state と receiver-environment の動作を読み、途中のレイヤーがどのように get_node() を隠しているかも確認します。ひし形の Graph の例と fork_join の例を比較します。完了には、転送レイヤーを通じて predecessor の状態にアクセスするための、合意された一般的な仕組みが必要です。
索引モデルが issue の本文から書いたものです。
説明
We are currently working (with @maartenarnst) on a customization for a scheduler that builds a Kokkos::Experimental::Graph under the hood.
To add a node to a Kokkos::Experimental::Graph, we need to know its predecessor(s).
Here’s an example of a diamond-shaped Kokkos::Experimental::Graph:
auto root = graph.get_root();
auto A = root.then(...);
auto B = A.then(...);
auto C = A.then(...);
auto D = Kokkos::Experimental::when_all(std::move(B), std::move(C)).then(...);
Conceptually, we’d like this to naturally translate to something like the following using exec::fork_join:
stdexec::sync_wait(
stdexec::schedule(graph_scheduler)
| then(...A...)
| exec::fork_join(
stdexec::on(graph_scheduler, ...B...),
stdexec::on(graph_scheduler, ...C...))
| then(...D...)
);
As mentioned, we need the predecessor(s) in order to add a new node to the graph. We create the node in the operation state.
We have already customized when_all, but we are now running into what feels like a limitation (or at least an awkward spot — or something I'm missing) in the std::execution framework:
There is no built-in mechanism to propagate information from inner to outer operation states.
In our example, A is the innermost node. How would B or C query the node created by A? Obviously (?), this cannot be done through the receiver’s environment, which only propagates information upstream from B/C to A.
Currently, we rely on the fact that the operation states of our customizations provide a get_node() member function. However, this approach breaks when exec::fork_join introduces intermediate layers between A and B/C, because those intermediate layers hide the underlying operation states.
One potential solution would be to make exec::fork_join itself customizable to forward this information. But we feel like the problem could be more general than just ours, so we wonder how more experienced people would handle it 😉
Any suggestion is appreciated !
- 主要言語
- C++
- スター
- 2.4k
- フォーク
- 270
- 平均マージ
- 2日 17時間
- マージ済み PR(30日)
- 37
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NVIDIA/stdexec のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 66/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 74/100
似ている issue
-
ai_reviewed
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
ydb-platform/ydb#53869 · コメント 3 件 ·
-
bug cert blocker needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
project-chip/connectedhomeip#74373 ·
-
upstream update
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
conan-io/conan-center-index#31035 ·
-
Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
vllm-project/vllm-ascend#17329 ·