処理のチャンク分割
負荷が均等になるよう範囲を分割します
「処理のチャンク分割」はCoddyKit上の無料Mojo Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMojo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Mojo Academyコースには全4レッスンが含まれています。
なぜチャンクに分けるのか
要素ごとにスレッドを起動するのは非効率です。代わりに、範囲をいくつかの大きなチャンクに分け、各ワーカーに1つずつ割り当てます。
チャンクはスライス
各チャンクは、0から99や100から199のような、インデックスの連続したスライスです。1つのワーカーが1つのスライスを担当します。
チャンク数を選ぶ
一般的には、コアごとに1つのチャンクを割り当てます。num_physical_coresを使って、その数をマシンに問い合わせます。
var workers = num_physical_cores()チャンクサイズを計算する
全体の長さをワーカー数で割ると、各ワーカーが処理する項目数を求められます。
var chunk = (n + workers - 1) // workersチャンクの開始位置を求める
処理関数内では、チャンクのインデックスから開始位置がわかります。その値にチャンクのサイズを掛けます。
var start = c * chunk末尾を制限する
最後のチャンクはデータの範囲を超える場合があるため、範囲内に収まるよう、minで末尾を全体の長さに制限します。
var end = min(start + chunk, n)チャンク内をループする
各ワーカーは、自分の範囲だけを通常のループで処理します。チャンク内では、通常のコードを実行します。
for i in range(start, end):
out[i] = heavy(i)チャンクに対してparallelizeを使う
ここでは、要素数ではなくチャンク数を指定してparallelizeを呼び出します。各呼び出しが1つのチャンク全体を処理します。
parallelize[do_chunk](workers)負荷を分散する
同じ大きさのチャンクにすると、すべてのコアを均等に使えます。1つのチャンクだけが大幅に大きいと、そのワーカーの完了が遅くなります。
コア数より多くのチャンクを使う
項目によって処理コストが異なる場合は、より多くの小さなチャンクを使うと、処理の速いワーカーが追加の仕事を引き受け、稼働し続けられます。
測定して調整する
最適なチャンク数は、データとマシンによって異なります。いくつかのサイズを試し、ベンチマークで最もよい結果になったものを選びます。
簡単な確認
長さnの配列を、ワーカーごとに1つのチャンクへ分割します。
まとめ
範囲をバランスの取れたチャンクに分け、各末尾をminで制限し、チャンク内をループします。そしてチャンク数を指定してparallelizeを呼び出し、負荷を均等にします。 🚀
よくある質問
「処理のチャンク分割」レッスンは無料ですか?
はい。「処理のチャンク分割」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Mojo Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Mojo Academyコースには全4レッスンが含まれています。
「処理のチャンク分割」で何を学びますか?
負荷が均等になるよう範囲を分割します ブラウザで直接実行するハンズオンコードでMojo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Mojo Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMojo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「処理のチャンク分割」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMojo Academyレッスンでコードを書いて実行できますか?
はい。すべてのMojo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。