(57)【要約】【課題】多くの並列処理が行われる場合でもキャッシュメモリを効率的に活用することができる。【解決手段】処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照部（１４１）と、タグ情報に基づいて複数の演算の処理順序を決定するアロケーション部（１４２）と、を設ける。【選択図】図５
2019179417.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング方法であって、
処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照ステップと、
前記タグ情報に基づいて前記複数の演算の処理順序を決定するアロケーションステップと、を備えるスケジューリング方法。
【請求項２】
複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング装置であって、
処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照部（１４１）と、
前記タグ情報に基づいて前記複数の演算の処理順序を決定するアロケーション部（１４２）と、を備えるスケジューリング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング方法及びスケジューリング装置に関する。
【背景技術】
【０００２】
キャッシュメモリの利用効率を高めることを目的とし、下記特許文献１に記載されている発明が提案されている。下記特許文献１には、キャッシュメモリを共用キャッシュ領域と専用キャッシュ領域とに分割して制御するキャッシュメモリ制御工程をプロセッサに実行させるプロセッサ読み取り可能なキャッシュメモリ制御プログラムであって，プロセッサによるプロセスの実行中に発行される専用キャッシュ領域の割当を要求する専用領域獲得要求に応答して，専用キャッシュ領域を割り当てた場合のキャッシュヒット率と共用キャッシュ領域を割り当てた場合のキャッシュヒット率との差と，メモリアクセス頻度とに基づくキャッシュ有効利用度に応じて，キャッシュ有効利用度が高い程専用キャッシュ領域を割当て，低い程共用キャッシュ領域を割り当てるキャッシュ領域割当工程と，割り当て済み専用キャッシュ領域の開放を要求する専用領域開放要求に応答して，専用キャッシュ領域の割当を解放する専用キャッシュ領域開放工程と、を有するものである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−３６８７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、キャッシュメモリを共用キャッシュ領域と専用キャッシュ領域とに分割して制御するため、このような領域に分けない場合に適用することができなかった。特に、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際には、多くの並列処理が行われるため、共用キャッシュ領域や専用キャッシュ領域といった領域に分けないでキャッシュメモリ全体を効率的に活用する必要がある。
【０００５】
本開示は、多くの並列処理が行われる場合でもキャッシュメモリを効率的に活用することができることを目的とする。
【課題を解決するための手段】
【０００６】
本開示は、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング方法であって、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照ステップと、タグ情報に基づいて複数の演算の処理順序を決定するアロケーションステップと、を備える。
【０００７】
本開示は、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング装置であって、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照部（１４１）と、タグ情報に基づいて複数の演算の処理順序を決定するアロケーション部（１４２）と、を備える。
【０００８】
本開示によれば、タグ情報を読み取ることで、複数の演算それぞれにおけるメモリアクセスの状況を把握することができるので、キャッシュメモリの書き換えが減少するように複数の演算の処理順序を決定することができる。
【発明の効果】
【０００９】
本開示によれば、多くの並列処理が行われる場合でもキャッシュメモリを効率的に活用することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施形態の前提となる並列処理について説明するための図である。
【図２】図２は、図１に示される並列処理を実行するためのシステム構成例を示す図である。
【図３】図３は、図２に用いられるＤＦＰの構成例を示す図である。
【図４】図４は、コンパイラの機能的な構成例を説明するための図である。
【図５】図５は、スレッドスケジューラの機能的な構成例を説明するための図である。
【図６】図６は、従来のスケジューリングについて説明するための図である。
【図７】図７は、従来のスケジューリングに基づいて処理をした場合のメモリアクセスの状況を説明するための図である。
【図８】図８は、本実施形態のスケジューリングについて説明するための図である。
【図９】図９は、本実施形態のスケジューリングに基づいて処理をした場合のメモリアクセスの状況を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照しながら本実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【００１２】
図１（Ａ）は、グラフ構造のプログラムコードを示しており、図１（Ｂ）は、スレッドの状態を示しており、図１（Ｃ）は、並列処理の状況を示している。
【００１３】
図１（Ａ）に示されるように、本実施形態が処理対象とするプログラムは、データと処理とが分割されているグラフ構造を有している。このグラフ構造は、プログラムのタスク並列性、グラフ並列性を保持している。
【００１４】
図１（Ａ）に示されるプログラムコードに対して、コンパイラによる自動ベクトル化とグラフ構造の抽出を行うと、図１（Ｂ）に示されるような大量のスレッドを生成することができる。
【００１５】
図１（Ｂ）に示される多量のスレッドに対して、ハードウェアによる動的レジスタ配置とスレッド・スケジューリングにより、図１（Ｃ）に示されるような並列実行を行うことができる。実行中にレジスタ資源を動的配置することで、異なる命令ストリームに対しても複数のスレッドを並列実行することができる。
【００１６】
続いて図２を参照しながら、動的レジスタ配置及びスレッド・スケジューリングを行うアクセラレータとしてのＤＦＰ（Ｄａｔａ  Ｆｌｏｗ  Ｐｒｏｃｅｓｓｏｒ）１０を含むシステム構成例である、データ処理システム２を説明する。
【００１７】
データ処理システム２は、ＤＦＰ１０と、イベントハンドラ２０と、ホストＣＰＵ２１と、ＲＯＭ２２と、ＲＡＭ２３と、外部インターフェイス２４と、システムバス２５と、を備えている。ホストＣＰＵ２１は、データ処理を主として行う演算装置である。ホストＣＰＵ２１は、ＯＳをサポートしている。イベントハンドラ２０は、割り込み処理を生成する部分である。
【００１８】
ＲＯＭ２２は、読込専用のメモリである。ＲＡＭ２３は、読み書き用のメモリである。外部インターフェイス２４は、データ処理システム２外と情報授受を行うためのインターフェイスである。システムバス２５は、ＤＦＰ１０と、ホストＣＰＵ２１と、ＲＯＭ２２と、ＲＡＭ２３と、外部インターフェイス２４との間で情報の送受信を行うためのものである。
【００１９】
ＤＦＰ１０は、ホストＣＰＵ２１の重い演算負荷に対処するために設けられている個別のマスタとして位置づけられている。ＤＦＰ１０は、イベントハンドラ２０が生成した割り込みをサポートするように構成されている。
【００２０】
続いて図３を参照しながら、ＤＦＰ１０について説明する。図３に示されるように、ＤＦＰ１０は、コマンドユニット１２と、スレッドスケジューラ１４と、実行コア１６と、メモリサブシステム１８と、を備えている。
【００２１】
コマンドユニット１２は、コンフィグ・インターフェイスとの間で情報通信可能なように構成されている。コマンドユニット１２は、コマンドバッファとしても機能している。
【００２２】
スレッドスケジューラ１４は、図１（Ｂ）に例示されるような多量のスレッドの処理をスケジューリングする部分である。スレッドスケジューラ１４は、スレッドを跨いだスケジューリングを行うことが可能である。
【００２３】
実行コア１６は、４つのプロセッシングエレメントである、ＰＥ＃０と、ＰＥ＃１と、ＰＥ＃２と、ＰＥ＃３と、を有している。実行コア１６は、独立してスケジューリング可能な多数のパイプラインを有している。
【００２４】
メモリサブシステム１８は、アービタ１８１と、Ｌ１キャッシュ１８ａと、Ｌ２キャッシュ１８ｂと、を有している。メモリサブシステム１８は、システム・バス・インターフェイス及びＲＯＭインターフェイスとの間で情報通信可能なように構成されている。
【００２５】
続いて、図４を参照しながら、コンパイラ５０について説明する。コンパイラ５０は、機能的な構成要素として、局所性検出部５０１と、タグ付与部５０２と、を備える。
【００２６】
局所性検出部５０１は、グラフ構造を構成する個々の処理ノードにおいて利用するメモリ情報を検出する部分である。タグ付与部５０２は、局所性検出部５０１が検出したメモリ情報に基づいて、タグ情報を付与する部分である。タグ情報は、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すものである。
【００２７】
続いて、図５を参照しながら、スレッドスケジューラ１４の機能的な構成要素について説明する。スレッドスケジューラ１４は、機能的な構成要素として、タグ参照部１４１と、アロケーション部１４２と、を備える。
【００２８】
タグ参照部１４１は、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取る部分である。
【００２９】
アロケーション部１４２は、タグ情報に基づいて複数の演算の処理順序を決定する部分である。
【００３０】
本実施形態におけるタグ参照部１４１及びアロケーション部１４２の処理を説明するのに先立って、比較のためタグ情報を用いない従来の処理方法について図６及び図７を参照しながら説明する。
【００３１】
図６（Ａ）は、スレッド１用のプログラムを示している。スレッド１用のプログラム中には、処理グループＧｒ１として「ｄ＝ａ＋ｂ」「ｅ＝ａ＋ｃ」があり、処理グループＧｒ２として「ｇ＝ｂ＋ｃ」がある。
【００３２】
図６（Ｂ）は、メモリ領域の状況を示している。メモリ領域には、データとして「ａ」「ｂ」「ｃ」「ｄ」「ｅ」「ｆ」が格納されており、演算後の格納領域として、「ｇ（スレッド１用）」「ｈ（スレッド１用）」「ｇ（スレッド２用）」が設けられている。
【００３３】
図６（Ｃ）は、キャッシュ領域の状況を示している。キャッシュライン１には、「ａ」「ｂ」「ｃ」の保持領域が確保され、キャッシュライン２には、「ｄ」「ｅ」「ｆ」の保持領域が確保されている。
【００３４】
図６（Ｄ）は、スレッド２用のプログラムを示している。スレッド２用のプログラム中には、処理グループＧｒ３として「ｆ＝ａ＋ｄ」があり、処理グループＧｒ４として「ｇ＝ｂ＋ｃ」がある。
【００３５】
このような状況で、処理グループＧｒ１、処理グループＧｒ２、処理グループＧｒ３、処理グループＧｒ４の順に処理した場合のキャッシュ領域の変遷状況について、図７を参照しながら説明する。
【００３６】
図７は、キャッシュ領域の状況を示している。処理グループＧｒ１を実行するにあたっては、キャッシュライン１に「ａ」「ｂ」「ｃ」が保持される。処理グループＧｒ１が処理されると、「ｄ＝ａ＋ｂ」「ｅ＝ａ＋ｃ」が演算され、キャッシュライン２に演算結果である「ｄ」「ｅ」と「ｆ」が保持されている。
【００３７】
処理グループＧｒ１に続いて処理グループＧｒ２が処理されると、「ｇ＝ｂ＋ｃ」の演算結果である「ｇ（スレッド１用）」を格納する必要があるため、キャッシュライン２が書き換えられる。
【００３８】
処理グループＧｒ２に続いて処理グループＧｒ３が処理されると、演算結果である「ｆ」を格納する必要があるため、キャッシュライン２が書き換えられる。
【００３９】
処理グループＧｒ３に続いて処理グループＧｒ４が処理されると、演算結果である「ｇ（スレッド２用）」を格納する必要があるため、キャッシュライン２が書き換えられる。
【００４０】
このような頻繁なキャッシュの書き換えを回避する一例について、図８及び図９を参照しながら説明する。
【００４１】
図８（Ａ）は、スレッド１用のプログラムを示している。スレッド１用のプログラム中には、処理グループＧｒ１として「ｄ＝ａ＋ｂ」「ｅ＝ａ＋ｃ」があり、処理グループＧｒ２として「ｇ＝ｂ＋ｃ」がある。処理グループＧｒ１には、タグ情報として「ＴＡＧ：ａ，ｂ，ｃ，ｄ，ｅ」が付与されている。処理グループＧｒ２には、タグ情報として「ＴＡＧ：ｃ，ｇ（スレッド１）」が付与されている。
【００４２】
図８（Ｂ）は、メモリ領域の状況を示している。メモリ領域には、データとして「ａ」「ｂ」「ｃ」「ｄ」「ｅ」「ｆ」が格納されており、演算後の格納領域として、「ｇ（スレッド１用）」「ｈ（スレッド１用）」「ｇ（スレッド２用）」が設けられている。
【００４３】
図８（Ｃ）は、キャッシュ領域の状況を示している。キャッシュライン１には、「ａ」「ｂ」「ｃ」の保持領域が確保され、キャッシュライン２には、「ｄ」「ｅ」「ｆ」の保持領域が確保されている。
【００４４】
図８（Ｄ）は、スレッド２用のプログラムを示している。スレッド２用のプログラム中には、処理グループＧｒ３として「ｆ＝ａ＋ｄ」があり、処理グループＧｒ４として「ｇ＝ｂ＋ｃ」がある。処理グループＧｒ３には、タグ情報として「ＴＡＧ：ａ，ｄ，ｆ」が付与されている。処理グループＧｒ４には、タグ情報として「ＴＡＧ：ｃ，ｇ（スレッド２）」が付与されている。
【００４５】
このようにタグ情報が付与されていると、キャッシュメモリの書き換えが少なくて済むように処理の順番が設定される。一例としては、最初に実行されるのが処理グループＧｒ１であると決定される。続いて、処理グループＧｒ１のタグ情報「ＴＡＧ：ａ，ｂ，ｃ，ｄ，ｅ」と共通部分が多いタグ情報「ＴＡＧ：ａ，ｄ，ｆ」が付与されている処理グループＧｒ３を処理することが決定される。
【００４６】
続いて、処理グループＧｒ３のタグ情報「ＴＡＧ：ａ，ｄ，ｆ」と共通部分が多いタグ情報が付与されている処理グループを探すのであるが、共通部分があるタグ情報が付与されている処理グループが無いため、当初の順番に沿って、処理グループＧｒ２、処理グループＧｒ４の順に実行される。
【００４７】
図９を参照しながら、処理グループＧｒ１、処理グループＧｒ３、処理グループＧｒ２、処理グループＧｒ４の順に処理した場合のキャッシュ領域の変遷状況について説明する。
【００４８】
処理グループＧｒ１を実行するにあたっては、キャッシュライン１に「ａ」「ｂ」「ｃ」が保持される。処理グループＧｒ１が処理されると、「ｄ＝ａ＋ｂ」「ｅ＝ａ＋ｃ」が演算され、キャッシュライン２に演算結果である「ｄ」「ｅ」と「ｆ」が保持されている。
【００４９】
処理グループＧｒ１に続いて処理グループＧｒ３が処理されると、処理に用いるデータは既にキャッシュラインに格納されているため、キャッシュの書き換えは発生しない。
【００５０】
処理グループＧｒ３に続いて処理グループＧｒ２を実行するにあたっては、「ｇ＝ｂ＋ｃ」の演算結果である「ｇ（スレッド１用）」を格納する必要があるため、キャッシュライン２が書き換えられる。
【００５１】
処理グループＧｒ２に続いて処理グループＧｒ４が実行される場合、「ｇ（スレッド２用）」が確保されているため、キャッシュの書き換えは発生しない。
【００５２】
上記説明したように、本実施形態は、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング方法であって、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照ステップと、タグ情報に基づいて複数の演算の処理順序を決定するアロケーションステップと、を備える。
【００５３】
装置として捉えれば、複数の処理ノードで構成されるグラフ構造のプログラムを実行する際のスケジューリング装置としてのスレッドスケジューラ１４であって、処理ノードにおける複数の演算それぞれに用いられるメモリアクセスの内容を示すタグ情報を読み取るタグ参照部１４１と、タグ情報に基づいて複数の演算の処理順序を決定するアロケーション部１４２と、を備える。
【００５４】
本実施形態では、タグ情報を読み取ることで、複数の演算それぞれにおけるメモリアクセスの状況を把握することができるので、キャッシュメモリの書き換えが減少するように複数の演算の処理順序を決定することができる。
【００５５】
以上、具体例を参照しつつ本実施形態について説明した。しかし、本開示はこれらの具体例に限定されるものではない。これら具体例に、当業者が適宜設計変更を加えたものも、本開示の特徴を備えている限り、本開示の範囲に包含される。前述した各具体例が備える各要素およびその配置、条件、形状などは、例示したものに限定されるわけではなく適宜変更することができる。前述した各具体例が備える各要素は、技術的な矛盾が生じない限り、適宜組み合わせを変えることができる。
【符号の説明】
【００５６】
１４１：タグ参照部
１４２：アロケーション部
【図１】
2019179417.tif 000003
【図２】
2019179417.tif 000004
【図３】
2019179417.tif 000005
【図４】
2019179417.tif 000006
【図５】
2019179417.tif 000007
【図６】
2019179417.tif 000008
【図７】
2019179417.tif 000009
【図８】
2019179417.tif 000010
【図９】
2019179417.tif 000011