200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2025-08-31T12:40:16 ">
204- 2025年08月31日 12時40分16秒
203+ < span itemprop ="datePublished " content ="2026-05-10T16:31:55 ">
204+ 2026年05月10日 16時31分55秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
208- < span itemprop ="name "> Raclamusi </ span >
208+ < span itemprop ="name "> yoh </ span >
209209 </ span >
210210 が更新
211211 </ small > </ p >
@@ -252,10 +252,32 @@ <h2>クラス仕様</h2>
252252< li > < code > r.set_stopped()</ code > は、< code > < a href ="set_stopped.html "> set_stopped</ a > (std::move(rcvr))</ code > と同じ効果。</ li >
253253</ ul >
254254< p > プロキシ< code > r</ code > に対する事前確保バックエンドストレージ(preallocated backend storage)は、< code > < a href ="../../span/span.html "> span</ a > << a href ="../../cstddef/byte.html "> byte</ a > ></ code > 型のオブジェクト< code > s</ code > であり、< code > r</ code > に対して< code > < a href ="set_value.html "> set_value</ a > </ code > /< code > < a href ="set_error.html "> set_error</ a > </ code > /< code > < a href ="set_stopped.html "> set_stopped</ a > </ code > いずれかが呼び出されるまで範囲< code > s</ code > は有効かつ上書き可能である。</ p >
255- < p > 呼び出し可能オブジェクト< code > f</ code > と引数< code > arg</ code > を持つ< code > rcvr</ code > のバルクチャンク化プロキシ(bulk chunked proxy)は、基底
256- < code > < a href ="system_context_replaceability/bulk_item_receiver_proxy.html "> system_context_replaceability::bulk_item_receiver_proxy</ a > </ code > を持つ< code > rcvr</ code > のプロキシ< code > r</ code > であり、インデクス< code > i</ code > , < code > j</ code > に対する< code > r.execute(i, j)</ code > は< code > f(i, j, args...)</ code > と同じ効果を持つ。</ p >
257- < p > 呼び出し可能オブジェクト< code > f</ code > と引数< code > arg</ code > を持つ< code > rcvr</ code > のバルク非チャンク化プロキシ(bulk unchunked proxy)は、基底
258- < code > < a href ="system_context_replaceability/bulk_item_receiver_proxy.html "> system_context_replaceability::bulk_item_receiver_proxy</ a > </ code > を持つ< code > rcvr</ code > のプロキシ< code > r</ code > であり、インデクス< code > i</ code > に対する< code > r.execute(i, i + 1)</ code > は< code > f(i, args...)</ code > と同じ効果を持つ。</ p >
255+ < p > 式< code > < a href ="get_domain.html "> get_domain</ a > (sch)</ code > は、下記と等価な説明専用の型< code > parallel-scheduler-domain</ code > の式を返す。</ p >
256+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> struct</ span > < span class ="w "> </ span > < span class ="nc "> parallel</ span > < span class ="o "> -</ span > < span class ="n "> scheduler</ span > < span class ="o "> -</ span > < span class ="n "> domain</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
257+ < span class ="w "> </ span > < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="sender-for.html "> sender-for</ a > </ span > < span class ="o "> <</ span > < span class ="n "> bulk_chunked_t</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> Sndr</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../queryable.html "> queryable</ a > </ span > < span class ="w "> </ span > < span class ="n "> Env</ span > < span class ="o "> ></ span >
258+ < span class ="w "> </ span > < span class ="k "> static</ span > < span class ="w "> </ span > < span class ="k "> constexpr</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../lang/cpp14/decltype_auto.html "> decltype(auto)</ a > </ span >
259+ < span class ="w "> </ span > < span class ="n "> transform_sender</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="set_value.html "> set_value_t</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Sndr</ span > < span class ="o "> &&</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> const</ span > < span class ="w "> </ span > < span class ="n "> Env</ span > < span class ="o "> &</ span > < span class ="w "> </ span > < span class ="n "> env</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="k "> const</ span > < span class ="w "> </ span > < span class ="k "> noexcept</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
260+ < span class ="w "> </ span > < span class ="k "> return</ span > < span class ="w "> </ span > < span class ="n "> < i > see below</ i > </ span > < span class ="p "> ;</ span >
261+ < span class ="w "> </ span > < span class ="p "> }</ span >
262+ < span class ="w "> </ span > < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="sender-for.html "> sender-for</ a > </ span > < span class ="o "> <</ span > < span class ="n "> bulk_unchunked_t</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> Sndr</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../queryable.html "> queryable</ a > </ span > < span class ="w "> </ span > < span class ="n "> Env</ span > < span class ="o "> ></ span >
263+ < span class ="w "> </ span > < span class ="k "> static</ span > < span class ="w "> </ span > < span class ="k "> constexpr</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../lang/cpp14/decltype_auto.html "> decltype(auto)</ a > </ span >
264+ < span class ="w "> </ span > < span class ="n "> transform_sender</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="set_value.html "> set_value_t</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Sndr</ span > < span class ="o "> &&</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> const</ span > < span class ="w "> </ span > < span class ="n "> Env</ span > < span class ="o "> &</ span > < span class ="w "> </ span > < span class ="n "> env</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="k "> const</ span > < span class ="w "> </ span > < span class ="k "> noexcept</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
265+ < span class ="w "> </ span > < span class ="k "> return</ span > < span class ="w "> </ span > < span class ="n "> < i > see below</ i > </ span > < span class ="p "> ;</ span >
266+ < span class ="w "> </ span > < span class ="p "> }</ span >
267+ < span class ="p "> };</ span >
268+ </ code > </ pre > </ div >
269+ </ p >
270+ < p > 上記< code > transform_sender</ code > の引数< code > sndr</ code > に対して、説明用の変数< code > child</ code > , < code > pol</ code > , < code > shape</ code > , < code > f</ code > を下記の通り宣言する。</ p >
271+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="o "> &</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="n "> _</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> child</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> ;</ span >
272+ < span class ="k "> auto</ span > < span class ="o "> &</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="n "> pol</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> shape</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> f</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> data</ span > < span class ="p "> ;</ span >
273+ </ code > </ pre > </ div >
274+ </ p >
275+ < p > 説明用の< code > p</ code > を下記とする。</ p >
276+ < ul >
277+ < li > 式< code > pol</ code > の型が< a class ="cpprefjp-defined-word " data-desc ="型をconstおよび・もしくはvolatileで修飾すること "> CV修飾</ a > された< code > < a href ="execution_policy.html "> parallel_policy</ a > </ code > または< code > < a href ="execution_policy.html "> parallel_unsequenced_policy</ a > </ code > のとき、< code > true</ code > 。</ li >
278+ < li > < code > pol</ code > が< a class ="cpprefjp-defined-word " data-desc ="処理系定義の動作。処理系によって事前に定めた動作をする " href ="../../../implementation-compliance.html#dfn-implementation-defined-behavior "> 処理系定義</ a > の< a href ="execution_policy.html "> 実行ポリシー</ a > のとき、< a class ="cpprefjp-defined-word " data-desc ="処理系定義の動作。処理系によって事前に定めた動作をする " href ="../../../implementation-compliance.html#dfn-implementation-defined-behavior "> 処理系定義</ a > の値。</ li >
279+ < li > そうでなければ、< code > false</ code > 。</ li >
280+ </ ul >
259281< h3 > < code > schedule</ code > アルゴリズム</ h3 >
260282< p > 説明用の< code > b</ code > を< code > BACKEND-OF(sch)</ code > 、< code > sndr</ code > を< code > < a href ="schedule.html "> schedule</ a > (sch)</ code > が返すオブジェクト、< code > rcvr</ code > を< a href ="receiver.html "> Receiver</ a > とする。< code > rcvr</ code > が< code > sndr</ code > に< a href ="connect.html "> 接続(connect)</ a > され、結果の< a href ="operation_state.html "> Operation State</ a > が< a href ="start.html "> 開始(start)</ a > されたとき、</ p >
261283< ul >
@@ -267,20 +289,20 @@ <h3><code>schedule</code>アルゴリズム</h3>
267289< li > 他の全ての完了操作は、変更なしに転送される。</ li >
268290</ ul >
269291< h3 > < code > bulk_chunked</ code > アルゴリズム</ h3 >
270- < p > < code > parallel_scheduler </ code > は < code > < a href ="bulk_chunked .html "> bulk_chunked </ a > < /code > アルゴリズムのカスタマイズ実装を提供する。 < a href ="receiver.html "> Receiver</ a > < code > rcvr</ code > が < code > bulk_chunked(sndr, pol, shape, f) </ code > が返す < a href ="sender.html " > Sender </ a > に < a href =" connect.html "> 接続(connect)</ a > され、結果の < a href ="operation_state.html "> Operation State</ a > が< a href ="start.html "> 開始(start)</ a > されたとき、</ p >
292+ < p > タグ < code > bulk_chunked </ code > と < a href ="sender .html "> Sender </ a > を受け付ける < code > transform_sender < /code > < a class =" cpprefjp-defined-word " data-desc =" 同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合 " > オーバーロード </ a > は、 < a href ="receiver.html "> Receiver</ a > < code > rcvr</ code > と < a href ="connect.html "> 接続(connect)</ a > され結果の < a href ="operation_state.html "> Operation State</ a > が< a href ="start.html "> 開始(start)</ a > されたとき、下記動作を行うSenderを返す。 </ p >
271293< ul >
272- < li > < code > sndr </ code > が値< code > vals</ code > で値完了するならば、< code > args</ code > を< code > vals</ code > を指す左辺値式のパックとして、< code > < a href ="system_context_replaceability/parallel_scheduler_backend/schedule_bulk_chunked.html "> b.schedule_bulk_chunked</ a > (shape, r, s)</ code > が呼ばれる。このとき、< ul >
273- < li > < code > r</ code > は呼び出し可能オブジェクト < code > f </ code > と引数 < code > arg </ code > を持つ< code > rcvr</ code > のバルクチャンク化プロキシであり、 かつ</ li >
294+ < li > < code > child </ code > が値< code > vals</ code > で値完了するならば、< code > args</ code > を< code > vals</ code > を指す左辺値式のパックとして、< code > < a href ="system_context_replaceability/parallel_scheduler_backend/schedule_bulk_chunked.html "> b.schedule_bulk_chunked</ a > (p ? shape : 1 , r, s)</ code > が呼ばれる。このとき、< ul >
295+ < li > < code > r</ code > は基底クラス < code > < a href =" system_context_replaceability/bulk_item_receiver_proxy.html " > system_context_replaceability::bulk_item_receiver_proxy </ a > </ code > を持つ< code > rcvr</ code > のプロキシであり、インデックス < code > i </ code > , < code > j </ code > に対して < code > r.execute(i, j) </ code > は < code > p </ code > が < code > true </ code > のとき < code > f(i, j, args...) </ code > 、そうでないときは < code > f(0, shape, args...) </ code > と等価な効果を持つ。 かつ</ li >
274296< li > < code > s</ code > は< code > r</ code > に対する事前確保バックエンドストレージである。</ li >
275297</ ul >
276298</ li >
277299< li > 他の全ての完了操作は、変更なしに転送される。</ li >
278300</ ul >
279301< h3 > < code > bulk_unchunked</ code > アルゴリズム</ h3 >
280- < p > < code > parallel_scheduler </ code > は < code > < a href ="bulk_unchunked .html "> bulk_unchunked </ a > < /code > アルゴリズムのカスタマイズ実装を提供する。 < a href ="receiver.html "> Receiver</ a > < code > rcvr</ code > が < code > bulk_unchunked(sndr, pol, shape, f) </ code > が返す < a href ="sender.html " > Sender </ a > に < a href =" connect.html "> 接続(connect)</ a > され、結果の < a href ="operation_state.html "> Operation State</ a > が< a href ="start.html "> 開始(start)</ a > されたとき、</ p >
302+ < p > タグ < code > bulk_unchunked </ code > と < a href ="sender .html "> Sender </ a > を受け付ける < code > transform_sender < /code > < a class =" cpprefjp-defined-word " data-desc =" 同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合 " > オーバーロード </ a > は、 < a href ="receiver.html "> Receiver</ a > < code > rcvr</ code > と < a href ="connect.html "> 接続(connect)</ a > され結果の < a href ="operation_state.html "> Operation State</ a > が< a href ="start.html "> 開始(start)</ a > されたとき、下記動作を行うSenderを返す。 </ p >
281303< ul >
282- < li > < code > sndr </ code > が値< code > vals</ code > で値完了するならば、< code > args</ code > を< code > vals</ code > を指す左辺値式のパックとして、< code > < a href ="system_context_replaceability/parallel_scheduler_backend/schedule_bulk_unchunked.html "> b.schedule_bulk_unchunked</ a > (shape, r, s)</ code > が呼ばれる。このとき、< ul >
283- < li > < code > r</ code > は呼び出し可能オブジェクト < code > f </ code > と引数 < code > arg </ code > を持つ< code > rcvr</ code > のバルク非チャンク化プロキシであり、 かつ</ li >
304+ < li > < code > child </ code > が値< code > vals</ code > で値完了するならば、< code > args</ code > を< code > vals</ code > を指す左辺値式のパックとして、< code > < a href ="system_context_replaceability/parallel_scheduler_backend/schedule_bulk_unchunked.html "> b.schedule_bulk_unchunked</ a > (p ? shape : 1 , r, s)</ code > が呼ばれる。このとき、< ul >
305+ < li > < code > r</ code > は基底クラス < code > < a href =" system_context_replaceability/bulk_item_receiver_proxy.html " > system_context_replaceability::bulk_item_receiver_proxy </ a > </ code > を持つ< code > rcvr</ code > のプロキシであり、インデックス < code > i </ code > に対して < code > r.execute(i, i + 1) </ code > は < code > p </ code > が < code > true </ code > のとき < code > f(i, args...) </ code > 、そうでないときは < code > for (decltype(shape) i = 0; i < shape; i++) { f(i, args...); } </ code > と等価な効果を持つ。 かつ</ li >
284306< li > < code > s</ code > は< code > r</ code > に対する事前確保バックエンドストレージである。</ li >
285307</ ul >
286308</ li >
@@ -321,6 +343,7 @@ <h2>参照</h2>
321343< ul >
322344< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html " target ="_blank "> P2300R10 < code > std::execution</ code > </ a > </ li >
323345< li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2079r10.html " target ="_blank "> P2079R10 Parallel scheduler</ a > </ li >
346+ < li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3804r2.html " target ="_blank "> P3804R2 Iterating on < code > parallel_scheduler</ code > </ a > </ li >
324347</ ul > </ div >
325348
326349 </ div >
0 commit comments