(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-04-26
(45)【発行日】2022-05-10
(54)【発明の名称】デッドロック回避方法、デッドロック回避装置
(51)【国際特許分類】
G06F 8/41 20180101AFI20220427BHJP
G06F 15/167 20060101ALI20220427BHJP
【FI】
G06F8/41 170
G06F15/167 610Z
(21)【出願番号】P 2018068429
(22)【出願日】2018-03-30
【審査請求日】2021-02-15
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(73)【特許権者】
【識別番号】519084397
【氏名又は名称】株式会社エヌエスアイテクス
(74)【代理人】
【識別番号】100140486
【氏名又は名称】鎌田 徹
(74)【代理人】
【識別番号】100170058
【氏名又は名称】津田 拓真
(72)【発明者】
【氏名】谷 祐次郎
(72)【発明者】
【氏名】石渡 一嘉
【審査官】今城 朋彬
(56)【参考文献】
【文献】特表2001-500656(JP,A)
【文献】国際公開第2016/151710(WO,A1)
【文献】特表2009-512089(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 15/167
(57)【特許請求の範囲】
【請求項1】
グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避方法であって、
グラフ構造で記述されたプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析ステップと、
前記暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消ステップと、を備え、
前記デッドロック解消ステップにおいて、
前記暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、
前記処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する、デッドロック回避方法。
【請求項2】
請求項1に記載のデッドロック回避方法であって、
前記開始特定処理において、前記処理開始ノードから処理を開始するように、前記処理開始ノードに対する開始指示情報を付与する、デッドロック回避方法。
【請求項3】
請求項1に記載のデッドロック回避方法であって、
前記開始特定処理において、前記処理開始ノードから処理を開始するように、処理の順番を指示する処理順番情報を付与する、デッドロック回避方法。
【請求項4】
グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避装置であって、
グラフ構造で記述されたプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析部(501)と、
前記暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消部(502)と、を備え、
前記デッドロック解消部は、
前記暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、
前記処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する、デッドロック回避装置。
【請求項5】
請求項4に記載のデッドロック回避装置であって、
前記デッドロック解消部は、前記開始特定処理において、前記処理開始ノードから処理を開始するように、前記処理開始ノードに対する開始指示情報を付与する、デッドロック回避装置。
【請求項6】
請求項4に記載のデッドロック回避装置であって、
前記デッドロック解消部は、前記開始特定処理において、前記処理開始ノードから処理を開始するように、処理の順番を指示する処理順番情報を付与する、デッドロック回避装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避方法及びデッドロック回避装置に関する。
【背景技術】
【0002】
プログラムにおいて、2つ以上の処理単位が互いの処理終了を待ち、結果としてどの処理も先に進めなくなってしまうデッドロックを回避するため、デッドロックが発生する場面に応じたデッドロック回避方法が提案されている。下記特許文献1では、割り込み処理に伴って発生するデッドロックを回避する方法が開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1では、コプロセッサ命令の実行中に割り込み処理によってコプロセッサに対して処理を行うプロセッサシステムにおいて、デッドロックを回避することについては開示がある。
【0005】
しかしながら、特許文献1に記載の発明では、プログラムをデータと処理とに分割してグラフ構造とし、それを読み込むことで動作するプロセッサ特有のデッドロックを回避することはできない。
【0006】
本開示は、グラフ構造で記述されたプログラムを実行するプロセッサにおいてデッドロックを回避するデッドロック回避方法及びデッドロック回避装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
本開示は、グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避方法であって、グラム構造のプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析ステップと、暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消ステップと、を備えている。デッドロック解消ステップにおいて、暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する。
【0008】
また本開示は、グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避装置であって、グラム構造のプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析部(501)と、暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消部(502)と、を備えている。デッドロック解消部は、暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する。
【0009】
処理開始ノードを特定し、その処理開始ノードから一連の処理が開始するように処理することで、入出力バッファがバッファ単位でループしている場合であっても、適切な処理準を定義することができ、見かけ上のデッドロックを回避して並列実行することができる。
【発明の効果】
【0010】
本開示によれば、グラフ構造で記述されたプログラムを実行するプロセッサにおいてデッドロックを回避するデッドロック回避方法及びデッドロック回避装置を提供することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、本実施形態の前提となる並列処理について説明するための図である。
【
図2】
図2は、
図1に示される並列処理を実行するためのシステム構成例を示す図である。
【
図3】
図3は、
図2に用いられるDFPの構成例を示す図である。
【
図4】
図4は、コンパイラの機能的な構成例を説明するための図である。
【
図5】
図5は、デッドロック回避の一例を説明するための図である。
【
図6】
図6は、デッドロック回避の一例を説明するための図である。
【
図7】
図7は、デッドロック回避の一例を説明するための図である。
【
図8】
図8は、デッドロック回避の一例を説明するための図である。
【発明を実施するための形態】
【0012】
以下、添付図面を参照しながら本実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【0013】
図1(A)は、グラフ構造で記述されたプログラムコードを示しており、
図1(B)は、スレッドの状態を示しており、
図1(C)は、並列処理の状況を示している。
【0014】
図1(A)に示されるように、本実施形態が処理対象とするプログラムは、データと処理とが分割されているグラフ構造を有している。このグラフ構造は、プログラムのタスク並列性、グラフ並列性を保持している。
【0015】
図1(A)に示されるプログラムコードに対して、コンパイラによる自動ベクトル化とグラフ構造の抽出を行うと、
図1(B)に示されるような大量のスレッドを生成することができる。
【0016】
図1(B)に示される多量のスレッドに対して、ハードウェアによる動的レジスタ配置とスレッド・スケジューリングにより、
図1(C)に示されるような並列実行を行うことができる。実行中にレジスタ資源を動的配置することで、異なる命令ストリームに対しても複数のスレッドを並列実行することができる。
【0017】
続いて
図2を参照しながら、動的レジスタ配置及びスレッド・スケジューリングを行うアクセラレータとしてのDFP(Data Flow Processor)10を含むシステム構成例である、データ処理システム2を説明する。
【0018】
データ処理システム2は、DFP10と、イベントハンドラ20と、ホストCPU21と、ROM22と、RAM23と、外部インターフェイス24と、システムバス25と、を備えている。ホストCPU21は、データ処理を主として行う演算装置である。ホストCPU21は、OSをサポートしている。イベントハンドラ20は、割り込み処理を生成する部分である。
【0019】
ROM22は、読込専用のメモリである。RAM23は、読み書き用のメモリである。外部インターフェイス24は、データ処理システム2外と情報授受を行うためのインターフェイスである。システムバス25は、DFP10と、ホストCPU21と、ROM22と、RAM23と、外部インターフェイス24との間で情報の送受信を行うためのものである。
【0020】
DFP10は、ホストCPU21の重い演算負荷に対処するために設けられている個別のマスタとして位置づけられている。DFP10は、イベントハンドラ20が生成した割り込みをサポートするように構成されている。
【0021】
続いて
図3を参照しながら、DFP10について説明する。
図3に示されるように、DFP10は、コマンドユニット12と、スレッドスケジューラ14と、実行コア16と、メモリサブシステム18と、を備えている。
【0022】
コマンドユニット12は、コンフィグ・インターフェイスとの間で情報通信可能なように構成されている。コマンドユニット12は、コマンドバッファとしても機能している。
【0023】
スレッドスケジューラ14は、
図1(B)に例示されるような多量のスレッドの処理をスケジューリングする部分である。スレッドスケジューラ14は、スレッドを跨いだスケジューリングを行うことが可能である。
【0024】
実行コア16は、4つのプロセッシングエレメントである、PE#0と、PE#1と、PE#2と、PE#3と、を有している。実行コア16は、独立してスケジューリング可能な多数のパイプラインを有している。
【0025】
メモリサブシステム18は、アービタ181と、L1キャッシュ18aと、L2キャッシュ18bと、を有している。メモリサブシステム18は、システム・バス・インターフェイス及びROMインターフェイスとの間で情報通信可能なように構成されている。
【0026】
続いて、
図4を参照しながら、本開示のデッドロック回避装置の一例としてのコンパイラ50について説明する。本開示のデッドロック回避装置の実施形態はコンパイラ50に限られるものではなく、
図1(A)に例示されるグラフ構造で記述されたプログラムをスレッドに展開するものであれば、
図2に示されるようなデータ処理システム2や、
図3に示されるようなDFP10に実装されてもよい。
【0027】
コンパイラ50は、機能的な構成要素として、グラフ構造解析部501と、デッドロック解消部502と、を有している。
【0028】
グラフ構造解析部501は、グラフ構造で記述されたプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出する部分である。
【0029】
図5に示されるような処理を参照しながら説明する。
図5に示される処理では、buf0のデータを用いてfunc1[0]の処理が実行され、その実行結果がbuf1[0]に保持される。続いて、buf1[0]のデータを用いてfunc2[0]の処理が実行され、その実行結果がbuf2[0]に保持される。続いて、buf2[0]のデータを用いてfunc1[1]の処理が実行され、その実行結果がbuf1[1]に保持される。続いて、buf1[1]のデータを用いてfunc2[1]の処理が実行され、その実行結果がbuf2[1]に保持される。この処理をN回行い、最後の計算結果func2[N]を最終出力とする。
【0030】
並列実行可能なプロセッサ向けでこのような処理を実現しようとすると、
図5のバッファ部分に着目することになり、buf2とbuf1との間でデッドロックが発生しているように見えるため、並列処理を実行するこができない。
【0031】
しかしながら、上記説明したように、処理の記述を適切に行い、バッファのインデックスを変更することで、
図6に示されるようなデッドロックを回避した処理が可能となる。そこで、グラフ構造解析部501は、
図5に示されるような箇所を、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所として抽出する(グラフ構造解析ステップ)。
【0032】
デッドロック解消部502は、暫定デッドロック箇所におけるデッドロックを解消する部分である。デッドロック解消部502は、暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する(デッドロック解消ステップ)。このようにデッドロック解消部502が開始特定処理を実行することで、デッドロック状態を解消し、
図6に例示するような処理が可能となる。
【0033】
開始特定処理の一例としては、
図7に示されるように、開始特定処理において、処理開始ノードであるfunc1から処理を開始するように、処理開始ノードであるfunc1に対する開始指示情報を付与する。開始指示情報としては、kickコマンドが用いられる。
【0034】
開始特定処理の別例としては、
図8に示されるように、開始特定処理において、処理開始ノードであるfunc1から処理を開始するように、処理の順番を指示する処理順番情報を付与する。
【0035】
上記したように本実施形態は、グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避方法であって、グラフ構造で記述されたプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析ステップと、暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消ステップと、を備えている。デッドロック解消ステップにおいて、暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する。
【0036】
装置として捉えれば、グラフ構造で記述されたプログラムを実行するプロセッサにおけるデッドロックを回避するデッドロック回避装置であって、グラフ構造で記述されたプログラムにおいて、入出力バッファがバッファ単位でループし見かけ上デッドロックとなる暫定デッドロック箇所を抽出するグラフ構造解析部501と、暫定デッドロック箇所におけるデッドロックを解消するデッドロック解消部502と、を備えている。デッドロック解消部502は、暫定デッドロック箇所において処理を開始する処理開始ノードを特定し、処理開始ノードから一連の処理が開始されるように特定する開始特定処理を実行する。
【0037】
処理開始ノードを特定し、その処理開始ノードから一連の処理が開始するように処理することで、入出力バッファがバッファ単位でループしている場合であっても、適切な処理準を定義することができ、見かけ上のデッドロックを回避して並列実行することができる。
【0038】
図7を参照しながら説明したように、デッドロック回避方法では、開始特定処理において、処理開始ノードから処理を開始するように、処理開始ノードに対する開始指示情報を付与することができる。同様に、デッドロック回避装置では、デッドロック解消部502が、前記開始特定処理において、前記処理開始ノードから処理を開始するように、前記処理開始ノードに対する開始指示情報を付与することができる。このように、開始指示情報を付与することで、処理開始ノードを特定することができ、並列処理が可能となる。
【0039】
図8を参照しながら説明したように、デッドロック回避方法では、開始特定処理において、処理開始ノードから処理を開始するように、処理の順番を指示する処理順番情報を付与することができる。同様に、デッドロック回避装置では、デッドロック解消部502は、開始特定処理において、処理開始ノードから処理を開始するように、処理の順番を指示する処理順番情報を付与することができる。このように、処理順番情報を付与することで、処理順番を特定することができ、並列処理が可能となる。
【0040】
以上、具体例を参照しつつ本実施形態について説明した。しかし、本開示はこれらの具体例に限定されるものではない。これら具体例に、当業者が適宜設計変更を加えたものも、本開示の特徴を備えている限り、本開示の範囲に包含される。前述した各具体例が備える各要素およびその配置、条件、形状などは、例示したものに限定されるわけではなく適宜変更することができる。前述した各具体例が備える各要素は、技術的な矛盾が生じない限り、適宜組み合わせを変えることができる。
【符号の説明】
【0041】
501:グラフ構造解析部
502:デッドロック解消部