(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-10
(45)【発行日】2022-08-19
(54)【発明の名称】処理タスクを実行するための方法、装置、デバイス、および記憶媒体
(51)【国際特許分類】
G06F 9/48 20060101AFI20220812BHJP
G06F 9/50 20060101ALI20220812BHJP
【FI】
G06F9/48 300C
G06F9/50 150B
【外国語出願】
(21)【出願番号】P 2019238897
(22)【出願日】2019-12-27
【審査請求日】2020-02-14
(31)【優先権主張番号】201910859334.7
(32)【優先日】2019-09-11
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】517323290
【氏名又は名称】バイドゥドットコム タイムズ テクノロジー (ベイジン) カンパニー リミテッド
【氏名又は名称原語表記】Baidu.com Times Technology (Beijing) Co., Ltd.
【住所又は居所原語表記】2/F A2 Zhongguancun Software Park 17th building, No.8, Dongbeiwang West Road, Haidian District, Beijing 100080, China
(73)【特許権者】
【識別番号】516357421
【氏名又は名称】バイドゥ ユーエスエイ エルエルシー
【氏名又は名称原語表記】Baidu USA LLC
(74)【代理人】
【識別番号】100105924
【氏名又は名称】森下 賢樹
(73)【特許権者】
【識別番号】521457387
【氏名又は名称】クンルンシン テクノロジー (ベイジン) カンパニー リミテッド
【氏名又は名称原語表記】Kunlunxin Technology (Beijing) Company Limited
【住所又は居所原語表記】CW Section, F/4, Building 1, No.10, Shangdi 10th Street, Haidian District, 100101, Beijing, China
(72)【発明者】
【氏名】チェン、キンシュ
(72)【発明者】
【氏名】ジャオ、ジビアオ
(72)【発明者】
【氏名】ヂュ、ホーフェイ
(72)【発明者】
【氏名】ゴン、シャオチャン
(72)【発明者】
【氏名】ワン、ヨン
(72)【発明者】
【氏名】オウヤン、ジアン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特表2016-537717(JP,A)
【文献】特開2006-048696(JP,A)
【文献】特開2007-200295(JP,A)
【文献】FUJITSU Software Interstage Big Data Parallel Processing Server V1.2.2 ユーザーズガイド,[online],富士通株式会社,2018年04月,第190頁-第211頁,https://software.fujitsu.com/jp/manual/manualfiles/m180003/j2ul1563/06z200/j2ul-1563-06z0.pdf,[令和3年4月22日検索],インターネット<URL:https://software.fujitsu.com/jp/manual/manualfiles/m180003/j2ul1563/06z200/j2ul-1563-06z0.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
処理タスクを実行する方法であって、
前記処理タスクを複数の部分に分けることであって、各部分は複数の処理ユニットのうちの1つの処理ユニットにおいて実行されるべき動作のセットを含み、前記動作のセットは第1のタイプの動作と第2のタイプの動作とを含み、前記第1のタイプの動作は累積動作を含み、前記第2のタイプの動作はコピー動作を含む、ことと、
前記第1のタイプの動作を実行するための第1のキューと、前記第2のタイプの動作を実行するための第2のキューとをそれぞれ作成することと、
前記処理タスクの定義に基づいて、前記処理ユニットにおいて実行されるべき前記動作のセットと、前記複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの間の依存関係を取得することであって、前記依存関係は順次実行関係と並行実行関係とを含む、ことと、
前記依存関係が順次実行関係である場合、前記複数の処理ユニットにおいて前記第1のキューにおける動作を順次実行することと、
前記依存関係が並行実行関係である場合、前記複数の処理ユニットにおいて前記第2のキューにおける動作を並行実行することと、を含む処理タスクを実行する方法。
【請求項2】
前記第1のタイプの動作の第1の動作のセットを実行するための第1のコードと、前記第2のタイプの動作の第2の動作のセットを実行するための第2のコードとをそれぞれ前記処理ユニットにロードすることをさらに含み、
前記依存関係が順次実行関係である場合、前記複数の処理ユニットにおいて前記第1のキューにおける動作を順次実行することは、前記第1のコードに基づいて前記第1のキューにおける動作を実行することを含み、
前記依存関係が並行実行関係である場合、前記複数の処理ユニットにおいて前記第2のキューにおける動作を並行実行することは、前記第2のコードに基づいて前記第2のキューにおける動作を実行することを含む、請求項1に記載の方法。
【請求項3】
前記処理ユニットのメモリに前記第1のコードと前記第2のコードのうちの少なくともいずれかをそれぞれ保持することをさらに含む請求項2に記載の方法。
【請求項4】
前記処理ユニットにおいて、前記処理タスクの処理対象データのうちの、前記処理ユニットにおいて処理されるべき、前記複数の処理ユニットの数に応じて前記処理対象データを分割して得られたデータブロックを受信することをさらに含み、
前記処理ユニットにおいて前記第1のキューにおける動作と前記第2のキューにおける動作とをそれぞれ実行することは、前記処理ユニットにおいて前記データブロックに対して前記第1のキューにおける動作と前記第2のキューにおける動作とをそれぞれ実行することを含む請求項1に記載の方法。
【請求項5】
前記処理タスクはオールリデュースタスクであり、前記複数の処理ユニットはループ状に接続されており、
前記第1のタイプの動作は、前記処理ユニットの前に接続された前の処理ユニットから前記処理ユニットにコピーされた累積結果に前記処理ユニットにおけるデータブロックを累積して前記処理ユニットの累積結果とするための累積動作を含み、
前記第2のタイプの動作は、前記処理ユニットの後に接続された次の処理ユニットに前記処理ユニットにおけるデータブロックと累積結果のうちの少なくともいずれかをコピーするためのコピー動作を含む請求項4に記載の方法。
【請求項6】
前記処理ユニットにおいて前記第1のキューと前記第2のキューのいずれかにおける動作が完了したことに応答して、前記処理ユニットのハードウェア割り込みを利用して前記他の処理ユニットに通知することを含む請求項5に記載の方法。
【請求項7】
前記処理ユニットにおいて前記第1のキューと前記第2のキューのいずれかにおける動作が完了したことに対応して、前記処理ユニットのハードウェア割り込みを利用して前記他の処理ユニットに通知することは、
前記処理ユニットにおいて第1のキューにおける1つの累積動作が実行されたことに対応して、前記ハードウェア割り込みに基づいて、前記第2のキューにおける次のコピー動作を実行するように前記前の処理ユニットに通知することを含む請求項6に記載の方法。
【請求項8】
前記処理ユニットにおいて前記第1のキューと前記第2のキューのいずれかにおける動作が完了したことに対応して、前記処理ユニットのハードウェア割り込みを利用して前記他の処理ユニットに通知することは、
前記処理ユニットにおいて前記第2のキューにおける1つのコピー動作が実行されたことに対応して、前記ハードウェア割り込みに基づいて、前記第1のキューにおける次の累積動作を実行するように前記次の処理ユニットに通知することを含む請求項6に記載の方法。
【請求項9】
前記処理ユニットと前記次の処理ユニットはキャッシュ領域を共有し、
前記処理ユニットにおいて前記コピー動作を実行することは、前記処理ユニットから前記キャッシュ領域に前記累積結果をコピーすることを含む請求項8に記載の方法。
【請求項10】
前記処理ユニットにおいて前記第1のキューと前記第2のキューにおける動作がすべて実行されていると判断されたことに対応して、前記処理ユニットが前記処理タスクのうちの前記部分を実行したことを報告することをさらに含む請求項1に記載の方法。
【請求項11】
処理タスクを実行する装置であって、
前記処理タスクを複数の部分に分けるように構成された
処理タスク分けモジュールであって、各部分は複数の処理ユニットのうちの1つの処理ユニットにおいて実行されるべき動作のセットを含み、前記動作のセットは第1のタイプの動作と第2のタイプの動作とを含み、前記第1のタイプの動作は累積動作を含み、前記第2のタイプの動作はコピー動作を含む、
処理タスク分けモジュールと、
前記第1のタイプの動作を実行するための第1のキューと、前記第2のタイプの動作を実行するための第2のキューとをそれぞれ作成するように構成された
キュー作成モジュールと、
前記処理タスクの定義に基づいて、前記処理ユニットにおいて実行されるべき前記動作のセットと、前記複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの間の依存関係を取得するように構成された
依存関係取得モジュールであって、前記依存関係は順次実行関係と並行実行関係とを含む、
依存関係取得モジュールと、
前記依存関係が順次実行関係である場合、前記複数の処理ユニットにおいて前記第1のキューにおける動作を順次実行し、前記依存関係が並行実行関係である場合、前記複数の処理ユニットにおいて前記第2のキューにおける動作を並行実行するように構成された
動作実行モジュールと、を含む処理タスクを実行する装置。
【請求項12】
前記第1のタイプの動作を実行するための第1のコードと、前記第2のタイプの動作を実行するための第2のコードとをそれぞれ前記処理ユニットにロードするように構成されたロードモジュールをさらに含み、
前記
動作実行モジュールは、
前記第1のコードに基づいて前記第1のキューにおける動作を実行するように構成された第1の実行モジュールと、
前記第2のコードに基づいて前記第2のキューにおける動作を実行するように構成された第2の実行モジュールと、を含む請求項11に記載の装置。
【請求項13】
前記処理ユニットのメモリに前記第1のコードと前記第2のコードのうちの少なくともいずれかをそれぞれ保持するように構成された保持モジュールをさらに含む請求項12に記載の装置。
【請求項14】
前記処理ユニットにおいて、前記処理タスクの処理対象データのうちの、前記処理ユニットにおいて処理されるべき、前記複数の処理ユニットの数に応じて前記処理対象データを分割して得られたデータブロックを受信するように構成された受信モジュールをさらに含み、
前記
動作実行モジュールは、前記処理ユニットにおいて前記データブロックに対して前記第1のキューにおける動作と前記第2のキューにおける動作とをそれぞれ実行するように構成されたデータ処理モジュールをさらに含む請求項11に記載の装置。
【請求項15】
前記処理タスクはオールリデュースタスクであり、前記複数の処理ユニットはループ状に接続されており、
前記第1のタイプの動作は、前記処理ユニットの前に接続された前の処理ユニットから前記処理ユニットにコピーされた累積結果に前記処理ユニットにおけるデータブロックを累積して前記処理ユニットの累積結果とするための累積動作を含み、
前記第2のタイプの動作は、前記処理ユニットの後に接続された次の処理ユニットに前記処理ユニットにおけるデータブロックと累積結果のうちの少なくともいずれかをコピーするためのコピー動作を含む請求項14に記載の装置。
【請求項16】
前記
動作実行モジュールは、前記処理ユニットにおいて前記第1のキューと前記第2のキューのいずれかにおける動作が完了したことに応答して、前記処理ユニットのハードウェア割り込みを利用して前記他の処理ユニットに通知するように構成された通知モジュールを含む請求項15に記載の装置。
【請求項17】
前記通知モジュールは、前記処理ユニットにおいて第1のキューにおける1つの累積動作が実行されたことに対応して、前記ハードウェア割り込みに基づいて、前記第2のキューにおける次のコピー動作を実行するように前記前の処理ユニットに通知するように構成された第1の通知モジュールを含む請求項16に記載の装置。
【請求項18】
前記通知モジュールは、前記処理ユニットにおいて前記第2のキューにおける1つのコピー動作が実行されたことに対応して、前記ハードウェア割り込みに基づいて、前記第1のキューにおける次の累積動作を実行するように前記次の処理ユニットに通知するように構成された第2の通知モジュールを含む請求項16に記載の装置。
【請求項19】
前記処理ユニットと前記次の処理ユニットはキャッシュ領域を共有し、
前記装置は、前記処理ユニットから前記キャッシュ領域に前記データブロックと累積結果のうちの少なくともいずれかをコピーするように構成されたコピーモジュールをさらに含む請求項18に記載の装置。
【請求項20】
前記処理ユニットにおいて前記第1のキューと前記第2のキューにおける動作がすべて実行されていると判断されたことに対応して、前記処理ユニットが前記処理タスクのうちの前記部分を実行したことを報告するように構成された報告モジュールをさらに含む請求項11に記載の装置。
【請求項21】
請求項1~10のいずれか1項に記載の方法を実行するための1つまたは複数のプロセッサと、
請求項1~10のいずれか1項に記載の方法を実行する1つまたは複数のプログラムを格納するための記憶装
置と、を備える処理タスクを実行するデバイス。
【請求項22】
コンピュータプログラムが格納されているコンピュータ可読記憶媒体であって、
前記コンピュータプログラムは、プロセッサによって実行されると、請求項1~10のいずれか1項に記載の方法を実施するコンピュータ可読記憶媒体。
【請求項23】
コンピュータプログラムであって、
前記コンピュータプログラムがプロセッサにより実行されると、請求項1~10のいずれか1項に記載の方法を実現する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施形態は、主に処理タスクに関し、より具体的には、複数の処理ユニットにおいて処理タスクを分散方式で実行するための方法、装置、デバイス、およびコンピュータ記憶媒体に関する。
【背景技術】
【0002】
コンピュータ技術の発展に伴い、現在、分散処理方式が登場している。複数の処理ユニットを提供し、分散方式で複数の処理ユニットにおいて処理タスクを実行することができる。しかし、処理タスクが複雑になるにつれて、大量の処理ユニットが協調して動作する必要がある。このとき、複数の処理ユニットをどのようにスケジューリングして処理タスクをより効率的に処理するかは、1つの技術的難題となる。
【発明の概要】
【0003】
本開示の例示的な実施形態によれば、処理タスクを実行するための技術的解決手段が提供される。
【0004】
本開示の第1の態様において、処理タスクを実行する方法を提供する。処理タスクの複数の部分のうちの1つが複数の処理ユニットのうちの1つの処理ユニットにおいて実行される動作のセットを含み、動作のセットは第1のタイプの動作と第2のタイプの動作とを含む。該方法において、第1のタイプの動作を実行するための第1のキューと、第2のタイプの動作を実行するための第2のキューとをそれぞれ作成する。処理タスクの定義に基づいて、処理ユニットにおいて実行されるべき動作のセットと、複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの間の依存関係を取得する。依存関係に基づいて前記処理ユニットにおいて第1のキューにおける動作と第2のキューにおける動作とをそれぞれ実行する。
【0005】
本開示の第2の態様において、処理タスクを実行する装置を提供する。処理タスクの複数の部分のうちの1つが複数の処理ユニットのうちの1つの処理ユニットにおいて実行される動作のセットを含み、動作のセットは第1のタイプの動作と第2のタイプの動作とを含む。該装置は、第1のタイプの動作を実行するための第1のキューと、第2のタイプの動作を実行するための第2のキューとをそれぞれ作成するように構成された作成モジュールと、処理タスクの定義に基づいて、処理ユニットにおいて実行されるべき動作のセットと、複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの間の依存関係を取得するように構成された取得モジュールと、依存関係に基づいて処理ユニットにおいて第1のキューにおける動作と第2のキューにおける動作とをそれぞれ実行するように構成された実行モジュールと、を含む。
【0006】
本開示の第3の態様において、処理タスクを実行する設備を提供する。該設備は、1つまたは複数のプロセッサと、1つまたは複数のプログラムを格納するための記憶装置であって、1つまたは複数のプログラムが1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本開示の第1態様に記載の方法を実施させる記憶装置と、を備える。
【0007】
本開示の第4の態様において、コンピュータプログラムが格納されているコンピュータ可読記憶媒体であって、該プログラムがプロセッサによって実行されると、本開示の第1態様に記載の方法を実施するコンピュータ可読記憶媒体を提供する。
【0008】
発明の概要に記載されたものは、本開示の実施形態を限定するためのかなめまたは重要な特徴ではなく、本開示の範囲を制限するためのものではないことを理解されたい。本開示の他の特徴は、以下の説明により容易に理解できるであろう。
【図面の簡単な説明】
【0009】
図面を踏まえて以下の詳細な説明を参照すると、本開示の各実施形態の上記と他の特徴、利点および方法がより明らかになる。図面において、同一または類似の符号は、同一または類似の要素を表す。
【
図1A】
図1Aは、処理タスクが複数の処理ユニットによって実行されることを概略的に示すブロック図である。
【
図1B】
図1Bは、処理タスクが複数の処理ユニットによって実行された後の処理結果を概略的に示すブロック図である。
【
図2】
図2は、本開示の例示的な実施形態に係る、処理タスクを実行するための方法を概略的に示すブロック図である。
【
図3】
図3は、本開示の例示的な実施形態に係る、処理タスクを実行するための方法を概略的に示すフローチャートである。
【
図4】
図4は、本開示の例示的な実施形態に係る、複数の処理ユニット間のデータ配信を概略的に示すブロック図である。
【
図5】
図5は、本開示の例示的な実施形態に係る、複数の処理ユニットにおいて累積動作を実行することを概略的に示すブロック図である。
【
図6】
図6は、本開示の例示的な実施形態に係る、処理ユニットにコードをロードすることを概略的に示すブロック図である。
【
図7】
図7は、本開示の例示的な実施形態に係る、コピーキューにおけるコピー動作の完了後にハードウェア割り込みをトリガすることを概略的に示すブロック図である。
【
図8】
図8は、本開示の例示的な実施形態に係る、累積キューにおける累積動作の完了後にハードウェア割り込みをトリガすることを概略的に示すブロック図である。
【
図9】
図9は、本開示の例示的な実施形態に係る、処理タスクを実行するための装置を概略的に示すブロック図である。
【
図10】
図10は、本開示の様々な実施形態を実施できるコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【0010】
以下、本開示の実施形態について図面を参照しながらより詳細に説明する。本開示のいくつかの実施形態は図面に示されているが、本開示は様々な形態で実施されることができ、ここで説明された実施形態に限定されるものと解釈されるべきではない。本開示の内容をより詳細かつ完全に理解するために、これらの実施形態が提供されたわけである。本開示の図面および実施形態は、例示的な役割のみに使用され、本開示の保護範囲を制限するためのものではないことを理解されたい。
【0011】
本開示の実施形態の説明では、用語「…を含む」およびそれに類似する用語は、「…を含むがそれらに限定されない」という非限定の表現として理解されるべきである。用語「…に基づいて」は、「少なくとも部分的に…に基づいて」と理解されるべきである。用語「1つの実施形態」または「該実施形態」は、「少なくとも1つの実施形態」と理解されるべきである。用語「第1の」、「第2の」などは、異なるまたは同一の対象を指すことができる。以下では、他の明確か暗黙的な定義も含み得る。
【0012】
本開示のコンテキストでは、処理タスクは、処理対象データに対して累積動作を行うためのオールリデュース(All Reduce)タスクであり得る。複数の処理ユニット(例えば、GPU、AI専用チップなど)において処理タスクを実行することができる。例えば、複数の処理ユニットの数をnで表すことができる。説明を容易にするために、本開示のコンテキストでは、4つの処理ユニットにおいて処理タスクを実行する例を挙げて説明する。nの値はより大きいか小さい整数であってもよいことが言うまでもない。
【0013】
現在、オールリデュースを実行するための複数の技術的解決手段が提供されており、ループベースのオールリデュース方式では、処理対象データをn分割することができる。また、ループ状に接続されたn個の処理ユニットにおいてn個のデータをそれぞれ処理する。各処理ユニットは、自身の累積結果をループ内の次の処理ユニットに送信し、ループ内の前の処理ユニットから累積結果を受信する。
【0014】
以下では、まず、
図1Aと
図1Bを参照しながら、本開示の適用環境について説明する。
図1Aは、処理タスクが複数の処理ユニットによって実行されるブロック
図100Aを模式的に示す。
図1Aに示されるように、ループ状に接続された4つの処理ユニット110、120、130、140を用いて処理タスクを実行する。ここで、処理すべき処理対象データをMと仮定し、データMを4分割することができる。このとき、各データをM/4とする。各処理ユニットに処理対象データのそれぞれの処理対象データM/4をそれぞれ送信する。
【0015】
各処理ユニットのデータは平均で4分割され、i番目の処理ユニットはi番目のデータを次の処理ユニットにコピーする。各処理ユニットは、前の処理ユニットのデータを受信すると、ローカルの対応するデータと累積し、累積結果を次の処理ユニットにコピーする。次のラウンドでは、各処理ユニットは、前の処理ユニットの累積結果を待ち、受信した累積結果とローカルの対応するデータとを累積し、新たな累積結果を次の処理ユニットにコピーする。上記のステップは、各処理ユニットが一部分の完全な累積結果を有するまで繰り返される。次に、各処理ユニットは、自身の一部分の完全な累積結果を次の処理ユニットにコピーし、次の処理ユニットは、該部分の完全な累積結果を受信した後、また次の処理ユニットにコピーする。上記のステップは、各処理ユニットがすべての完全な累積結果を有するまで繰り返される。
【0016】
図1Bは、処理タスクが複数の処理ユニットによって実行された後の処理結果のブロック図を模式的に示す。上述したオールリデュースタスクが実行された後、各処理ユニット110、120、130、140のいずれもすべての完全な累積結果を有する。上述したプロセスを実行するために、n個の処理ユニットが協調して動作するように制御するためには、データの累積、コピーおよび受信をスケジューリングするための大量の通信リソースが必要であり、スケーラビリティが悪い。
【0017】
現在、両方向のループベースのオールリデュース方式も提案されており、該技術的解決手段では複数の処理ユニットを縦横2方向のループに分割している。しかしながら、この方式の各ステップ間では、より多くの通信オーバヘッドが必要であり、大規模なデータ処理に採用することは困難である。したがって、オールリデュースの処理タスクをより効率的に実施できる方式を提供することが望ましい。
【0018】
上記の技術的解決手段の欠陥を少なくとも部分的に解決するために、本開示の例示的な実施形態によって、処理タスクを実行するための技術的解決手段が提案されている。具体的には、本開示の例示的な実施形態は、処理ユニットにおいて異なるタイプの動作に対応する動作キューを作成できる動作キューの概念を提案している。そして、1つの処理ユニットにおいて実行される複数の動作と、他の処理ユニットにおいて実行される複数の動作との依存関係に基づいて、各動作キューにおける動作を処理ユニットにおいてそれぞれ実行することができる。これにより、処理タスクにおける該処理ユニットに割り当てられた部分を完了させることができる。以下では、本開示のプロセスについて、
図2を参照して概説する。
【0019】
図2は、本開示の例示的な実施形態による処理タスクを実行するためのブロック
図200を概略的に示す。説明を簡単にするために、
図2は、複数の処理ユニットのうちの2つの処理ユニットにおける処理のみを模式的に示している。処理ユニットのセットがn個の処理ユニットを含む場合、該処理タスク210をn個の部分に分割することができる。
図2に示されるように、処理タスク210は、複数の部分220、230などを含み、1つの処理ユニットを用いて処理タスク210の1つの部分を実行することができる。例えば、処理ユニット110により部分220を処理することができ、処理ユニット120により部分230を処理することができる。なお、以下では、説明を簡単にするために、処理ユニット110による部分220の実行のみを例に挙げて説明する。処理ユニット120による部分230の実行プロセスも同様である。
【0020】
ここで、各部分は、第1のタイプの動作と、第2のタイプの動作とを含む。例えば、部分220は、第1のタイプ222の動作と第2のタイプ224の動作とを含み得る。処理ユニット110においては、第1のタイプ222の動作を実行するための第1のキュー226と、第2のタイプ224の動作を実行するための第2のキュー228とを作成することができる。ここでは、動作のタイプに応じて、各動作を相応するキューにおいて各動作の実行順に従ってソートすることができる。
【0021】
そして、処理タスク210の定義に基づいて、処理ユニット110において実行されるべき動作のセットと、複数の処理ユニットのうちの他の処理ユニット120において実行されるべき動作のセットとの依存関係240を取得することができる。ここで、依存関係240とは、各動作を実行する順序である。例えば、処理ユニット110において実行されるべき動作の場合、データブロックを次の処理ユニットにコピーするコピー動作は、他の動作に依存しなくてもよい。一方、累積動作は、前の処理ユニットがデータブロックを処理ユニット110にコピーしたことに依存する。依存関係240を取得した場合、依存関係240に基づいて、処理ユニット110において第1のキュー226における動作と第2のキュー228における動作とをそれぞれ実行することができる。
【0022】
同様に、処理ユニット120の場合、処理ユニット120において実行されるようになった部分230は、第1のタイプ232の動作と、第2のタイプ234の動作とを含み得る。また、各タイプの動作を管理するために、第1のキュー236と第2のキュー238とをそれぞれ作成することができる。次に、依存関係240に基づいて、処理ユニット120において第1のキュー236における動作と第2のキュー238における動作とをそれぞれ実行することができる。本開示の技術的解決手段を採用し、キューと依存関係に基づいて複数の異なるタイプの動作の実行をスケジューリングすることにより、オールリデュースの並列性を大きく向上させることができ、実行期間中の様々な時間とリソースのオーバヘッドを低減することができる。さらに、本開示の技術的解決手段は、既存のオールリデュース方法と組み合わせることができる。
【0023】
以下、
図3を参照しながら、本開示の例示的な実施形態の詳細について説明する。
図3は、本開示の例示的な実施形態に係る、処理タスクを実行するための方法300のフローチャートを概略的に示す。ここで、処理タスク210における部分220は、処理ユニット110において実行される。ブロック310では、処理ユニットにおいて第1のタイプの動作を実行するための第1のキューと、第2のタイプの動作を実行するための第2のキューとをそれぞれ作成することができる。
【0024】
本開示の例示的な実施形態によれば、処理タスク210は、オールリデュースタスクであってもよく、複数の処理ユニットは、ループ状に接続されている。例えば、複数の処理ユニット110、120、130、140は、
図1Aに示されるように、前後順次ループ状に接続されていてもよい。また、例えば、複数の処理ユニットは縦横2方向に分割され、それぞれ2方向のループにおいて複数の処理ユニットが接続されている。
【0025】
処理タスク210によって処理されるべき処理対象データを複数のデータブロックに分割することができることは言うまでもない。例えば、処理タスク210がn個の処理ユニットによって実行されると仮定すると、処理対象データをn個のデータブロックに分割し、かつ対応するデータブロックを各処理ユニットにそれぞれ送信することができる。このとき、各処理ユニットにおいて、1つのデータブロックを受信することができ、該データブロックは、処理タスク210の処理対象データのうち、処理ユニットにおいて処理されるべき部分である。
【0026】
ここでは、説明を簡単にするために、処理対象データをすべてMとし、4つの処理ユニットを使用する場合、処理対象データを4つのデータブロックに分割することができる。このとき、処理対象のデータブロックを処理ユニット110、120、130、140にそれぞれ配信することができる。各処理ユニットにおいて、受信したデータを4分割することができる。このとき、処理ユニット110にはデータA1、B1、C1、D1が含まれることができ、処理ユニット120にはデータA2、B2、C2、D2が含まれることができ、他の処理ユニットも同様である。以下、各処理ユニットにおける動作の例について説明する。
図4は、本開示の例示的な実施形態に係る、複数の処理ユニット間のデータ配信のブロック
図400を概略的に示す。例えば、以下の表1は、処理ユニット120において実行される動作の一例を示しており、この時点では、処理ユニット120はデータA2、B2、C2、D2を有している。
【0027】
【0028】
表1に示されるように、1列目は動作の識別子を示し、2列目は動作タイプを示し、3列目が動作内容を示している。表1においては、処理ユニット120で実行されるべき動作の一部のみが模式的に示されており、動作2以降は、累積動作とコピー動作が累積結果(A1+A2+A3+A4)を得るまで交互に行われることができる。ここでの累積結果(A1+A2+A3+A4)は、一部分の完全な累積結果にすぎないため、各処理ユニットは自身のローカルの一部分の完全な累積結果を次の処理ユニットにコピーする必要があり、次の処理ユニットは、各処理ユニットのいずれもすべての完全な累積結果を有するまで繰り返してコピーを実行することが言うまでもない。
【0029】
処理ユニット120において実行される動作のセットは、コピー動作と累積動作とを含むことができる。このとき、処理ユニット120において実行される動作のタイプに応じて、第1のキューと第2のキューとをそれぞれ作成することができる。具体的には、第1のキューは、次の表2に示されるような累積動作を含むことができ、第2のキューは、次の表3に示されるようなコピー動作を含むことができる。
【0030】
【0031】
【0032】
以下では、
図4と
図5をそれぞれ参照しながら、コピー動作と累積動作について詳しく説明する。ここにいうコピー動作は、処理ユニットにおける累積結果/データブロックを該処理ユニットの後に接続された次の処理ユニットにコピーすることができることは言うまでもない。処理ユニット110の場合、矢印410に示されるように、該処理ユニット110は、データA1を処理ユニット120にコピーして副本とすることができる。処理ユニット120の場合、矢印420に示されるように、該処理ユニット120は、データB2を処理ユニット130にコピーして副本とすることができる。他の処理ユニットの場合も、同様のコピー動作を実行することができる。
図4には示されていないが、コピー動作の対象は、処理ユニットにおける累積結果であってもよい。
【0033】
本開示の例示的な実施形態によれば、累積動作とは、処理ユニットにおけるデータブロックを、処理ユニットの前に接続された前の処理ユニットから該処理ユニットにコピーされた累積結果に累積して、該処理ユニットの累積結果とすることを意味する。
図5は、本開示の例示的な実施形態に係る、複数の処理ユニットにおいて累積動作を実行するためのブロック
図500を概略的に示す。
図5は、
図4のコピー動作後の処理ユニット120の状態を示しており、この時点で、処理ユニット120においてはデータA1の副本を有している。処理ユニット120においては、データA1の副本とデータA2に基づいて、累積結果510(すなわち、A1+A2)を確定することができる。同様に、他の処理ユニットにおいては、他のデータの累積結果を確定することもできる。
【0034】
本開示の例示的な実施形態によれば、コピー動作と累積動作を実行するために、相応するタイプの動作を実行するためのコードを処理ユニットにそれぞれロードすることができる。
図6は、本開示の例示的な実施形態に係る、処理ユニットにコードをロードするためのブロック
図600を概略的に示す。
図6に示されるように、ホスト410は、各処理ユニット110、120、130、140に接続されることができる。ここで、ホスト410は、累積タイプの動作を実行するための第1のコードと、コピー動作を実行するための第2のコードとを、各処理ユニット内のメモリにそれぞれロードすることができる。
【0035】
各処理ユニットにコードをロードするプロセスが同様であることは、言うまでもない。説明を簡略化するために、以下では、処理ユニット110に対するロードプロセスのみを説明する。本開示の例示的な実施形態によれば、累積動作を実行するための第1のコード612と、コピー動作を実行するための第2のコード614とを、処理ユニット110のメモリ610にそれぞれロードすることができる。
【0036】
第1のコード612と第2のコード614がメモリ610にロードされた後、処理ユニット110は、コードに応じた動作を迅速に実行することができる。本開示の例示的な実施形態によれば、処理ユニット110の応答速度を向上させるために、第1のコード612と第2のコード614のうちの少なくともいずれかを処理ユニット110のメモリ610に保持することができる。本開示の例示的な実施形態によれば、データコピーとデータ累積のコードを予め各処理ユニットにロードし、各処理ユニットのメモリに常駐させることにより、ロード/リリースを繰り返すことによる余分な時間やリソースのオーバヘッドを回避することができる。
【0037】
このとき、第1のコード612に基づいて第1のキューにおける動作を実行することができ、第2のコード614に基づいて第2のキューにおける動作を実行することができる。コピー動作は処理ユニット間の帯域リソースを占用する必要があり、累積動作は各処理ユニット内の計算リソースを占用することになるため、依存関係のない動作の場合、2つのキューにおける動作を並列に実行することができることは、言うまでもない。
【0038】
ブロック320では、処理タスク210の定義に基づいて、複数の動作間の依存関係を確定することができる。処理ユニット110において実行されるべき動作のセットと、複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの依存関係を取得することができる。以下では、処理ユニット120において実行される複数の動作のみを例に挙げて、依存関係の取得方法について説明する。上記の例に続けて、処理ユニット110、120、130、140に4つのデータブロックをそれぞれ送信したと仮定する。オールリデュースのプロセスから分かるように、各動作間の依存関係を表4の最後の列に示すことができる。
【0039】
【0040】
図3に戻り、ブロック330では、依存関係に基づいて、処理ユニットにおいて第1のキューにおける動作と第2のキューにおける動作とをそれぞれ実行する。ハードウェア割り込み方式で、ある特定の動作を実行する依存関係が満たされたことを処理ユニットに通知し、さらに、該処理ユニットをトリガして該特定の動作を実行させることができることを理解されたい。本開示の例示的な実施形態によれば、処理ユニットにおいて第1のキューと第2のキューのいずれかにおける動作が完了したと判断された場合、処理ユニットのハードウェア割り込みを利用して他の処理ユニットに通知する。
【0041】
本開示の例示的な実施形態を利用して、処理ユニットのハードウェア割り込みに基づいてキューにおけるタスクをスケジューリングし、処理ユニット自身がタスク実行の優先順位を確保し、ホストとの不必要な通信を回避する。本開示の技術的解決手段を採用することにより、オールリデュースの並列効率を大幅に向上させ、実行中の様々な時間とリソースのオーバヘッドを低減することができる。以下では、
図7と
図8をそれぞれ参照しながら、如何にハードウェア割り込みに基づいて通知するかについて説明する。
【0042】
図7は、本開示の例示的な実施形態に係る、コピーキューにおける動作の完了後にハードウェア割り込みをトリガするブロック
図700を概略的に示す。
図7は、処理ユニット120に対する、複数のコピー動作を含むことができるコピーキュー710を示している。
図7に示されるコピーキュー710におけるコピー動作712は、表1の動作1を表す。すなわち、処理ユニット120におけるデータB2を次の処理ユニット130にコピーする。表4の依存関係から分かるように、該動作は他の動作に依存しないため、直接実行できる。
【0043】
さらに、依存関係から分かるように、次の処理ユニット130における累積動作はコピー動作712に依存するため、コピー動作712が完了した後に、ハードウェア割り込み714を生成することにより、相応する累積動作を実行するように次の処理ユニット130に通知する(716)ことができる。次の処理ユニット130においては、前の処理ユニット120からのハードウェア割り込み714を受信すると、累積動作(すなわち、受信したデータB2と自身のデータブロックB3とを累積すること)を実行することができる。
【0044】
本開示の例示的な実施形態によれば、処理ユニットと次の処理ユニットはキャッシュ領域を共有するため、コピー動作を実施するために処理ユニットからキャッシュ領域に累積結果をコピーすることができる。例えば、上述した処理ユニット120と処理ユニット130との間に共有キャッシュ領域がある場合には、処理ユニット120は該キャッシュ領域にデータをコピーすることもでき、処理ユニット130は該キャッシュ領域からデータを読み取ることもできる。なお、
図7は、コピーキュー710における1つのコピー動作712が実行された後にハードウェア割り込み714を生成する例のみを詳細に示しているが、他のコピー動作が実行された後にも同様に、相応する累積動作を実行するように次の処理ユニットに通知することができることは、言うまでもない。
【0045】
本開示の例示的な実施形態によれば、処理ユニットにおいて第1のキューにおける1つの累積動作が実行された場合、ハードウェア割り込みに基づいて、第2のキューにおける次のコピー動作を実行するように前の処理ユニットに通知することができる。以下では、
図8を参照して、詳しく説明する。
図8は、本開示の例示的な実施形態に係る、累積キューにおける累積動作の完了後にハードウェア割り込みをトリガするブロック
図800を概略的に示す。
図8は、処理ユニット120に対する、複数のコピー動作を含むことができる累積キュー810を示している。
図8に示される累積キュー810における累積動作712は、表1の動作2を表す。すなわち、処理ユニット110から受信したデータA1とローカルのデータA2とを累積することにより、累積結果(A1+A2)を得る。該動作は前の処理ユニット110がデータA1を処理ユニット120にコピーしたことに依存するため、処理ユニット120が処理ユニット110からのハードウェア割り込みを受信した場合、累積動作812を開始することができる。
【0046】
さらに、累積動作812の依存関係から分かるように、前の処理ユニット110が次の累積結果を処理ユニット120にコピーするコピー動作は、該累積動作812に依存するため、累積動作812が完了した後に、ハードウェア割り込み814を生成することにより、後の累積結果を処理ユニット120にコピーするように前の処理ユニット110に通知する(816)ことができる。前の処理ユニット110においては、処理ユニット120からのハードウェア割り込み814を受信すると、処理ユニット110はコピー動作を実行することができる。
【0047】
本開示の例示的な実施形態によれば、コピー動作と累積動作は帯域リソースと計算リソースをそれぞれ使用するため、実行されるべきコピー動作と累積動作をそれぞれコピーキューと累積キューにより記憶することで、2つのタイプの動作によるリソースの奪い合いを回避することができる。これにより、並列実行の可能性を高めることができる。さらに、ホストが各処理ユニットの実行をスケジューリングするか、またはポーリング技術を用いて依存関係が満たされているかどうかを確認し続けるような技術的解決手段と比較して、ハードウェア割り込み方式を用いて依存関係が満たされていることを通知することは、スケジューリング作業の効率を大幅に向上でき、動作のセットの実行効率を向上させることができる。
【0048】
本開示の例示的な実施形態によれば、処理ユニットにおいて第1のキューと第2のキューにおけるすべての動作が実行されていると判断された場合、処理ユニットが処理タスクの部分を実行したことを示すメッセージを送信することができる。本開示の例示的な実施形態では、処理タスクを実行する具体的なプロセスは、1つの処理ユニットにおいて実行されるプロセスのみを例に挙げて説明したが、複数の処理ユニットのうちの他の処理ユニットにおいて実行される動作も同様であることは、言うまでもない。上述した方法300をすべての複数の処理ユニットにおいて並列的に実行することにより、各処理ユニットが処理タスクのうち、自身に割り当てられた一部分のタスクを実行する効率を向上させることができ、全体的な処理タスクの実行効率を向上させることができる。
【0049】
タスクを処理する方法300の複数の実施形態は、上記で詳細に説明された。本開示の例示的な実施形態によれば、処理タスクを実行するための装置も提供される。以下では、
図9を参照して詳細に説明する。
図9は、本開示の例示的な実施形態に係る、処理タスクを実行するための装置900のブロック図を概略的に示す。処理タスクの複数の部分のうちの1つの部分は、複数の処理ユニットのうちの1つの処理ユニットにおいて実行される動作のセットを含み、動作のセットは、第1のタイプの動作と第2のタイプの動作とを含む。
図9に示されるように、該装置900は、第1のタイプの動作を実行するための第1のキューと、第2のタイプの動作を実行するための第2のキューとをそれぞれ作成するように構成された作成モジュール910と、処理タスクの定義に基づいて、処理ユニットにおいて実行されるべき動作のセットと、複数の処理ユニットのうちの他の処理ユニットにおいて実行されるべき動作のセットとの間の依存関係を取得するように構成された取得モジュール920と、依存関係に基づいて処理ユニットにおいて第1のキューにおける動作と第2のキューにおける動作とをそれぞれ実行するように構成された実行モジュール930と、を含む。
【0050】
本開示の例示的な実施形態によれば、該装置900は、第1のタイプの第1の動作のセットを実行するための第1のコードと、第2のタイプの第2の動作のセットを実行するための第2のコードとをそれぞれ処理ユニットにロードするように構成されたロードモジュールをさらに含む。本開示の例示的な実施形態によれば、実行モジュール930は、第1のコードに基づいて第1のキューにおける動作を実行するように構成された第1の実行モジュールと、第2のコードに基づいて第2のキューにおける動作を実行するように構成された第2の実行モジュールと、を含む。
【0051】
本開示の例示的な実施形態によれば、該装置900は、処理ユニットのメモリに第1のコードと第2のコードのうちの少なくともいずれかをそれぞれ保持するように構成された保持モジュールをさらに含む。
【0052】
本開示の例示的な実施形態によれば、該装置900は、処理ユニットにおいて、処理タスクの処理対象データのうちの、処理ユニットにおいて処理されるべき、複数の処理ユニットの数に応じて処理対象データを分割して得られたデータブロックを受信するように構成された受信モジュールをさらに含む。
【0053】
本開示の例示的な実施形態によれば、実行モジュール930は、処理ユニットにおいてデータブロックに対して第1のキューにおける動作と第2のキューにおける動作とをそれぞれ実行するように構成されたデータ処理モジュールをさらに含む。
【0054】
本開示の例示的な実施形態によれば、処理タスクはオールリデュースタスクであり、複数の処理ユニットはループ状に接続されている。
【0055】
本開示の例示的な実施形態によれば、第1の動作のセットは、処理ユニットの前に接続された前の処理ユニットから処理ユニットにコピーされた累積結果に、処理ユニットにおけるデータブロックを累積して、処理ユニットの累積結果とするための累積動作を含む。
【0056】
本開示の例示的な実施形態によれば、第2の動作のセットは、処理ユニットの後に接続された次の処理ユニットに、処理ユニットにおけるデータブロックと累積結果のうちの少なくともいずれかをコピーするためのコピー動作を含む。
【0057】
本開示の例示的な実施形態によれば、実行モジュール930は、処理ユニットにおいて第1のキューと第2のキューのいずれかのキューにおける動作が完了したことに対応して、処理ユニットのハードウェア割り込みを利用して他の処理ユニットに通知するように構成された通知モジュールを含む。
【0058】
本開示の例示的な実施形態によれば、通知モジュールは、処理ユニットにおいて第1のキューにおける1つの累積動作が実行されたことに対応して、ハードウェア割り込みに基づいて、第2のキューにおける次のコピー動作を実行するように前の処理ユニットに通知するように構成された第1の通知モジュールを含む。
【0059】
本開示の例示的な実施形態によれば、通知モジュールは、処理ユニットにおいて第2のキューにおける1つのコピー動作が実行されたことに対応して、ハードウェア割り込みに基づいて、第1のキューにおける次の累積動作を実行するように次の処理ユニットに通知するように構成された第2の通知モジュールを含む。
【0060】
本開示の例示的な実施形態によれば、処理ユニットと次の処理ユニットはキャッシュ領域を共有し、装置は処理ユニットからキャッシュ領域にデータブロックと累積結果のうちの少なくともいずれかをコピーするように構成されたコピーモジュールをさらに含む。
【0061】
本開示の例示的な実施形態によれば、装置は処理ユニットにおいて第1のキューと第2のキューにおける動作がすべて実行されたと判断されたことに対応して、処理ユニットが処理タスクのうちの部分を実行したことを報告するように構成された報告モジュールをさらに含む。
【0062】
図10は、本開示の様々な実施形態を実施できるコンピューティングデバイス1000のブロック図を示す。デバイス1000は、
図3に説明された方法の実施に使用され得る。図に示されたように、デバイス1000は、中央処理ユニット(CPU)1001を備えている。これは、読み取り専用メモリ(ROM)1002に記憶されたコンピュータプログラム命令、または記憶ユニット1008からランダムアクセスメモリ(RAM)1003にロードされたコンピュータプログラム命令に基づいて、様々な適切な動作と処理を実行することができる。RAM1003には、デバイス1000の動作に必要な様々なプログラムとデータを記憶することもできる。CPU1001、ROM1002、RAM1003はバス1004を介して接続されている。バス1004には、入出力(I/O)インターフェース1005も接続されている。
【0063】
デバイス1000内の複数の構成要素は、I/Oインターフェース1005に接続されている。構成要素には、キーボード、マウスなどの入力ユニット1006、様々な種類のディスプレイ、スピーカなどの出力ユニット1007、磁気ディスク、光ディスクなどの記憶ユニット1008、ネットワークアダプター、モデム、無線通信送受信機などの通信ユニット1009が含まれる。通信ユニット1009は、デバイス1000がインターネットなどのコンピュータネットワークおよび/または様々な電気通信ネットワークを介して他のデバイスと情報/データを交換することを可能にする。
【0064】
処理ユニット1001は、上述した方法300のような様々な方法と処理を実行する。例えば、いくつかの実施形態では、方法300は、記憶ユニット1008のような機械可読媒体に有形的に含まれるコンピュータソフトウェアプログラムとして実施されることができる。いくつかの実施形態では、コンピュータプログラムの一部またはすべては、ROM1002および/または通信ユニット1009を介してデバイス1000にロードおよび/またはインストールされることができる。コンピュータプログラムがRAM1003にロードされ、CPU1001によって実行されると、上述した方法300の1つまたは複数のステップを実行することができる。あるいは、他の実施形態では、CPU1001は、他の任意の適切な方法(例えば、ファームウェアを介して)によって方法300を実行するように構成されることができる。
【0065】
本開示の例示的な実施形態によれば、コンピュータプログラムが格納されたコンピュータ可読記憶媒体が提供される。プログラムがプロセッサによって実行されると、本開示で説明された方法を実施する。
【0066】
本明細書で説明した機能は、少なくとも部分的に1つまたは複数のハードウェアロジックコンポーネントによって実行されることができる。例えば、非限定的に使用可能な例示的なタイプのハードウェアロジックコンポーネントは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路 (ASIC)、特定用途向け標準部品(ASSP)、システムオンチップシステム(SOC)、複雑なプログラマブルロジックデバイス(CPLD)などを含む。
【0067】
本開示の方法を実施するためのプログラムコードは、1つまたは複数のプログラミング言語のいずれかの組み合わせで作成することができる。これらのプログラムコードは、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサまたはコントローラに提供することができる。これにより、プログラムコードはプロセッサまたはコントローラによって実行されると、フローチャートおよび/またはブロック図に規定された機能/動作が実施される。プログラムコードは完全にもしくは部分的にマシン上で実行されることができ、またはスタンドアロンソフトウェアパッケージとして部分的にマシン上で実行されながら部分的にリモートマシン上で実行されたり、完全にリモートマシンもしくはサーバ上で実行されたりすることができる。
【0068】
本開示のコンテキストでは、機械可読媒体は、有形の媒体であり得る。それは、命令実行システム、装置またはデバイスが使用するため、または命令実行システム、装置またはデバイスと組み合わせて使用するためのプログラムを含むか、または格納することができる。機械可読媒体は、機械可読信号媒体または機械可読記憶媒体であり得る。機械可読媒体は、電子的、磁気的、光学的、電磁的、赤外線、または半導体システム、装置またはデバイス、またはこれらの任意の適切な組合せを含むことができるが、これらに限定されない。機械可読記憶媒体のより具体的な例には、1本または複数本のケーブルに基づく電気的接続、携帯型コンピュータディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ、コンパクトディスク読み取り専用メモリ(CD-ROM)、光学記憶装置、磁気記憶装置、または上記の任意の適切な組合せが含まれる。
【0069】
また、各動作は特定の順序で示されているが、所望の結果を得られるために、このような動作は示された特定の順序にてまたは順を追って実行されることを要求するものと理解されるべきである。または、図に示されたすべての動作を実行されることを要求するものと理解されるべきである。特定の環境では、マルチタスクと並列処理が有利である可能性がある。同様に、上記ではいくつかの具体的な実施詳細を説明したが、これらは本開示の範囲への制限と解釈されるべきではない。個別の実施形態のコンテキストで説明された、いくつかの特徴は、単一の実施において組み合わせて実施されることもできる。逆に、単一の実施のコンテキストで説明された様々な特徴は、複数の実施において、個別にまたは任意の適切なサブセットで実施されることもできる。
【0070】
本主題は、構造特徴および/または方法のロジック動作に特定された言語で記述されたが、特許請求の範囲内に限定される主題が、必ずしも上記に記載された特定の特徴または動作に限定されるものではないことを理解されたい。逆に、上述した特定の特徴および動作は、特許請求の範囲を実施するための例示的な形態にすぎない。