(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-27
(54)【発明の名称】プロセッサ、処理方法、および関連デバイス
(51)【国際特許分類】
G06F 9/30 20180101AFI20230620BHJP
G06F 9/38 20180101ALI20230620BHJP
G06F 17/16 20060101ALI20230620BHJP
G06F 9/50 20060101ALI20230620BHJP
【FI】
G06F9/30 350A
G06F9/38 370C
G06F9/30 310Z
G06F9/38 310G
G06F17/16 F
G06F9/50 150A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022573476
(86)(22)【出願日】2020-05-30
(85)【翻訳文提出日】2023-01-19
(86)【国際出願番号】 CN2020093627
(87)【国際公開番号】W WO2021243490
(87)【国際公開日】2021-12-09
(81)【指定国・地域】
(71)【出願人】
【識別番号】504161984
【氏名又は名称】ホアウェイ・テクノロジーズ・カンパニー・リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ジョウ、シピン
(72)【発明者】
【氏名】ジョウ、ルオユ
(72)【発明者】
【氏名】ジュ、ファン
(72)【発明者】
【氏名】スン、ウェンボ
【テーマコード(参考)】
5B013
5B033
5B056
【Fターム(参考)】
5B013AA14
5B013DD03
5B033AA01
5B033BA00
5B033BE00
5B056BB32
5B056FF05
5B056FF16
(57)【要約】
本願は、プロセッサ、処理方法、および関連デバイスを開示する。前記プロセッサは、プロセッサコアを含む。前記プロセッサコアは、命令ディスパッチユニット、および前記命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを含む。前記命令ディスパッチユニットは、デコードされた実行対象命令内の汎用計算命令を前記少なくとも1つの汎用計算ユニットに割り当て、および前記デコードされた実行対象命令内のグラフ計算制御命令を前記グラフフローユニットに割り当てるように構成されており、ここで、前記汎用計算命令は、汎用計算タスクの実行を命令するために使用され、前記グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される。前記少なくとも1つの汎用演算ユニットは、前記汎用計算命令を実行するように構成されている。前記グラフフローユニットは、前記グラフ計算制御命令を実行するように構成されている。本願によれば、プロセッサの処理効率が改善され得る。
【特許請求の範囲】
【請求項1】
プロセッサコアを備えるプロセッサであって、前記プロセッサコアは、命令ディスパッチユニット、および前記命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを有し、
前記命令ディスパッチユニットは、デコードされた実行対象命令内の汎用計算命令を前記少なくとも1つの汎用計算ユニットに割り当て、および前記デコードされた実行対象命令内のグラフ計算制御命令を前記グラフフローユニットに割り当てるように構成されており、ここで、前記汎用計算命令は、汎用計算タスクの実行を命令するために使用され、前記グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される;
前記少なくとも1つの汎用演算ユニットは、前記汎用計算命令を実行するように構成されている;および
前記グラフフローユニットは、前記グラフ計算制御命令を実行するように構成されている、
プロセッサ。
【請求項2】
前記プロセッサコアは更に、
実行対象ターゲットプログラムを取得するように構成された命令フェッチユニット;および
前記デコードされた実行対象命令を取得するために前記実行対象ターゲットプログラムをデコードするように構成された命令デコードユニット
を有する、請求項1に記載のプロセッサ。
【請求項3】
前記プロセッサコアは更に、結果ライトバックユニットを有し、前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されており;
前記少なくとも1つの汎用演算ユニットは更に、前記汎用計算タスクの第1実行結果を前記結果ライトバックユニットに送信するように構成されており、ここで、前記汎用計算タスクの前記第1実行結果は、前記汎用計算命令が実行された後に取得される結果である;
前記グラフフローユニットは更に、前記グラフ計算タスクの第2実行結果を前記結果ライトバックユニットに送信するように構成されており、ここで、前記グラフ計算タスクの前記第2実行結果は、前記グラフ計算制御命令が実行された後に取得される結果である;および
前記結果ライトバックユニットは、前記第1実行結果および前記第2実行結果のうちの一方または両方を前記命令ディスパッチユニットにライトバックするように構成されている、
請求項1または2に記載のプロセッサ。
【請求項4】
前記プロセッサは更に、メモリユニットを備え、前記グラフフローユニットは、N個の計算ノードを含み、前記グラフ計算制御命令は、グラフ構築開始命令を含み、前記グラフ構築開始命令は、前記メモリユニット内のターゲットアドレスを保持し;および
前記グラフフローユニットは具体的に、前記グラフ構築開始命令を受信し、および前記ターゲットアドレスに基づきグラフ構築ブロック情報を前記メモリユニットから読み取るように構成されており、ここで、前記グラフ構築ブロック情報は、前記N個の計算ノードの各々の演算方法、および前記N個の計算ノードの接続およびシーケンス情報を含む、
請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
前記グラフ計算制御命令は、パラメータ受け渡し命令を含み、前記パラメータ受け渡し命令は、M個の計算ノードの識別子、および前記M個の計算ノードの前記識別子に個別に対応する入力パラメータを保持し、前記M個の計算ノードは、前記N個のノードのうちの幾つかまたは全てのノードであり;および
前記グラフフローユニットは、前記パラメータ受け渡し命令を受信し、および前記M個の計算ノードの前記識別子に個別に対応する前記入力パラメータを前記M個の計算ノードに個別に入力するように構成されている、
請求項4に記載のプロセッサ。
【請求項6】
前記N個の計算ノードの前記接続およびシーケンス情報は、L個のエッジに個別に対応するソースノードおよび宛先ノードを含み、前記グラフフローユニットは具体的に、
前記N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し;
入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のために前記ターゲット計算ノードに対応する演算方法に入力して計算結果を取得し;および
前記L個のエッジに個別に対応する前記ソースノードおよび前記宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力する
ように構成されている、請求項5に記載のプロセッサ。
【請求項7】
前記グラフ計算制御命令は、グラフ計算開始命令を含み、前記グラフフローユニットは具体的に、
前記グラフ計算開始命令を受信した後、前記グラフフローユニットにより読み取られる前記グラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、および前記M個の計算ノード内の前記入力パラメータが入力されているかどうかを判断し;および
前記グラフ構築ブロック情報が、前記事前に開始されたグラフ構築ブロックの前記アドレスと一致し、且つ、前記M個の計算ノード内の前記入力パラメータが入力されている場合に、前記グラフ計算タスクの実行を開始する
ように構成されている、請求項5に記載のプロセッサ。
【請求項8】
前記命令ディスパッチユニットは更に、
前記グラフフローユニットが前記グラフ計算開始命令を受信した後、前記グラフ計算タスクが完了する前に前記プロセッサコアを制御してブロック状態に入らせる
ように構成されている、請求項7に記載のプロセッサ。
【請求項9】
前記命令ディスパッチユニットは更に、
実行結果同期命令を前記グラフフローユニットに送信し、および前記グラフフローユニットが前記実行結果同期命令を受信した後、前記グラフ計算タスクが完了する前に、前記プロセッサコアを制御してブロック状態に入らせる
ように構成されている、請求項7に記載のプロセッサ。
【請求項10】
前記命令ディスパッチユニットは更に、
前記グラフフローユニットが前記グラフ計算タスクを完了した後、前記プロセッサコアを制御して前記ブロック状態を終了させる
ように構成されている、請求項8または9に記載のプロセッサ。
【請求項11】
前記プロセッサコアは更に、結果ライトバックユニットを有し、前記結果ライトバックユニットは、複数のレジスタを含み、前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されており、前記グラフ計算制御命令は、パラメータ復帰命令を含み、前記パラメータ復帰命令は、K個の計算ノードの識別子、および前記K個の計算ノードの前記識別子に個別に対応するレジスタを保持し;および
前記グラフフローユニットは具体的に、前記K個の計算ノードの計算結果を前記結果ライトバックユニット内の前記対応するレジスタに個別に送信するよう制御するように構成されている、
請求項4から10のいずれか一項に記載のプロセッサ。
【請求項12】
前記汎用計算命令が汎用算術論理命令を含み、前記少なくとも1つの汎用演算ユニットは、
前記命令ディスパッチユニットにより送信される前記汎用算術論理命令を受信し、および論理演算を実行するように構成された、算術論理ユニットALU
を含む、請求項1から11のいずれか一項に記載のプロセッサ。
【請求項13】
前記汎用計算命令は、ロード/ストア命令を含み、前記少なくとも1つの汎用演算ユニットは、
前記命令ディスパッチユニットにより送信される前記ロード/ストア命令を受信し、およびロード/ストア操作を実行するように構成された、ロード/ストアユニットLSU
を含む、請求項1から12のいずれか一項に記載のプロセッサ。
【請求項14】
前記グラフ計算制御命令は、データ読み取り/書き込み命令を含み、前記データ読み取り/書き込み命令は、ロード/ストアアドレスを保持し、前記グラフフローユニットは更に、
前記データ読み取り/書き込み命令内の前記ロード/ストアアドレスに基づき、データを前記ロード/ストアユニットLSUから読み取るか、または、データを前記ロード/ストアユニットLSUに書き込む
ように構成されている、請求項13に記載のプロセッサ。
【請求項15】
前記少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUを含み、前記グラフ計算タスクは、浮動小数点演算を含み、前記グラフフローユニットは更に、
前記浮動小数点演算のデータを計算のために前記浮動小数点ユニットFPUに送信し、および前記浮動小数点ユニットFPUによりフィードバックされる計算結果を受信する
ように構成されている、請求項1から14のいずれか一項に記載のプロセッサ。
【請求項16】
前記少なくとも1つの汎用演算ユニットは更に、ベクトル演算ユニットSIMDを含み、前記グラフ計算タスクは、ベクトル演算を含み、前記グラフフローユニットは更に、
前記ベクトル演算のデータを計算のために前記ベクトル演算ユニットSIMDに送信し、および前記ベクトル演算ユニットSIMDによりフィードバックされる計算結果を受信する
ように構成されている、請求項1から15のいずれか一項に記載のプロセッサ。
【請求項17】
プロセッサに適用される処理方法であって、前記プロセッサは、プロセッサコアを含み、前記プロセッサコアは、命令ディスパッチユニット、および前記命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを含み、前記処理方法は、
前記命令ディスパッチユニットが、デコードされた実行対象命令内の汎用計算命令を前記少なくとも1つの汎用計算ユニットに割り当て、および前記デコードされた実行対象命令内のグラフ計算制御命令を前記グラフフローユニットに割り当て、ここで、前記汎用計算命令は、汎用計算タスクの実行を命令するために使用され、前記グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される;
前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行する;および
前記グラフフローユニットが前記グラフ計算制御命令を実行する
ことを備える、方法。
【請求項18】
前記プロセッサコアは更に、命令フェッチユニットおよび命令デコードユニットを含み、前記方法は更に、
前記命令フェッチユニットが実行対象ターゲットプログラムを取得する;および
前記命令デコードユニットが、前記デコードされた実行対象命令を取得するために前記実行対象ターゲットプログラムをデコードする
ことを備える、請求項17に記載の方法。
【請求項19】
前記プロセッサコアは更に、結果ライトバックユニットを含み、前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されており、前記方法は更に、
前記少なくとも1つの汎用演算ユニットが前記汎用計算タスクの第1実行結果を前記結果ライトバックユニットに送信し、ここで、前記汎用計算タスクの前記第1実行結果は、前記汎用計算命令が実行された後に取得される結果である;
前記グラフフローユニットが前記グラフ計算タスクの第2実行結果を前記結果ライトバックユニットに送信し、ここで、前記グラフ計算タスクの前記第2実行結果は、前記グラフ計算制御命令が実行された後に取得される結果である;および
前記結果ライトバックユニットが前記第1実行結果および前記第2実行結果のうちの一方または両方を前記命令ディスパッチユニットにライトバックする
ことを備える、請求項17または18に記載の方法。
【請求項20】
前記プロセッサは更に、メモリユニットを含み、前記グラフフローユニットは、N個の計算ノードを含み、前記グラフ計算制御命令は、グラフ構築開始命令を含み、前記グラフ構築開始命令は、前記メモリユニット内のターゲットアドレスを保持し、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、
前記グラフフローユニットが前記グラフ構築開始命令を受信し、および前記ターゲットアドレスに基づきグラフ構築ブロック情報を前記メモリユニットから読み取り、ここで、前記グラフ構築ブロック情報は、前記N個の計算ノードの各々の演算方法、および前記N個の計算ノードの接続およびシーケンス情報を含む
ことを有する、請求項17から19のいずれか一項に記載の方法。
【請求項21】
前記グラフ計算制御命令は、パラメータ受け渡し命令を含み、前記パラメータ受け渡し命令は、M個の計算ノードの識別子、および前記M個の計算ノードの前記識別子に個別に対応する入力パラメータを保持し、前記M個の計算ノードは、前記N個のノードのうちの幾つかまたは全てのノードであり、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、
前記グラフフローユニットが前記パラメータ受け渡し命令を受信し、および前記M個の計算ノードの前記識別子に個別に対応する前記入力パラメータを前記M個の計算ノードに個別に入力する
ことを有する、請求項20に記載の方法。
【請求項22】
前記N個の計算ノードの前記接続およびシーケンス情報は、L個のエッジに個別に対応するソースノードおよび宛先ノードを含み、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、
前記グラフフローユニットが、前記N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し、入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のために前記ターゲット計算ノードに対応する演算方法に入力して計算結果を取得し、および前記L個のエッジに個別に対応する前記ソースノードおよび前記宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力する
ことを有する、請求項21に記載の方法。
【請求項23】
前記グラフ計算制御命令は、グラフ計算開始命令を含み、前記グラフフローユニットが前記グラフ計算タスクの実行結果を取得するために前記グラフ計算制御命令を実行することが、
前記グラフ計算開始命令を受信した後、前記グラフフローユニットが、前記グラフフローユニットにより読み取られる前記グラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、および前記M個の計算ノード内の前記入力パラメータが入力されているかどうかを判断し、および前記グラフ構築ブロック情報が、前記事前に開始されたグラフ構築ブロックの前記アドレスと一致し、且つ、前記M個の計算ノード内の前記入力パラメータが入力されている場合に、前記グラフ計算タスクの実行を開始する
ことを含む、請求項21に記載の方法。
【請求項24】
前記方法は更に、
前記グラフフローユニットが前記グラフ計算開始命令を受信した後、前記グラフ計算タスクが完了する前に、前記命令ディスパッチユニットが前記プロセッサコアを制御してブロック状態に入らせる
ことを備える、請求項23に記載の方法。
【請求項25】
前記方法は更に、
前記命令ディスパッチユニットが実行結果同期命令を前記グラフフローユニットに送信し、および前記グラフフローユニットが前記実行結果同期命令を受信した後、前記グラフ計算タスクが完了する前に、前記プロセッサコアを制御してブロック状態に入らせる
ことを備える、請求項23に記載の方法。
【請求項26】
前記方法は更に、
前記グラフフローユニットが前記グラフ計算タスクを完了した後、前記命令ディスパッチユニットが前記プロセッサコアを制御して前記ブロック状態を終了させる
ことを備える、請求項24または25に記載の方法。
【請求項27】
前記プロセッサコアは更に、結果ライトバックユニットを含み、前記結果ライトバックユニットは、複数のレジスタを含み、前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されており、前記グラフ計算制御命令は、パラメータ復帰命令を含み、前記パラメータ復帰命令は、K個の計算ノードの識別子、および前記K個の計算ノードの前記識別子に個別に対応するレジスタを保持し;および前記グラフフローユニットが前記グラフ計算タスクの実行結果を取得するために前記グラフ計算制御命令を実行することが、
前記グラフフローユニットが前記K個の計算ノードの計算結果を前記結果ライトバックユニット内の前記対応するレジスタに個別に送信するよう制御する
ことを含む、請求項20から26のいずれか一項に記載の方法。
【請求項28】
前記汎用計算命令は、汎用算術論理命令を含み、前記少なくとも1つの汎用演算ユニットは、算術論理ユニットALUを含み、前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行することは、
前記算術論理ユニットALUが、前記命令ディスパッチユニットにより送信される汎用算術論理命令を受信し、および論理演算を実行する
ことを有する、請求項17から27のいずれか一項に記載の方法。
【請求項29】
前記汎用計算命令は、ロード/ストア命令を含み、前記少なくとも1つの汎用演算ユニットは、ロード/ストアユニットLSUを含み、前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行して前記汎用計算タスクの実行結果を取得することが、
前記ロード/ストアユニットLSUが、前記命令ディスパッチユニットにより送信されるロード/ストア命令を受信し、およびロード/ストア操作を実行する
ことを含む、請求項17から28のいずれか一項に記載の方法。
【請求項30】
前記グラフ計算制御命令は、データ読み取り/書き込み命令を含み、前記データ読み取り/書き込み命令は、ロード/ストアアドレスを保持し、前記方法は更に、
前記グラフフローユニットが、前記データ読み取り/書き込み命令内の前記ロード/ストアアドレスに基づき、データを前記ロード/ストアユニットLSUから読み取るか、または、データを前記ロード/ストアユニットLSUに書き込む
ことを備える、請求項29に記載の方法。
【請求項31】
前記少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUを含み、前記グラフ計算タスクは、浮動小数点演算を含み、前記方法は更に、
前記グラフフローユニットが前記浮動小数点演算のデータを計算のために前記浮動小数点ユニットFPUに送信し、および前記浮動小数点ユニットFPUによりフィードバックされる計算結果を受信する
ことを備える、請求項17から30のいずれか一項に記載の方法。
【請求項32】
前記少なくとも1つの汎用演算ユニットは更に、ベクトル演算ユニットSIMDを含み、前記グラフ計算タスクは、ベクトル演算を含み、前記方法は更に、
前記グラフフローユニットが前記ベクトル演算のデータを計算のために前記ベクトル演算ユニットSIMDに送信し、および前記ベクトル演算ユニットSIMDによりフィードバックされる計算結果を受信する
ことを備える、請求項17から31のいずれか一項に記載の方法。
【請求項33】
コンピュータ可読記憶媒体であって、前記コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、前記コンピュータプログラムがプロセッサにより実行されると、請求項17から32のいずれか一項に記載の方法が実装される、コンピュータ可読記憶媒体。
【請求項34】
コンピュータプログラムであって、前記コンピュータプログラムは、命令を備え、前記コンピュータプログラムがプロセッサにより実行されると、前記プロセッサは、請求項17から32のいずれか一項に記載の方法を実行することができる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、有向グラフ計算技術の分野、特に、プロセッサ、処理方法、および関連デバイスに関する。
【背景技術】
【0002】
様々な分野におけるデータのサイズおよび複雑さの増大に伴い、プロセッサの計算能力および処理性能の要件がますます高くなってきている。スーパースカラ(Superscalar)プロセッサ(Central Processing Unit、CPU)アーキテクチャとは、1つのプロセッサコアで命令レベルの並列処理の一種の並列演算を実行し、クロックサイクルごとに複数の命令を伝送することにより性能を改善し、ハードウェア論理ユニットを使用することにより並列命令間の依存関係を解決することを意味する。この技術では、同じCPU周波数でより高いCPUスループット(throughput)を実装することができる。
【0003】
しかしながら、スーパースカラCPU内の多数のハードウェア論理ユニット間の依存関係に起因して、ハードウェアの設計および検証の難易度が増し、大量のエネルギー消費および大きなハードウェア領域が消費される。加えて、スーパースカラCPUの動作周波数、命令幅、および複雑さなどを改善することがますます難しくなってきているので、スーパースカラCPUの性能を線形的にスケーリング(Scale)することができず、電力消費の増大が性能の向上より大きくなり、エネルギー効率が低下する。
【0004】
上述の技術的課題について、従来技術では、グラフフローアクセラレータという解決策が提案されており、明示的データフローのための特殊化エンジン(Specialization Engine for Explicit Dataflow、SEED)アーキテクチャと呼ばれている。グラフフローアクセラレータの核となる概念は、命令セットレベルで命令間の依存関係を明示的(Explicit)に説明し、命令間の並列度を実行のためにハードウェアに直接表示して、プロセッサの加速度効果を得ることである。このアーキテクチャでは、グラフフローアクセラレータとスーパースカラプロセッサとが組み合わされてハイブリッドアーキテクチャになり、グラフフローアクセラレータおよびスーパースカラ(superscalar)プロセッサが一組のキャッシュを共有し、スーパースカラプロセッサ内のレジスタライブイン(liveIn)をグラフフローアクセラレータに伝送するために一組の通信バスが確立される。計算を完了した後、グラフフローアクセラレータは、別個の通信バスを使用することによりレジスタライブアウト(liveOut)をスーパースカラプロセッサに送り返す。グラフ計算が終了した後、スーパースカラプロセッサ内のレジスタに計算結果が伝送される。SEEDアーキテクチャでは、グラフアーキテクチャの実行に適したプログラムセグメントが、実行のためにグラフフローアクセラレータにスケジューリングされてよく、グラフアーキテクチャに適していないプログラムセグメントが、実行のためにスーパースカラプロセッサにスケジューリングされる。従って、グラフアーキテクチャとスーパースカラアーキテクチャとを切り替える効果が得られる。
【0005】
しかしながら、上述のSEEDアーキテクチャでは、アクセラレータモードが使用され、具体的には、グラフフローアクセラレータおよび汎用プロセッサは、互いに完全に独立したシステムであり、グラフフローアクセラレータには、独立したデータおよび命令入力チャネルがあり、スーパースカラプロセッサは、メッセージチャネルまたは共有メモリを使用することによりグラフフローアクセラレータと通信する。このように、スーパースカラプロセッサとグラフフローアクセラレータとの間の通信遅延が比較的大きい。加えて、グラフフローアクセラレータは、動作できない割り込まれたオペレーティングシステムを処理することができず、複数のプログレスで共有され得ないので、SEEDアーキテクチャは、ハードウェア(グラフフローアクセラレータおよびスーパースカラプロセッサ)の並列度を更に改善することができず、最終的に、アーキテクチャの動作効率および全体的性能を改善することができず、結果的に、グラフフローアクセラレータの可用性が大幅に低下する。
【0006】
要約すると、汎用プロセッサの動作を高速化するためにより効果的なグラフ計算モードを提供する方法が、現在解決すべき緊急の技術的課題になっている。
【発明の概要】
【0007】
本発明の実施形態は、グラフ計算モードで汎用プロセッサの動作を高速化する機能を実装するための、プロセッサ、処理方法、および関連デバイスを提供する。
【0008】
第1態様によれば、本発明のある実施形態は、プロセッサコアを含むプロセッサを提供する。前記プロセッサコアは、命令ディスパッチユニット、および前記命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを含む。前記命令ディスパッチユニットは、デコードされた実行対象命令内の汎用計算命令を前記少なくとも1つの汎用計算ユニットに割り当て、および前記デコードされた実行対象命令内のグラフ計算制御命令を前記グラフフローユニットに割り当てるように構成されており、ここで、前記汎用計算命令は、汎用計算タスクの実行を命令するために使用され、前記グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される。前記少なくとも1つの汎用演算ユニットは、前記汎用計算命令を実行するように構成されている。前記グラフフローユニットは、前記グラフ計算制御命令を実行するように構成されている。
【0009】
本発明のある実施形態は、プロセッサを提供する。このプロセッサは、グラフ計算モードで汎用プロセッサの動作を高速化する機能を実装し、具体的には、ハードウェア向けの設計およびソフトウェア向けの設計を含む。ハードウェアの観点から、本発明のこの実施形態では、ハードウェアグラフフローユニットがプロセッサのプロセッサコア(Core)に追加され、別の汎用演算ユニット(例えば、算術論理ユニットまたは浮動小数点ユニット)と共にプロセッサの実行パイプライン内の位置に設置され、その結果、プロセッサは、グラフフローユニットを呼び出すことにより命令を独立して実行するか、または、グラフフローユニットおよび別の汎用演算ユニットを呼び出して複数の命令を並行して実行することによりグラフ計算を高速化することができる。ソフトウェアの観点から、本発明のこの実施形態では、汎用プロセッサの命令セットに基づき、グラフ計算の高速化に特化した拡張命令(例えば、グラフ計算制御命令を含む)を設計し、命令ディスパッチステージで、プロセッサコア内の命令ディスパッチユニットを使用することによりグラフ計算制御命令を実行のためにグラフフローユニットに直接ディスパッチして、グラフ計算を高速化する。本願では、グラフフローユニットがプロセッサコア内に設置されるので、コア内の命令ディスパッチユニットは、グラフフローユニットに接続され、グラフフローユニットと直接通信してよく、その結果、グラフ計算制御命令は、グラフフローユニットに直接ディスパッチされ、別のメッセージチャネルもロード/ストア方式も使用せずに通信が実行され、このように、通信遅延が大幅に削減される。加えて、グラフフローユニットがプロセッサコア内に設置されるので、グラフフローユニットと別の演算ユニットとの間の同期動作または非同期動作が制御されてよく、その結果、プロセッサの並列度および演算効率が改善される。加えて、幾つかの繰り返し実行される命令シーケンスをグラフアーキテクチャ(すなわち、グラフフローユニット)で繰り返し実行して、プロセッサコアが命令をメモリユニットからフェッチする回数および帯域幅を削減し、命令間の依存関係のチェック、ジャンプ予測、およびレジスタアクセスのオーバヘッドを削減してよく、その結果、グラフフローユニットの演算リソースを効果的に使用し、プロセッサの動作効率および性能を更に改善する。結論として、本願では、プロセッサのマイクロアーキテクチャ設計および関連する命令セットの拡張に基づき、グラフアーキテクチャを汎用プロセッサに統合し、汎用プロセッサのコア内の実行ユニットとして使用して、実行パイプラインステージで、グラフ計算タスクを独立して実行するか、または、グラフ計算タスクを別の汎用演算ユニットと並行して実行する。このように、グラフフローユニットは、1つまたは複数の汎用演算ユニットと連携し、その結果、同じプロセッサ内で計算タスクを効果的に実行する機能が実装される。
【0010】
考えられる実装において、前記プロセッサコアは更に、実行対象ターゲットプログラムを取得するように構成された命令フェッチユニット;および前記デコードされた実行対象命令を取得するために前記実行対象ターゲットプログラムをデコードするように構成された命令デコードユニットを含む。
【0011】
本発明のこの実施形態において、プロセッサコアは更に、命令フェッチユニットおよび命令デコードユニットを含み、プロセッサコアの外部には、メモリユニットが更に含まれる。プロセッサコアの外部のメモリユニットは、実行対象ターゲットプログラムを記憶する。プロセッサコア内の命令フェッチユニットは、実行対象ターゲットプログラムをメモリユニットから取得し、コア内の命令デコードユニットは、プロセッサ内の実行ユニット(例えば、汎用演算ユニットまたはグラフフローユニット)により直接実行され得る命令を取得するためにデコードを実行し、その結果、命令は、実行のために対応する実行ユニットにディスパッチされる。
【0012】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、グラフフローユニットおよび汎用演算ユニットは、結果ライトバックユニットに個別に接続される。前記少なくとも1つの汎用演算ユニットは更に、前記汎用計算タスクの第1実行結果を前記結果ライトバックユニットに送信するように構成されており、ここで、前記汎用計算タスクの前記第1実行結果は、前記汎用計算命令が実行された後に取得される結果である。前記グラフフローユニットは更に、前記グラフ計算タスクの第2実行結果を前記結果ライトバックユニットに送信するように構成されており、ここで、前記グラフ計算タスクの前記第2実行結果は、前記グラフ計算制御命令が実行された後に取得される結果である。前記結果ライトバックユニットは、前記第1実行結果および前記第2実行結果のうちの一方または両方を前記命令ディスパッチユニットにライトバックするように構成されている。
【0013】
本発明のこの実施形態において、プロセッサコアは更に、結果ライトバックユニットを含む。結果ライトバックユニットは、各汎用演算ユニットまたはグラフフローユニットが計算を実行した後に取得される結果を一時的に記憶し、幾つかまたは全ての計算結果を命令ディスパッチユニットにライトバックしてよく、その結果、命令ディスパッチユニットは、関連パラメータをディスパッチする。更に、結果ライトバックユニットは更に、アウトオブオーダ実行を通じて取得される計算結果を並べ替えてよい。例えば、命令をフェッチするシーケンスで命令の計算結果が並べ替えられ、ある命令は、その命令よりも前の命令の実行が完了するまで提出されず、その結果、命令全体の演算結果が完了する。プロセッサコア内の命令ディスパッチユニットには、グラフフローユニットの関連演算ステータス(すなわち、結果ライトバックユニットに一時的に記憶される中間演算結果または最終演算結果)を取得する権利および条件もあり、その結果、グラフフローユニットに対する制御およびアクセスをより良く行うことができ、グラフフローユニットと別の実行ユニットとの間の同期動作または非同期動作を更に制御することができる。このように、プロセッサの並列度および動作効率が改善される。
【0014】
考えられる実装において、前記プロセッサは更に、メモリユニットを備え、前記グラフフローユニットは、N個の計算ノードを含み、前記グラフ計算制御命令は、グラフ構築開始命令を含み、前記グラフ構築開始命令は、前記メモリユニット内のターゲットアドレスを保持する。前記グラフフローユニットは具体的に、前記グラフ構築開始命令を受信し、および前記ターゲットアドレスに基づきグラフ構築ブロック情報を前記メモリユニットから読み取るように構成されている。前記グラフ構築ブロック情報は、前記N個の計算ノードの各々の演算方法、および前記N個の計算ノードの接続およびシーケンス情報を含む。
【0015】
本発明のこの実施形態では、グラフフローユニットにより受信されるグラフ計算制御命令が具体的にグラフ構築開始命令である場合、メモリユニットに記憶されるグラフ構築ブロック情報を、プロセッサコアの外部のメモリユニット内にあり命令内に保持されるターゲットアドレスに基づき読み取るようグラフフローユニットに命令するために、命令が使用される。グラフ構築ブロック情報は、グラフフローユニット内の各計算ノードの対応する演算方法と、複数の計算ノード間の依存関係、すなわち、対応関係にある計算ノード(すなわち、グラフ計算中のエッジに対応する2つの計算ノード)の計算結果と入力条件との関係とを含む。グラフフローユニットは、上述の情報に基づき完全なグラフ構築ブロックの計算を完了してよい。なお、1つのグラフ構築ブロックは、グラフ計算中の1つのグラフ構築ブロックまたは全てのグラフ構築ブロックであってよく、すなわち、1つの完全なグラフ計算タスクは、1つのグラフ構築ブロック、または分割を通じて取得される複数のグラフ構築ブロックを含んでよい。
【0016】
考えられる実装において、前記グラフ計算制御命令は、パラメータ受け渡し命令を含み、前記パラメータ受け渡し命令は、M個の計算ノードの識別子、および前記M個の計算ノードの前記識別子に個別に対応する入力パラメータを保持し、前記M個の計算ノードは、前記N個のノードのうちの幾つかまたは全てのノードである。前記グラフフローユニットは、前記パラメータ受け渡し命令を受信し、および前記M個の計算ノードの前記識別子に個別に対応する前記入力パラメータを前記M個の計算ノードに個別に入力するように構成されている。
【0017】
本発明のこの実施形態では、グラフフローユニットにより受信されるグラフ計算制御命令が具体的にパラメータ受け渡し命令である場合、パラメータ受け渡し命令は、1つのグラフ構築ブロック計算プロセスで複数の計算ノードが必要とする初期入力パラメータを含む。複数の計算ノードがグラフフローユニットの外部から対応するパラメータを取得した後、グラフフローユニットは、グラフ計算タスクの実行を開始する条件を満たし、すなわち、グラフ計算の実行を開始してよい。
【0018】
考えられる実装において、前記N個の計算ノードの前記接続およびシーケンス情報は、L個のエッジに個別に対応するソースノードおよび宛先ノードを含む。前記グラフフローユニットは具体的に、前記N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し;入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のために前記ターゲット計算ノードに対応する演算方法に入力して計算結果を取得し;および前記L個のエッジに個別に対応する前記ソースノードおよび前記宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力するように構成されている。
【0019】
本発明のこの実施形態において、グラフフローユニット内の各計算ノードは、計算ノードの演算方法がロードされ、且つ、計算ノードの入力パラメータが取得されることを条件として、グラフ計算の実行を開始してよい。しかしながら、幾つかの計算ノード(例えば、エッジに対応するソースノード)は、初期入力パラメータをグラフフローユニットの外部から取得し、幾つかの他の計算ノード(例えば、エッジに対応する宛先ノード)は、計算ノードの計算結果を計算ノードの入力パラメータとして使用してグラフ計算を開始する前に、計算ノードと対応関係にある計算ノード(例えば、ソースノード)の計算の完了を待たなければならない場合がある。従って、計算ノードの計算開始時刻に一貫性がない場合がある。しかしながら、各計算ノードは、演算方法および入力パラメータ(左入力パラメータ、右入力パラメータ、または条件付きパラメータを含んでよい)の準備ができた後に演算を開始してよい。
【0020】
考えられる実装において、グラフ計算制御命令は、グラフ計算開始命令を含む。前記グラフフローユニットは具体的に、前記グラフ計算開始命令を受信した後、前記グラフフローユニットにより読み取られる前記グラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、および前記M個の計算ノード内の前記入力パラメータが入力されているかどうかを判断し;および前記グラフ構築ブロック情報が、前記事前に開始されたグラフ構築ブロックの前記アドレスと一致し、且つ、前記M個の計算ノード内の前記入力パラメータが入力されている場合に、前記グラフ計算タスクの実行を開始するように構成されている。
【0021】
本発明のこの実施形態において、グラフフローユニットは、グラフ計算制御命令内のグラフ計算開始命令を使用することによりトリガされて、計算を開始する前に関連チェック(例えば、グラフ構築ブロック情報が正しいかどうか、および、初期入力パラメータの準備ができているかどうかのチェックを含む)を実行する。上述のチェックを完了した後、グラフフローユニットは、グラフ構築が完了していると判断し、グラフ計算タスクの実行を開始してよい。
【0022】
考えられる実装において、前記命令ディスパッチユニットは更に、前記グラフフローユニットが前記グラフ計算開始命令を受信した後、前記グラフ計算タスクが完了する前に前記プロセッサコアを制御してブロック状態に入らせるように構成されている。更にオプションで、前記命令ディスパッチユニットは更に、前記グラフフローユニットが前記グラフ計算タスクを完了した後、前記プロセッサコアを制御して前記ブロック状態を終了させるように構成されている。
【0023】
本発明のこの実施形態において、プロセッサコアは、グラフ計算機能を同期的に有効にしてよい(すなわち、グラフフローユニットおよび別の汎用演算ユニットは、タスクを直列に実行してよい)。すなわち、グラフフローユニットがグラフ計算タスクを実行するとき、プロセッサコアのパイプラインがブロックされ、グラフフローユニットは、グラフフローユニットがグラフ計算タスクを完了するまでブロック状態を終了せず、この期間中は、グラフフローユニットのみがタスクを実行しており、別の演算ユニットは一時的にタスクを実行できないことが保証される。このように、プロセッサの電力消費が削減される。命令は、プロセッサコア内の別の演算ユニットとグラフフローユニットとの間の計算モードの切り替えを実装してよく、同期的に動作するプログラムに適用されてよい。
【0024】
考えられる実装において、前記命令ディスパッチユニットは更に、実行結果同期命令を前記グラフフローユニットに送信し、および前記グラフフローユニットが前記実行結果同期命令を受信した後、前記グラフ計算タスクが完了する前に、前記プロセッサコアを制御してブロック状態に入らせるように構成されている。更にオプションで、前記命令ディスパッチユニットは更に、前記グラフフローユニットが前記グラフ計算タスクを完了した後、前記プロセッサコアを制御して前記ブロック状態を終了させるように構成されている。
【0025】
本発明のこの実施形態において、プロセッサコアは、グラフ計算機能を非同期的に有効にしてよい(すなわち、グラフフローユニットおよび別の汎用演算ユニットは、タスクを並列に実行してよい)。すなわち、グラフフローユニットがグラフ計算タスクを実行するとき、プロセッサコアのパイプラインがブロックされず、別の演算ユニットが正常に動作することができる。プロセッサが命令ディスパッチユニットを使用することにより実行結果同期命令をグラフフローユニットに送信するとき(例えば、別の演算ユニットの演算がグラフフローユニットの実行結果に依存する必要があるとき)、この場合にグラフフローユニットがグラフ計算タスクを完了していないならば、プロセッサコアのパイプラインは、ブロックされるように制御され、プロセッサコアは、グラフフローユニットがグラフ計算タスクを完了して実行結果をフィードバックして初めてブロック状態を終了して、別の演算ユニットがグラフフローユニットの実行結果を必要とする場合に、グラフフローユニットが実行結果をフィードバックするときに別の演算ユニットが動作を継続できることが保証される。このように、プロセッサコアの並列度を改善することが保証される。命令は、プロセッサ内の別の演算ユニットとグラフフローユニットとが並列である計算モードを実装してよく、非同期的に動作するプログラムに適用されてよい。
【0026】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、結果ライトバックユニットは、複数のレジスタを含む。前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されている。前記グラフ計算制御命令は、パラメータ復帰命令を含み、前記パラメータ復帰命令は、K個の計算ノードの識別子、および前記K個の計算ノードの前記識別子に個別に対応するレジスタを保持する。前記グラフフローユニットは具体的に、前記K個の計算ノードの計算結果を前記結果ライトバックユニット内の前記対応するレジスタに個別に送信するよう制御するように構成されている。
【0027】
本発明のこの実施形態では、グラフフローユニットのN個の計算ノードについて、最終計算を完了した後、幾つかの計算ノードが計算結果をグラフフローユニットの外部の結果ライトバックユニットに出力しなければならない場合があり、すなわち、グラフフローユニットは、受信されたグラフ計算制御命令内のパラメータ復帰命令内に保持される、K個の計算ノードの識別子に基づき、K個の計算ノードの最終計算結果をグラフ構築ブロック全体の計算結果として使用し、その計算結果をグラフフローユニットの外部の結果ライトバックユニットに出力するよう制御してよく、その結果、計算結果に基づき、後続の実行ユニットが更なる計算を実行する。
【0028】
考えられる実装では、汎用計算命令が汎用算術論理命令を含む。前記少なくとも1つの汎用演算ユニットは、前記命令ディスパッチユニットにより送信される前記汎用算術論理命令を受信し、および論理演算を実行するように構成された、算術論理ユニットALUを含む。オプションで、汎用計算命令は、ロード/ストア命令を含む。前記少なくとも1つの汎用演算ユニットは、前記命令ディスパッチユニットにより送信される前記ロード/ストア命令を受信し、およびロード/ストア操作を実行するように構成された、ロード/ストアユニットLSUを含む。
【0029】
本発明のこの実施形態において、少なくとも1つの演算ユニットは更に、算術論理ユニットまたはロード/ストアユニットを含んでよい。算術論理ユニットは主に、関連する論理演算を実行するように構成されており、ロード/ストアユニットは、ロード/ストア操作を実行するように構成されている。すなわち、上述のユニットおよびグラフフローユニットは、実行パイプラインステージにあり、CPUでのデコード後に様々なタイプの計算タスクを共同で完了し、計算タスクは、プロセッサの計算タスクをより効率的に完了するために、並列または直列に実行されてもよいし、部分的に並列に実行され、部分的に直列に実行されてもよい。
【0030】
考えられる実装において、グラフ計算制御命令は、データ読み取り/書き込み命令を含み、データ読み取り/書き込み命令は、ロード/ストアアドレスを保持する。前記グラフフローユニットは更に、前記データ読み取り/書き込み命令内の前記ロード/ストアアドレスに基づき、データを前記ロード/ストアユニットLSUから読み取るか、または、データを前記ロード/ストアユニットLSUに書き込むように構成されている。
【0031】
本発明のこの実施形態において、プロセッサコア内のグラフフローユニットは、プロセッサコア内のロード/ストアユニットの機能を多重化し、関連するデータ読み取り/書き込み命令内の読み取り/書き込みアドレスに基づき、データをロード/ストアユニットLSUから読み取るか、または、データをロード/ストアユニットLSUに書き込んでよい。
【0032】
考えられる実装において、前記少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUを含み、前記グラフ計算タスクは、浮動小数点演算を含む。前記グラフフローユニットは更に、前記浮動小数点演算のデータを計算のために前記浮動小数点ユニットFPUに送信し、および前記FPUによりフィードバックされる計算結果を受信するように構成されている。オプションで、前記少なくとも1つの汎用演算ユニットは更に、ベクトル演算ユニットSIMDを含む。前記グラフ計算タスクは、ベクトル演算を含む。前記グラフフローユニットは更に、前記ベクトル演算のデータを計算のために前記ベクトル演算ユニットSIMDに送信し、および前記SIMDによりフィードバックされる計算結果を受信するように構成されている。
【0033】
本発明のこの実施形態において、本発明のこの実施形態における汎用演算ユニットは更に、浮動小数点ユニットFPUおよび/またはベクトル演算ユニットSIMDを含んでよい。浮動小数点ユニットは、演算のデータ精度要件がより高い浮動小数点演算タスクを実行するように構成されており、ベクトル演算ユニットは、単一命令多重データ演算を実行するように構成されてよい。加えて、汎用演算ユニットおよびグラフフローユニットは両方とも、実行パイプラインステージにあり、汎用演算ユニットとグラフフローユニットとの間にデータ伝送チャネルがある。従って、グラフ計算タスクを処理するプロセスでは、浮動小数点演算に関連する計算タスクまたは単一命令多重データ計算タスクがある場合、グラフフローユニットは、その計算タスクを、対応するデータ伝送チャネルを通じて演算のために対応する汎用演算ユニットに送信してよく、対応するタイプの演算タスクを処理するために、対応する処理ユニットをグラフフローユニット内に繰り返し設置する必要はない。従って、ハードウェア領域およびオーバヘッドが大幅に削減される。
【0034】
第2態様によれば、本発明のある実施形態は、プロセッサに適用される処理方法を提供する。前記プロセッサは、プロセッサコアを含む。前記プロセッサコアは、命令ディスパッチユニット、および前記命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを含む。前記処理方法は、前記命令ディスパッチユニットが、デコードされた実行対象命令内の汎用計算命令を前記少なくとも1つの汎用計算ユニットに割り当て、および前記デコードされた実行対象命令内のグラフ計算制御命令を前記グラフフローユニットに割り当て、ここで、前記汎用計算命令は、汎用計算タスクの実行を命令するために使用され、前記グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される;前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行する;および前記グラフフローユニットが前記グラフ計算制御命令を実行することを含む。
【0035】
考えられる実装において、前記プロセッサコアは更に、命令フェッチユニットおよび命令デコードユニットを含み、前記方法は更に、前記命令フェッチユニットが実行対象ターゲットプログラムを取得する;および前記命令デコードユニットが、前記デコードされた実行対象命令を取得するために前記実行対象ターゲットプログラムをデコードすることを含む。
【0036】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、グラフフローユニットおよび汎用演算ユニットは、結果ライトバックユニットに個別に接続される。前記方法は更に、前記少なくとも1つの汎用演算ユニットが前記汎用計算タスクの第1実行結果を前記結果ライトバックユニットに送信し、ここで、前記汎用計算タスクの前記第1実行結果は、前記汎用計算命令が実行された後に取得される結果である;前記グラフフローユニットが前記グラフ計算タスクの第2実行結果を前記結果ライトバックユニットに送信し、ここで、前記グラフ計算タスクの前記第2実行結果は、前記グラフ計算制御命令が実行された後に取得される結果である;および前記結果ライトバックユニットが前記第1実行結果および前記第2実行結果のうちの一方または両方を前記命令ディスパッチユニットにライトバックすることを含む。
【0037】
考えられる実装において、前記プロセッサは更に、メモリユニットを含み、前記グラフフローユニットは、N個の計算ノードを含み、前記グラフ計算制御命令は、グラフ構築開始命令を含み、前記グラフ構築開始命令は、前記メモリユニット内のターゲットアドレスを保持し、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、前記グラフフローユニットが前記グラフ構築開始命令を受信し、および前記ターゲットアドレスに基づきグラフ構築ブロック情報を前記メモリユニットから読み取り、ここで、前記グラフ構築ブロック情報は、前記N個の計算ノードの各々の演算方法、および前記N個の計算ノードの接続およびシーケンス情報を含むことを有する。
【0038】
考えられる実装において、前記グラフ計算制御命令は、パラメータ受け渡し命令を含み、前記パラメータ受け渡し命令は、M個の計算ノードの識別子、および前記M個の計算ノードの前記識別子に個別に対応する入力パラメータを保持し、前記M個の計算ノードは、前記N個のノードのうちの幾つかまたは全てのノードであり、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、前記グラフフローユニットが前記パラメータ受け渡し命令を受信し、および前記M個の計算ノードの前記識別子に個別に対応する前記入力パラメータを前記M個の計算ノードに個別に入力することを有する。
【0039】
考えられる実装において、前記N個の計算ノードの前記接続およびシーケンス情報は、L個のエッジに個別に対応するソースノードおよび宛先ノードを含み、前記グラフフローユニットが前記グラフ計算制御命令を実行することは、前記グラフフローユニットが、前記N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し、入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のために前記ターゲット計算ノードに対応する演算方法に入力して計算結果を取得し、および前記L個のエッジに個別に対応する前記ソースノードおよび前記宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力することを有する。
【0040】
考えられる実装において、前記グラフ計算制御命令は、グラフ計算開始命令を含み、前記グラフフローユニットが前記グラフ計算タスクの実行結果を取得するために前記グラフ計算制御命令を実行することが、前記グラフ計算開始命令を受信した後、前記グラフフローユニットが、前記グラフフローユニットにより読み取られる前記グラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、および前記M個の計算ノード内の前記入力パラメータが入力されているかどうかを判断し、および前記グラフ構築ブロック情報が、前記事前に開始されたグラフ構築ブロックの前記アドレスと一致し、且つ、前記M個の計算ノード内の前記入力パラメータが入力されている場合に、前記グラフ計算タスクの実行を開始することを含む。
【0041】
考えられる実装において、前記方法は更に、前記グラフフローユニットが前記グラフ計算開始命令を受信した後、前記グラフ計算タスクが完了する前に、前記命令ディスパッチユニットが前記プロセッサコアを制御してブロック状態に入らせることを含む。
【0042】
考えられる実装において、前記方法は更に、前記命令ディスパッチユニットが実行結果同期命令を前記グラフフローユニットに送信し、および前記グラフフローユニットが前記実行結果同期命令を受信した後、前記グラフ計算タスクが完了する前に、前記プロセッサコアを制御してブロック状態に入らせることを含む。
【0043】
考えられる実装において、前記方法は更に、前記グラフフローユニットが前記グラフ計算タスクを完了した後、前記命令ディスパッチユニットが前記プロセッサコアを制御して前記ブロック状態を終了させることを含む。
【0044】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、結果ライトバックユニットは、複数のレジスタを含む。前記グラフフローユニットおよび前記少なくとも1つの汎用演算ユニットは、前記結果ライトバックユニットに個別に接続されている。前記グラフ計算制御命令は、パラメータ復帰命令を含み、前記パラメータ復帰命令は、K個の計算ノードの識別子、および前記K個の計算ノードの前記識別子に個別に対応するレジスタを保持する。前記グラフ計算制御命令は、グラフ計算開始命令を含み、前記グラフフローユニットが前記グラフ計算タスクの実行結果を取得するために前記グラフ計算制御命令を実行することが、前記グラフフローユニットが前記K個の計算ノードの計算結果を前記結果ライトバックユニット内の前記対応するレジスタに個別に送信するよう制御することを含む。
【0045】
考えられる実装において、前記汎用計算命令は、汎用算術論理命令を含み、前記少なくとも1つの汎用演算ユニットは、算術論理ユニットALUを含み、前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行することは、前記算術論理ユニットALUが、前記命令ディスパッチユニットにより送信される汎用算術論理命令を受信し、および論理演算を実行することを有する。
【0046】
代替的に、考えられる実装において、前記汎用計算命令は、ロード/ストア命令を含み、前記少なくとも1つの汎用演算ユニットは、ロード/ストアユニットLSUを含み、前記少なくとも1つの汎用演算ユニットが前記汎用計算命令を実行して前記汎用計算タスクの実行結果を取得することが、前記ロード/ストアユニットLSUが、前記命令ディスパッチユニットにより送信されるロード/ストア命令を受信し、およびロード/ストア操作を実行することを含む。
【0047】
考えられる実装において、グラフ計算制御命令は、データ読み取り/書き込み命令を含み、データ読み取り/書き込み命令は、ロード/ストアアドレスを保持する。前記方法は更に、前記グラフフローユニットが、前記データ読み取り/書き込み命令内の前記ロード/ストアアドレスに基づき、データを前記ロード/ストアユニットLSUから読み取るか、または、データを前記ロード/ストアユニットLSUに書き込むことを含む。
【0048】
考えられる実装において、前記少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUを含み、前記グラフ計算タスクは、浮動小数点演算を含む。前記方法は更に、前記グラフフローユニットが前記浮動小数点演算のデータを計算のために前記浮動小数点ユニットFPUに送信し、および前記FPUによりフィードバックされる計算結果を受信することを含む。
【0049】
代替的に、考えられる実装において、少なくとも1つの汎用演算ユニットは更に、ベクトル演算ユニットSIMDを含み、グラフ計算タスクは、ベクトル演算を含む。前記方法は更に、前記グラフフローユニットが前記ベクトル演算のデータを計算のために前記ベクトル演算ユニットSIMDに送信し、および前記SIMDによりフィードバックされる計算結果を受信することを含む。
【0050】
第3態様によれば、本願は、半導体チップを提供し、半導体チップは、第1態様の任意の実装で提供するプロセッサを含んでよい。
【0051】
第4態様によれば、本願は、半導体チップを提供し、半導体チップは、第1態様の任意の実装で提供するプロセッサと、マルチコアプロセッサに結合された内部メモリと、外部メモリとを含んでよい。
【0052】
第5態様によれば、本願は、システムオンチップSoCチップを提供し、SoCチップは、第1態様の任意の実装で提供するプロセッサと、プロセッサに結合された内部メモリと、外部メモリとを含んでよい。SoCチップは、チップを含んでもよいし、チップおよび別のディスクリートデバイスを含んでもよい。
【0053】
第6態様によれば、本願は、チップシステムを提供し、チップシステムは、第1態様の任意の実装で提供するマルチコアプロセッサを含んでよい。考えられる設計において、チップシステムは更に、メモリを含み、メモリは、動作プロセスでマルチコアプロセッサに必要なプログラム命令およびデータを記憶するように構成されている。チップシステムは、チップを含んでもよいし、チップおよび別のディスクリートコンポーネントを含んでもよい。
【0054】
第7態様によれば、本願は、処理装置を提供し、処理装置は、第2態様における任意の処理方法を実装する機能を有する。この機能は、ハードウェアにより実装されてもよいし、対応するソフトウェアを実行するハードウェアにより実装されてもよい。ハードウェアまたはソフトウェアは、この機能に対応する1つまたは複数のモジュールを含む。
【0055】
第8態様によれば、本願は、端末を提供し、端末は、プロセッサを含み、プロセッサは、第1態様の任意の実装で提供するプロセッサである。端末は更に、メモリを含んでよく、メモリは、プロセッサに結合されるように構成されており、端末に必要なプログラム命令およびデータを記憶する。端末は更に、別のデバイスまたは通信ネットワークと通信するために端末により使用される通信インタフェースを含んでよい。
【0056】
第9態様によれば、本願は、コンピュータ可読記憶媒体を提供する。コンピュータ可読記憶媒体は、コンピュータプログラムを記憶し、コンピュータプログラムがプロセッサにより実行されると、第2態様の任意の実装における処理方法の手順が実装される。
【0057】
第10態様によれば、本発明のある実施形態は、コンピュータプログラムを提供する。コンピュータプログラムは、命令を含み、コンピュータプログラムがプロセッサにより実行されると、プロセッサは、第2態様の任意の実装における処理方法の手順を実行することが可能であってよい。
【図面の簡単な説明】
【0058】
【
図1】本発明のある実施形態に係るプロセッサの構造の概略図である。
【0059】
【
図2】本発明のある実施形態に係る別のプロセッサの構造の概略図である。
【0060】
【
図3】本発明のある実施形態に係る更に別のプロセッサの構造の概略図である。
【0061】
【
図4】本発明のある実施形態に係るソースコードの包括的なコンパイルおよび実行の概略フローチャートである。
【0062】
【
図5】本発明のある実施形態に係るグラフフローユニットの計算モデルの概略図である。
【0063】
【
図6A】本発明のある実施形態に係るグラフフロー制御命令の概略図である。
【
図6B】本発明のある実施形態に係るグラフフロー制御命令の概略図である。
【0064】
【
図7】本発明のある実施形態に係るグラフ構築ブロック内の計算ノードの抽象モデルの概略図である。
【0065】
【
図8】本発明のある実施形態に係るグラフフロー命令の抽象モデルを示す。
【0066】
【
図9】本発明のある実施形態に係るデータフローグラフへのコードの抽象化の概略図である。
【0067】
【
図10】本発明のある実施形態に係る処理方法の概略フローチャートである。
【発明を実施するための形態】
【0068】
以下では、本発明の実施形態における添付図面を参照しながら本発明の実施形態について説明する。
【0069】
本願の明細書、特許請求の範囲、および添付図面において、「第1」、「第2」、「第3」、および「第4」などの用語は、複数の異なるオブジェクトを区別することを意図するものであり、特定の順序を示しているわけではない。加えて、「備える」、「有する」、「含む」という用語、およびその任意の他の変形は、非排他的な包含をカバーすることを意図するものである。例えば、一連のステップまたはユニットを含むプロセス、方法、システム、製品、またはデバイスは、列挙されているステップまたはユニットに限定されるわけではないが、列挙されていないステップまたはユニットをオプションで更に含むか、または、そのプロセス、方法、製品、またはデバイスの別の固有のステップまたはユニットをオプションで更に含む。
【0070】
本明細書で言及する「実施形態」とは、その実施形態に関連して説明する特定の特性、構造、または特徴が本発明の少なくとも1つの実施形態に含まれ得ることを意味する。本明細書の様々な場所に示すこの語句は、必ずしも同じ実施形態を指しているとは限らない場合があり、別の実施形態と相互に排他的な独立した実施形態または任意選択的な実施形態ではない。当業者には、本明細書で説明する実施形態が別の実施形態と組み合わされ得ることが明示的且つ暗黙的に解る。
【0071】
この明細書で使用する「コンポーネント」、「モジュール」、および「システム」などの用語は、コンピュータ関連のエンティティ、ハードウェア、ファームウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアを示すために使用される。例えば、コンポーネントは、限定されるわけではないが、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、および/またはコンピュータであってよい。実例として、計算デバイス上で実行されるアプリケーションおよび計算デバイスの両方がコンポーネントであってよい。1つまたは複数のコンポーネントがプロセスおよび/または実行スレッド内に常駐してよく、あるコンポーネントが1つのコンピュータ上に位置付けられてよく、および/または、2つまたはそれより多くのコンピュータ間に分配されてよい。加えて、これらのコンポーネントは、様々なデータ構造を記憶する様々なコンピュータ可読媒体により実行されてよい。これらのコンポーネントは、ローカルプロセスおよび/またはリモートプロセスを使用することにより、例えば、1つまたは複数のデータパケット(例えば、ローカルシステム内、分散システム内、および/または信号を使用することにより他のシステムと相互作用するインターネットなどのネットワーク経由で別のコンポーネントと相互作用する2つのコンポーネントからのデータ)を有する信号に基づき通信してよい。
【0072】
当業者がより良く理解する手助けとなるように、まず、本願における幾つかの用語について説明する。
【0073】
(1)グラフ(Graph)は、オブジェクト間の対応関係を表すために使用される抽象データ構造であり、頂点(Vertex)およびエッジ(Edge)を使用することにより説明される。頂点はオブジェクトを表し、エッジはオブジェクト間の関係を表す。
【0074】
(2)スーパースカラ(superscalar)プロセッサアーキテクチャとは、命令レベルの並列処理の一種の並列演算が1つのプロセッサコア内で実行されることを意味する。この技術では、同じCPU周波数でより高いCPUスループット(throughput)を実装することができる。
【0075】
(3)単一命令多重データ(Single Instruction Multiple Data、SIMD):複数のオペランドをコピーすることができ、複数のオペランドを大きなレジスタの命令セット群に詰め込む。
【0076】
(4)命令パイプラインは、プロセッサの命令実行効率を改善するために、命令の操作を複数のサブステップに分割し、各ステップを専用回路で完了する方式である。例えば、命令を実行するのに3つのステージ、すなわち、命令フェッチ、デコード、および実行を経る必要がある。各ステージには、1つのマシンサイクルが必要である。パイプライン技術を使用しない場合は、命令を実行するのに3つのマシンサイクルが必要である。命令パイプライン技術を使用する場合は、命令が「命令フェッチ」を完了して「デコード」に入ると、次の命令が「命令フェッチ」に入ることができる。このように、命令実行効率が改善される。
【0077】
(5)実行ユニット(Execution Unit、EU)は、命令実行を担う。実際、実行ユニットには、コントローラの機能およびオペレータの機能の両方がある。
【0078】
(6)レジスタスタックとも呼ばれるレジスタファイル(register file)は、CPU内の複数のレジスタを含む配列であり、一般的に、高速同期スタティックランダムアクセスメモリ(SRAM)により実装される。そのようなRAMは、専用読み取りポートおよび専用書き込みポートを有しており、複数の経路で複数の異なるレジスタに並行してアクセスすることができる。
【0079】
(7)集積回路(Integrated Circuit、IC)は、マイクロ電子デバイスまたはマイクロ電子コンポーネントである。回路が必要とするトランジスタ、抵抗器、コンデンサ、およびインダクタなどの要素は、特定の技術を使用することによりワイヤに相互接続され、1つの半導体チップもしくは誘電体基板、または幾つかの半導体チップもしくは誘電体基板上に製造され、次に、1つのチューブにパッケージ化されて、必要な回路機能を備えた微細構造を形成する。すなわち、ICチップは、プラスチック基板上に多数のマイクロ電子コンポーネント(トランジスタ、抵抗器、およびコンデンサなど)を含む集積回路を配置することにより製造されるチップである。
【0080】
まず、本発明の実施形態を理解しやすくするために、プロセッサのアーキテクチャと本願に含まれる命令セットとを更に分析および提案する。
【0081】
現在、フォンノイマンアーキテクチャ(制御フローアーキテクチャ(Control-Flow Architecture)と呼ばれる場合もある)の汎用プロセッサでは、命令を使用することにより演算を駆動するのが核となる概念であり、具体的には、プロセッサは、命令の実行シーケンスで命令を連続的に読み取り、次に、命令に含まれる制御情報に基づきデータを呼び出して、処理を実行する。上述の制御フローアーキテクチャが直面する課題は、プロセッサの性能が改善されるように、優位周波数で動作するという条件を満たしつつ、命令がストール(stall)されずに実行されるよう常に駆動されることを保証する方法である。この背景に基づき、プロセッサの性能を改善するために、スーパースカラ、超長命令語、動的ディスパッチアルゴリズム、および命令プリフェッチなどの技術が生成される。しかしながら、これらの技術には依然として、性能オーバヘッドが高いという課題がある。加えて、上述の課題を解決するために使用されるデータフローアーキテクチャ(Dataflow Architecture)が生成される。データフローアーキテクチャでは、命令間の依存関係が命令セットレベルで明示的(Explicit)に説明され、命令の並列度が実行のためにハードウェアに直接表示される。データフローアーキテクチャは、N個のノードを含む有向グラフに抽象化されてよい。ノード間の接続は、1つのデータフロー(Dataflow)を表す。各ノードの入力の準備ができる(Ready)と、現在のノードが演算を実行し、結果を次のノードに伝送してよい。従って、同じグラフ内にあるが同じ経路上にない複数のノードが並行して動作してよく、その結果、処理の並列度が改善される。現在、従来のデータフローアーキテクチャは更に、制御フローをサポートする必要がある。従って、本願ではまず、(データフロー+制御フロー)を集合的にグラフアーキテクチャ(Graph Architecture)と呼ぶ。なお、グラフアーキテクチャにおける制御フローは、汎用プロセッサの制御フローと完全に同等ではない。汎用プロセッサアーキテクチャにおける制御フローは主に、汎用演算の実行命令である。グラフアーキテクチャにおける制御フローは主に、グラフ内の様々なグラフ計算制御命令(例えば、switch/gate/predicate/gate命令)である。
【0082】
従来技術の欠点を解決するために、本願は、以下の解決策を提案する。グラフアーキテクチャ(データフロー+制御フロー)を汎用プロセッサアーキテクチャに融合し、プロセッサコア(Core)内の実行ユニット(本願ではグラフフローユニット(Graph Flow Unit、GFU))として使用して、別の実行ユニットと同期的または非同期的に計算タスクを実行する。更に、本願では、汎用プロセッサの制御フローアーキテクチャに基づき、プロセッサが更に、汎用計算機能とグラフフローユニットの動作を制御する関連機能とを実行するように設計されており、グラフフローユニット内の計算機能が、グラフ計算に適用可能な(データフロー+制御フロー)アーキテクチャに基づき設計されている。すなわち、汎用計算タスク部分が依然として制御フロー方式で計算され、グラフ計算タスク部分(例えば、ホットスポットループおよびホットスポット命令シーケンス)が(データフロー+制御フロー)方式で計算され、その結果、グラフアーキテクチャを使用することにより、汎用プロセッサの動作を高速化する機能が実装される。グラフフローユニットがプロセッサのプロセッサコア内に設置されるので、グラフフローユニットは、別のメッセージチャネルもロード/ストア方式も使用せずにプロセッサコア内の別の機能モジュールまたは実行ユニットと直接通信してよく、その結果、通信遅延が大幅に削減される。加えて、グラフフローユニットがプロセッサのプロセッサコア内に設置されるので、プロセッサコアは、グラフフローユニットに対する制御およびアクセスをより良く行うことができ、その結果、グラフフローユニットと別のハードウェアユニットとの間の同期動作または非同期動作が制御されてよく、プロセッサの並列度および演算効率が改善される。加えて、幾つかの繰り返し実行される命令シーケンスをグラフアーキテクチャ(すなわち、グラフフローユニット)で繰り返し実行して、プロセッサコアが命令をメモリユニットからフェッチする回数および帯域幅を削減し、命令間の依存関係のチェック、ジャンプ予測、およびレジスタアクセスのオーバヘッドを削減してよく、その結果、グラフフローユニットの演算リソースを効果的に使用し、プロセッサの動作効率および性能を更に改善する。
【0083】
なお、本願に含まれるグラフ計算は、有向グラフ計算であり、詳細については後述しない。
【0084】
本願で提供する上述のプロセッサアーキテクチャでは、グラフアーキテクチャでの実行に適した命令が、実行のためにプロセッサコア内のグラフフローユニットにディスパッチされてよく、グラフアーキテクチャに適していない命令が、実行のためにプロセッサコア内の別の汎用演算ユニットにディスパッチされ、加えて、プロセッサは、GFUを実行のために個別に呼び出してもよいし、GFUおよび別の実行ユニットを並行実行のために同時に呼び出してもよい。従って、グラフアクセラレーションプロセッサ(例えば、SEED)アーキテクチャにおいて、切り替えオーバヘッドが高く、並列度が低く、複数のプログレスで共有できないことに起因してプロセッサの動作効率が低いという従来技術の課題が解決され、並列度が高く、電力消費が低く、エネルギー効率が高い処理および動作機能が実装され、その結果、性能およびエネルギー効率が改善される。
【0085】
本願で提供する上述のプロセッサアーキテクチャに基づき、本発明のある実施形態は更に、上述のプロセッサアーキテクチャに適用可能なパイプライン構造を提供する。パイプライン構造における命令のライフサイクルは、命令フェッチパイプライン→デコードパイプライン→ディスパッチ(発行)パイプライン→実行パイプライン→メモリアクセスパイプライン→ライトバックパイプラインを含んでよく、すなわち、パイプライン構造では、命令の実行プロセスが少なくとも以下の6つのステージに分割される。
【0086】
命令フェッチパイプライン:命令フェッチ(Instruction Fetch)は、命令をメモリから読み取るプロセスである。
【0087】
デコードパイプライン:命令デコード(Instruction Decode)は、メモリからフェッチされる命令を変換するプロセスである。
【0088】
ディスパッチ(発行)パイプライン:命令のディスパッチおよび発行(Instruction Dispatch and Issue)では、レジスタを読み取ってオペランドを取得し、命令のタイプに基づき、命令を実行のために対応する実行ユニット(EU)に送信する。
【0089】
実行パイプライン:命令がデコードされた後に実行する必要がある計算のタイプが分かっており、必要なオペランドが汎用レジスタセットから読み取られている。次に、命令のタイプに基づき命令実行(Instruction Execute)を実行して、計算タスクを完了する。命令実行は、命令に対して実際の演算を実行するプロセスである。例えば、命令が加算演算命令である場合は、オペランドに対して加算操作が実行され、命令が減算演算命令である場合は、減算操作が実行され、命令がグラフ計算である場合は、グラフ計算操作が実行される。
【0090】
メモリアクセスパイプライン:メモリアクセス(Memory Access)は、メモリアクセス命令がデータをメモリから読み取るか、または、データをメモリに書き込むプロセスであり、ロード/ストア(load/store)命令が主に実行される。
【0091】
ライトバックパイプライン:ライトバック(Write Back)は、命令実行結果を汎用レジスタセットにライトバックするプロセスである。命令が通常の演算命令である場合は、結果の値が「実行」ステージでの計算結果から得られる。命令がメモリ読み取り命令である場合は、結果は、「メモリアクセス」ステージでメモリから読み取られるデータから得られる。
【0092】
上述のパイプライン構造において、プロセッサ内の各命令は、上述の操作ステップを経る必要がある。しかしながら、複数の命令の異なる操作ステップが同時に実行されてよく、従って、命令の流れの速度が一般的に高速化されてよく、プログラム実行時間が短縮される。プロセッサアーキテクチャおよびプロセッサのパイプライン構造が、本発明の実施形態で提供する幾つかの実装例に過ぎないことを理解することができる。本発明の実施形態におけるプロセッサアーキテクチャおよびプロセッサのパイプライン構造は、限定されるわけではないが、上述の実装を含む。
【0093】
プロセッサアーキテクチャおよびプロセッサのパイプライン構造に基づき、本願はプロセッサを提供する。
図1は、本発明のある実施形態に係るプロセッサの構造の概略図である。プロセッサ10が、任意の電子デバイス、例えば、コンピュータ、携帯電話、タブレットコンピュータ、パーソナルデジタルアシスタント、インテリジェントウェアラブルデバイス、インテリジェント車載デバイス、またはスマートホームアプライアンスなどの様々なデバイス内に位置付けられてよい。プロセッサ10は具体的に、チップ、チップセット、またはチップもしくはチップセットが搭載された回路基板であってよい。チップ、チップセット、またはチップもしくはチップセットが搭載された回路基板は、必要なソフトウェアにより駆動されたときに稼働してよい。具体的には以下の通りである。
【0094】
プロセッサ10は、少なくとも1つのプロセッサコア101を含んでよく、プロセッサコア101は、命令ディスパッチユニット1011と、命令ディスパッチユニット1011に接続されたグラフフローユニット1012および少なくとも1つの汎用演算ユニット1013とを含んでよい。命令ディスパッチユニット1011は、プロセッサコア101の発行パイプラインステージで動作して、実行対象命令のディスパッチおよび分配を完了する。加えて、グラフフローユニット1012および少なくとも1つの汎用演算ユニット1013は両方とも、プロセッサ10の実行ユニット(EUは、機能ユニットFUとも呼ばれる)として使用され、実行パイプラインステージ(Execute Stage)で動作し、各タイプの計算タスクを完了する。具体的には、プロセッサ10は、命令ディスパッチユニット1011を使用することにより実行対象命令内のグラフ計算タスクを実行のためにグラフフローユニット1012に直接割り当てて、グラフ計算モードを使用することにより汎用プロセッサを高速化する機能を実装してよく、実行対象命令内の汎用計算タスクを実行のために少なくとも1つの汎用演算ユニット1013にディスパッチして、汎用計算機能を実装してよい。オプションで、異なる計算タスクに基づき、プロセッサ10は、グラフフローユニット1012のみを呼び出してタスクを実行してもよいし、少なくとも1つの汎用演算ユニット1013のみを呼び出してタスクを実行してもよいし、グラフフローユニット1012および少なくとも1つの汎用演算ユニット1013の両方を呼び出してタスクを並列に実行してもよい。バスを使用することによりまたは別の方式で命令ディスパッチユニット1011をグラフフローユニット1012および少なくとも1つの汎用演算ユニット103に接続して通信を直接実行できることを理解することができる。
図1に示す接続関係が、命令ディスパッチユニット1011と、グラフフローユニット1012および少なくとも1つの汎用演算ユニット103の両方との間の接続関係に対する制限となるわけではない。
【0095】
考えられる実装において、
図2は、本発明のある実施形態に係る別のプロセッサの構造の概略図である。プロセッサ10は、プロセッサコア101、プロセッサコア102、プロセッサコア103、・・・、およびプロセッサコア10Fなどの複数のプロセッサコア(
図2では、F個のプロセッサコアを例として使用する。Fは、1より大きい整数である)を含んでよい。これらのプロセッサコアは、同種であっても異種であってもよく、すなわち、プロセッサコア(102、103、・・・、または10F)の構造およびプロセッサコア101の構造は、同じであっても異なっていてもよい。本発明のこの実施形態では、これについて具体的に限定しない。オプションで、プロセッサコア101は、一次処理コアとして使用されてよく、プロセッサコア(102、103、・・・、および10F)は、二次処理コアとして使用されてよく、一次処理コアおよび(F-1)個の二次処理コアは、1つまたは複数のチップ(IC)上に位置付けられてよい。一次処理コア101と(F-1)個の二次処理コアとが結合され、バスを使用することによりまたは別の方式で互いに通信し得ることを理解することができる。ここでは、これについて具体的に限定しない。なお、パイプライン構造は、各プロセッサコアの構造に基づき異なっていてよい。従って、本願のパイプライン構造は、プロセッサコア101のパイプライン構造であり、別のプロセッサコアのパイプライン構造については具体的に限定しない。
【0096】
考えられる実装において、
図3は、本発明のある実施形態に係る更に別のプロセッサの構造の概略図である。プロセッサコア101は更に、命令フェッチパイプラインステージおよびデコードパイプラインステージでそれぞれ動作する命令フェッチユニット1015および命令デコードユニット1016を含み、対応する命令フェッチ機能および対応する命令デコード機能を完了してよい。オプションで、
図3に示すように、少なくとも1つの汎用演算ユニット1013は具体的に、ロード/ストアユニット(LSU)1013A、浮動小数点ユニット(FPU)1013B、ベクトル演算ユニット(SIMD)1013C、および算術論理ユニット(ALU)1013Dのうちの1つまたは複数を含んでよい。上述の複数の汎用演算ユニット(1013A、1013B、1013C、およびSIMDを含む)およびグラフフローユニット1012は全て、命令ディスパッチユニット1011に接続されており、プロセッサの実行ユニット(EU)として実行パイプラインステージで動作する。これらの実行ユニットは、命令ディスパッチユニット1011によりディスパッチされる異なるタイプの命令を個別に受信して、実行ユニットの異なるハードウェア構造に基づき、実行ユニットが得意とする演算タスクを実行する。更にオプションで、プロセッサ10のプロセッサコア101の外部には、メモリユニット1017が更に含まれ、ロード/ストアユニット(LSU)は、データをメモリユニット1017から/に読み取り/書き込み、メモリアクセスパイプラインステージで動作する。尚も更にオプションで、プロセッサコア101は更に、ライトバックパイプラインステージで動作し、且つ、命令の計算結果を宛先レジスタにライトバックする役割を担う、結果ライトバックユニット1014を含む。オプションで、メモリユニット1017は一般的に、電源オフ揮発性メモリである。電源オフの間、メモリユニット1017に記憶された内容が失われ、メモリユニットは、メモリ(Memory)または一次メモリと呼ばれる場合もある。メモリユニット1017は、プロセッサ10内のオペレーティングシステムとして、または別の動作プログラムの一時データ用の記憶媒体として使用されてよい。例えば、プロセッサ10上で動作するオペレーティングシステムが、操作する必要があるデータをメモリユニット1017からプロセッサコア101にディスパッチして、演算を実行する。演算が完了した後、プロセッサコア101は、結果を伝送する。内部メモリ101が、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、レベル1キャッシュ(L1 Cache)、レベル2キャッシュ(L2 Cache)、およびレベル3キャッシュ(L3 Cache)などのうちの1つまたは複数を含んでよい。
【0097】
なお、
図3のプロセッサ内の機能モジュールは、バスを使用することによりまたは別の接続方式で互いに通信してよく、
図3に示す接続関係が機能モジュール間の接続関係を限定するわけではない。機能モジュールについては、後続の実施形態で更に説明する。ここでは、詳細について説明しない。
【0098】
図1、
図2、および
図3におけるプロセッサの構造が、本発明の実施形態で提供する幾つかの実装例に過ぎないことを理解することができる。本発明の実施形態におけるプロセッサの構造は、限定されるわけではないが、上述の実装を含む。
【0099】
本願の
図1、
図2、および
図3で提供するプロセッサのマイクロアーキテクチャに基づき、本発明の以下の実施形態では、プロセッサ10により具体的に実装される機能が以下を含んでよい。
【0100】
命令フェッチユニット1015は、実行対象ターゲットプログラムをメモリユニット1017から取得する。命令デコードユニット1016は、デコードされた実行対象命令を取得するために、所定の命令形式に基づきターゲットプログラムをデコードする。命令ディスパッチユニット1011は、デコードされた実行対象命令を受信する。実行対象命令は、汎用計算命令およびグラフ計算制御命令を含み、汎用計算命令は、汎用計算タスクの実行を命令するために使用され、グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される。命令ディスパッチユニット1011は、汎用計算命令を少なくとも1つの汎用演算ユニットに送信し、グラフ計算制御命令をグラフフローユニットに送信する。少なくとも1つの汎用演算ユニット1013は、汎用計算タスクの実行結果を取得するために、汎用計算命令を受信および実行する。グラフフローユニット1012は、グラフ計算タスクの実行結果を取得するために、グラフ計算制御命令を受信および実行する。少なくとも1つの汎用演算ユニット1013は更に、汎用計算タスクの第1実行結果を結果ライトバックユニット1014に送信する。グラフフローユニット1012は更に、グラフ計算タスクの第2実行結果を結果ライトバックユニット1014に送信する。結果ライトバックユニット1014は、第1実行結果および第2実行結果を記憶し、第1実行結果および第2実行結果のうちの一方または両方を命令ディスパッチユニット1011にライトバックする。
【0101】
まずは、プロセッサ10の構造および機能に関連して、本願におけるターゲットプログラムのコンパイルからターゲットプログラムの実行までのプロセスについて説明する。
図4は、本発明のある実施形態に係るソースコードの包括的なコンパイルおよび実行の概略フローチャートである。
【0102】
1.高水準言語で記述されるプログラムソースコード、例えば、様々なプログラミング言語(例えば、C言語およびJAVA(登録商標))で開発者により記述されるソースコードを提供する。
【0103】
2.コスト推定モデルに基づき、ソースプログラム内にあり汎用演算モードでコンパイルするのに適したコードの部分と、グラフフローモードでコンパイルするのに適したコードの部分とを決定して、異なるコンパイルモードでのコンパイルを通じて汎用演算オブジェクトファイルまたはグラフフローオブジェクトファイル(両方ともバイナリである)を取得する。例えば、1つのアプリケーション(Application、APP)には数百万個の命令があってよく、複数の命令が実際には入力出力関係にある。例えば、特定の命令を実行するための入力条件が別の命令の出力結果である場合は、これら2つの命令がグラフ計算における基本要素(頂点およびエッジ)を形成してよい。従って、ソースプログラムコンパイルステージでは、コスト推定モデルに基づき複雑な命令シーケンス(例えば、比較的複雑な対応関係、間接的ジャンプ、または比較的多数の割り込みがある命令シーケンス)または一度のみ使用される命令シーケンスが汎用演算モードでコンパイルされてよく、周期的にまたは繰り返し呼び出される関数などの、繰り返しに適した命令シーケンス(その対応関係は複雑であっても単純であってもよいが、通常は繰り返し実行される必要がある)がグラフフローモードでコンパイルされる。グラフフローモードでのコンパイルとは、コード間に含まれるロジックがグラフアーキテクチャに抽象化されることを意味し、プロセッサにより本来実行されるチェック、ジャンプ、および予測などの操作では、グラフアーキテクチャにおけるバイナリマシン命令がプログラムコンパイルステージで生成される(すなわち、グラフフローモードでコンパイラによりコンパイルされる)。グラフアーキテクチャにおける命令が命令の入力出力関係を含むので、プロセッサ内のGFUが実際に演算を実行すると、命令間の論理判断が大幅に削減されてよく、その結果、CPUコアにおけるオーバヘッドが大幅に削減され、性能が良くなり、電力消費が低くなる。
【0104】
3.リンカを使用することにより、コンパイルされた汎用演算オブジェクトファイルとコンパイルされたグラフフローオブジェクトファイルとを統合プログラム(実行可能ファイル)内にリンク(link)する。例えば、オブジェクトファイルは、.oファイルである。プログラムを実行する必要がある場合は、更にリンクが必要である。リンクプロセスでは、主にオブジェクトファイル(例えば、.oファイル)をライブラリにリンクして、実行可能ファイルを作成する。1、2、および3に対応するコンパイルステージを、プロセッサ10が位置付けられるデバイス以外のデバイス(例えば、サーバまたはコンパイラ)上で完了してもよいし、プロセッサ10が位置付けられるデバイス上でプリコンパイルを通じて完了してもよいし、プロセッサ10が位置付けられるデバイス上で同時に実行およびコンパイルしてもよいことを理解することができる。ここでは、これについて具体的に限定しない。
【0105】
4.実行可能ファイルがプロセッサ10上で実行された後、プロセッサ10は、命令ロード、命令プリフェッチ、命令プリデコード、および分岐予測などの一連の操作を使用することにより、実行可能ファイル内の実行対象ターゲットプログラム(例えば、コードセグメント、データセグメント、BSSセグメント、またはスタック)をメモリユニット1017内にロードする。
【0106】
5.命令フェッチユニット1015は、複数回連続して毎回1つずつ命令をフェッチする方式でターゲットプログラムをメモリユニット1017から取得してよく、その結果、各命令は、デコードのために命令フェッチユニット1015から命令デコードユニット1016に入る。
【0107】
6.命令デコードユニット1016は、所定の命令形式に基づき実行対象命令を分割および解釈して、更には、マイクロオペレーション命令、すなわち、本願のデコードされた実行対象命令を取得し、マイクロオペレーション命令を命令ディスパッチユニット1011に送信する。
【0108】
7.デコードされた実行対象命令を受信した後、命令ディスパッチユニット1011は、各命令のタイプに基づき、デコードされた実行対象命令を計算のために各実行ユニット(Execution Unit)に分配する。例えば、デコードされた実行対象命令は、計算のために汎用演算ユニット1013またはグラフフローユニット1012にディスパッチされる。グラフフローユニット1012がプロセッサ10のプロセッサコア101内に設置されるので、命令ディスパッチユニット1011がグラフフローユニット1012に直接接続され、グラフフローユニット1012と通信してよく、その結果、識別されたグラフ計算制御命令は、グラフフローユニット1012に直接ディスパッチされ、別のメッセージチャネルもロード/ストア方式も使用せずに通信が実行され、その結果、通信遅延が大幅に削減される。考えられる実装において、本願の汎用計算命令およびグラフ計算制御命令は、異なるフラグビット(フラグビットは、上述のコンパイルステージで追加されてよい)を使用することにより識別されてよく、すなわち、異なるタイプの命令が、異なる命令IDに対応してよく、その結果、命令ディスパッチユニット1011は、命令IDに基づき識別を実行してよい。
【0109】
8.グラフフローユニット1012は、グラフ計算タスクの実行結果を取得するために、グラフ計算制御命令を受信および実行する。1つまたは複数の汎用演算ユニット1013が、汎用計算タスクの実行結果を取得するために、汎用計算命令を受信および実行する。オプションで、グラフフローユニット1012および汎用演算ユニット1013は、命令を並列または直列に実行してよく、これは、ターゲットプログラム内のこれらの実行ユニットにより実行される命令間の論理関係に依存する。本発明のこの実施形態では、これについて具体的に限定しない。
【0110】
9.最終的に、グラフフローユニット1012および汎用演算ユニット1013は両方とも、計算結果を結果ライトバックユニット1014に送信してよく、結果ライトバックユニット1014は、幾つかまたは全ての計算結果を命令ディスパッチユニット1011にフィードバックしてよい。例えば、計算結果は、命令ディスパッチユニット1011により後でディスパッチされる命令内のパラメータとして使用される。オプションで、第1実行結果または第2実行結果は、メモリユニット1017に直接書き込まれてもよいし、ロード/ストアユニット1013Aを使用することによりメモリユニット1017に書き込まれてもよく、その結果、関連する実行ユニット(例えば、グラフフローユニット1012またはロード/ストアユニット1013A)が、必要なパラメータを対応する記憶場所から取得してよい。グラフフローユニット1012がプロセッサ10のプロセッサコア101内に設置されるので、プロセッサコア101には、グラフフローユニット1012および別の演算ユニットの同期動作または非同期動作を制御するために、グラフフローユニット1012および別の汎用演算ユニット1013の関連計算ステータス(例えば、第1実行結果および第2実行結果)を取得する権利および条件があり、その結果、プロセッサの動作効率が改善される。
【0111】
結論として、別の汎用演算ユニットと同様に、グラフフローユニット1012は、命令ディスパッチユニット1011(例えば、命令発行およびリザベーションステーションを含む)から送信されるレジスタ上のライブイン(liveIn)データを受信し、その入力を、グラフフローユニット1012の対応する計算ノードに伝送する。同様に、グラフフローユニット1012はまた、ライブアウト(liveOut)出力データを結果ライトバックユニット1014(例えば、レジスタおよびリオーダバッファ(Reorder Buffer))にライトバックして、グラフ出力を、そのグラフ出力に依存する対応するレジスタおよび命令リザベーションステーションに書き込む。
【0112】
次に、グラフ計算を実行するためにグラフフローユニットにより使用される実行ステージでの計算モデルについて更に説明する。
図5は、本発明のある実施形態に係るグラフフローユニットの計算モデルの概略図である。
【0113】
本願におけるグラフフロー(Graph flow)の理論計算モデルが、N個の完全に接続された計算ノード(グラフの頂点に対応する)に抽象化されてよい。1つの演算について1つの命令が各ノード上に配置されてよく、結果がそのノードまたは別のノードに伝送されてよい。グラフフローの理論計算モデルは、繰り返し切り替えられる2つのステージに分割されてよい。
【0114】
1.グラフ構築(Graph Build)ステージ:グラフ構築ブロックのN個の命令が命令メモリ(
図5の1-a)から読み取られ、グラフ構築ブロック(
図5の1-b)内の各ノードについて、1つの演算命令および最大2つのターゲットノードが構成される。Nが16に等しい場合は
図5の1-b内に合計16個の計算ノード、すなわち、0、1、2、3、4、・・・、15があると仮定する。グラフが構築される(
図5の1-b)と、各ノードの演算および接続がキュアされる(ノードは読み取り専用である)。例えば、計算ノード0内の演算命令がadd命令、すなわち、加算演算であり、計算ノード1内の演算命令がsll命令、すなわち、シフト演算であり、計算ノード3内の演算命令がxor命令、すなわち、排他的論理和演算である。計算ノード0および計算ノード1の演算結果を計算ノード5の入力として使用して、ld演算(すなわち、命令フェッチ演算)を実行し、計算ノード2の演算結果および計算ノード3の演算結果を計算ノード6の入力として使用して、add演算(すなわち、加算演算)を実行するなどである。別の計算ノードの演算プロセスについては説明しない。
【0115】
2.実行ステージ(Graph Execute):外部モジュールが入力(liveIn)を伝送して、データフローを開始する。全ての計算ノードが並列に動作する。各ノード(
図5の1-d)について、ノードの入力が到着することを条件として演算が実行されてよく、結果が次の計算ノードに伝送される。入力が到着していない場合は、ノードはアイドル状態にある。動作は、データフローがエンドノード(tm)に到達するまで継続する。幾つかの計算ノード(例えば、計算ノード0、1、2、および3)の入力パラメータは、外部から入力される、すなわち、開始データが外部メモリユニット1017(
図5の1-e)から入力されなければならず、且つ、幾つかの他の計算ノード(例えば、計算ノード5、6、8、9、10、11、12、13、14、および15)は、演算が実行され得るように、これらの計算ノードと接続関係にある計算ノードにより出力される計算結果を内部から取得する必要があるので、演算結果は、これらの計算ノードに関連付けられる計算ノードに入力される。
【0116】
本願で提供するグラフフローの上述の計算モデルに基づき、プロセッサ10内の命令ディスパッチユニット1011が、グラフ計算タスクを実行するためにグラフ計算制御命令をグラフフローユニット1012内のコントローラにディスパッチするとき、対応するグラフ計算機能を実行するようグラフフローユニット1012に命令するために、異なる機能の制御命令が含まれる。時系列で、本願で提供するグラフ計算制御命令は主に、グラフ構築開始命令→パラメータ受け渡し命令→グラフ計算開始命令→パラメータ復帰命令を含む。以下では、上述の命令の特徴および機能について具体的に説明する。
【0117】
考えられる実装において、プロセッサ10は更に、メモリユニット1017を含む。グラフフローユニット1012は、N個の計算ノードを含む。グラフ計算制御命令は、グラフ構築開始命令を含み、グラフ構築開始命令は、メモリユニット1017内のターゲットアドレスを保持する。グラフフローユニット1012は、グラフ構築開始命令を受信し、およびターゲットアドレスに基づきグラフ構築ブロック情報をメモリユニット1017から読み取る。グラフ構築ブロック情報は、N個の計算ノードの各々の演算方法、およびN個の計算ノードの接続およびシーケンス情報を含む。本発明のこの実施形態では、グラフフローユニットにより受信されるグラフ計算制御命令が具体的にグラフ構築開始命令である場合、メモリユニットに記憶されるグラフ構築ブロック情報を、プロセッサコア101の外部のメモリユニット1017内にあり命令内に保持されるターゲットアドレスに基づき読み取るようグラフフローユニットに命令するために、命令が使用される。グラフ構築ブロック情報は、グラフフローユニット内のN個の計算ノードの各々の対応する演算方法と、N個の計算ノード間の依存関係、すなわち、対応関係にある計算ノード(すなわち、グラフ計算中のエッジに対応する、すなわち、
図5のグラフ計算モデル内のN個の固定されたフロー命令に対応する2つの計算ノード)の計算結果と入力条件との関係とを含む。グラフフローユニット1012は、上述のグラフ構築ブロック情報に基づき完全なグラフ構築ブロックの計算を完了してよい。なお、1つのグラフ構築ブロックは、グラフ計算中の1つのグラフ構築ブロックまたは全てのグラフ構築ブロックであってよく、すなわち、1つの完全なグラフ計算タスクは、1つのグラフ構築ブロック、または分割を通じて取得される複数のグラフ構築ブロックを含んでよい。
【0118】
例えば、
図6Aおよび
図6Bは、本発明のある実施形態に係るグラフフロー制御命令の概略図である。グラフ構築開始命令は、gfb 0x600960であり、ここで、gfbは、オペレーションコードであり、0x600960は、オペランドであり、メモリユニット1017内のアドレスである。グラフフローユニット1012は、グラフ構築開始命令に従って、アドレス0x600960に対応するグラフ構築ブロック情報をメモリユニット1012から取得して、グラフ構築を開始してよい。すなわち、命令ディスパッチユニット1011は、命令ディスパッチユニット1011により実行されなければならない関連するグラフ計算命令が位置付けられるアドレスのポインタをグラフフローユニット1012に送信し、グラフ構築情報ブロックをメモリユニット1017から読み取る。
【0119】
考えられる実装において、グラフ計算制御命令は、パラメータ受け渡し命令を含み、パラメータ受け渡し命令は、M個の計算ノードの識別子、およびM個の計算ノードの識別子に個別に対応する入力パラメータを保持し、M個の計算ノードは、N個のノードのうちの幾つかまたは全てのノードである。グラフフローユニットは、パラメータ受け渡し命令を受信し、およびM個の計算ノードの識別子に個別に対応する入力パラメータをM個の計算ノードに個別に入力するように構成されている。
【0120】
例えば、
図6Aおよび
図6Bに示すように、パラメータ受け渡し命令は、レジスタx0内のパラメータ値を計算ノード1内の右入力パラメータとして使用することを意味するgfmov x0,1r、および、レジスタx1内のパラメータ値を計算ノード10内の左入力パラメータとして使用することを意味するgfmovx1,10lなどを含む。ここでは、これについて1つずつ列挙しない。本発明のこの実施形態では、グラフフローユニットにより受信されるグラフ計算制御命令がパラメータ受け渡し命令を含み、且つ、パラメータ受け渡し命令が、1つのグラフ構築ブロック計算プロセスで複数の計算ノード(例えば、
図5の計算ノード0、1、2、および3)が必要とする初期入力パラメータを含む場合、複数の計算ノードがグラフフローユニットの外部から対応するパラメータを取得した後、グラフフローユニットは、グラフ計算タスクの実行を開始する条件を満たし、すなわち、グラフ計算の実行を開始してよい。
【0121】
考えられる実装において、グラフ計算制御命令は、グラフ計算開始命令を含む。グラフ計算開始命令を受信した後、グラフフローユニット1012は、現在のグラフ構築が完了しているかどうかを判断し、現在のグラフ構築が完了している場合、グラフフローユニット1012は、グラフ計算タスクの実行を開始する。具体的には、考えられる実装において、グラフ計算開始命令を受信した後、グラフフローユニット1012は、グラフフローユニットにより読み取られるグラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、M個の計算ノードの入力パラメータが入力されているかどうかを判断し、およびグラフフローユニットにより読み取られるグラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致し、且つ、入力が完了している場合、グラフ計算タスクの実行を開始する。
【0122】
更に、プロセッサ10がグラフ計算開始命令を使用することによりグラフフローユニット1012を制御してグラフ計算タスクの実行を開始させることは、具体的に、以下の2つの制御方式を含む。
【0123】
方式1:並列グラフ計算を同期的に開始する。
【0124】
グラフ計算開始命令を受信した後、グラフフローユニット1012は、現在のグラフ構築が完了しているかどうかを判断し、現在のグラフ構築が完了している場合、グラフ計算タスクの実行を開始する。更に、グラフフローユニット1012がグラフ計算開始命令を受信した後、グラフ計算タスクが完了する前に、命令ディスパッチユニット1011は、プロセッサコア101を制御してブロック状態に入らせ、グラフフローユニット1012がグラフ計算タスクを完了した後、プロセッサコア101を制御してブロック状態を終了させる。
【0125】
具体的には、プロセッサ10は、gfe(graph flow execute)命令を使用することによりグラフフローユニット1012の実行ステージを開始してよい。グラフフローユニット1012のグラフ構築が完了していない場合は、gfeは、グラフ構築が完了して初めてグラフフローユニット1012の実行を開始する。グラフフローユニット1012の実行ステージでは、プロセッサコア101の別のユニットが、別の演算を実行せずにパワーゲート(登録商標)(Power Gate(登録商標))ステージにあり、唯一の動作中のユニットは、プロセッサコア101の割り込みおよび例外ユニットである。従って、プロセッサコア101は、gfeを実行した後にブロック(blocking)状態に入る。グラフ構築が正しくないか、または、実行が正しくない場合は、gfeの対応する例外が生成される。グラフフローユニット1012が実行を完了するまで、パラメータ復帰命令gfmovを含め、gfeの後のCPU命令を実行し続けることはできない。
【0126】
例えば、
図6Aおよび
図6Bに示すように、グラフ計算実行ステージにおいて、グラフフローユニット1012は、グラフ計算開始命令gflow<GBB_address>を開始することによりトリガされて、GFUのグラフ構築が完了しているかどうか、および、前に開始されたグラフ構築ブロックのアドレス<GBB_address>が、実行されたグラフ構築ブロックのアドレスと一致するかどうかをチェックする。グラフ構築ブロックにより構築されたグラフに一貫性がない場合は、グラフ構築ユニットを再起動してグラフを再び構築する必要がある。構築されたグラフに一貫性がある場合は、グラフ計算を直ちに開始してよい。オプションで、命令は、グラフ計算全体が完了するまでプロセッサコア101のパイプラインをブロックしてよい。従って、プロセッサコア101の別の演算ユニットがgflow命令の後の命令を操作することはできない。命令は、汎用演算モードとグラフ計算モードとの切り替えに使用されてよい。命令は、GFUのみを使用してエネルギー消費を削減することによってプロセッサにより使用されてもよい。グラフ計算プロセスでは、プログラム定義に基づきグラフ内のデータフローおよび制御フローが下方に流れる。グラフがグラフのエンドノードgftermに流れた後、グラフ計算の演算が終了する。gftermは、プロセッサ命令gflowを開始してコミットステージに入り、プロセッサコア101のパイプラインを再起動する。
【0127】
本発明のこの実施形態において、プロセッサコアは、グラフ計算機能を同期的に有効にしてよい(すなわち、グラフフローユニットおよび別の汎用演算ユニットは、タスクを直列に実行してよい)。すなわち、グラフフローユニットがグラフ計算タスクを実行するとき、プロセッサコアのパイプラインがブロックされ、グラフフローユニットは、グラフフローユニットがグラフ計算タスクを完了するまでブロック状態を終了せず、この期間中は、グラフフローユニットのみが演算を実行しており、別の演算ユニットは演算を実行できないことが保証される。このように、CPUの電力消費が削減される。命令は、プロセッサ内の別の演算ユニットとグラフフローユニットとの間の計算モードの切り替えを実装してよく、同期的に動作するプログラムに適用されてよい。
【0128】
方式2:並列グラフ計算を非同期的に開始する。
【0129】
グラフ計算開始命令を受信した後、グラフフローユニット1012は、現在のグラフ構築が完了しているかどうかを判断し、現在のグラフ構築が完了している場合、グラフ計算タスクの実行を開始する。更に、命令ディスパッチユニット1011は更に、実行結果同期命令をグラフフローユニット1012に送信し、グラフフローユニット1012が実行結果同期命令を受信した後、グラフ計算タスクが完了する前に、プロセッサコア101を制御してブロック状態に入らせ、グラフフローユニット1011がグラフ計算タスクを完了した後に、プロセッサコア101を制御してブロック状態を終了させる。
【0130】
具体的には、プロセッサ10は、gff(graph flow fork)命令を使用することによりグラフフローユニット1012の非同期実行ステージを開始してよい。グラフフローユニット1012のグラフ構築が完了していない場合は、gffは、グラフ構築が完了した後にグラフフローユニット1012の実行を開始する。gffがグラフフローユニット1012の実行を開始すると、プロセッサコア101の別の演算ユニットが別の演算を実行してよい。従って、gffは、ROB内のリソースを占有しない。非同期実行の後、プロセッサは、gfj(graph flow join)命令を使用することによりグラフフローユニット1012の実行結果を同期させる。Graphflowの実行が完了して初めて、パラメータ復帰命令のgfmovを含め、gfjの後のCPU命令を実行し続けることができる。
【0131】
例えば、本発明のこの実施形態では、命令gfork<GBB_address>および命令gfjoin<GBB_address>を含む、2つの新しいCPU命令を命令セットに追加して、GFUおよびプロセッサコア101の別の演算ユニットの並列演算を開始する。gffork命令では、まず、GFUのグラフ構築が完了しているかどうか、および、事前に開始されたグラフ構築ブロックのアドレス<GBB_address>が、実行されたグラフ構築ブロックのアドレスと一致するかどうかをチェックする。グラフ構築ブロックにより構築されたグラフに一貫性がない場合は、グラフ構築ユニットを再起動してグラフを再び構築する必要がある。構築されたグラフに一貫性がある場合は、グラフ計算を直ちに開始してよい。gffork命令は、CPUのパイプラインをブロックしない。従って、CPUの別のモジュールおよびグラフ計算が非同期的に実行されてよい。gfjoinは、CPU命令がグラフ計算の演算結果を必要とする前に実行される。グラフ計算の演算が既に完了している場合は、gfjoinが直ちに返される。グラフ計算が依然として完了していない場合は、gfjoinは、グラフ計算が完了するまでCPUのパイプラインをブロックする。
【0132】
本発明のこの実施形態において、プロセッサコアは、グラフ計算機能を非同期的に有効にしてよい(すなわち、グラフフローユニットおよび別の汎用演算ユニットは、タスクを並列に実行してよい)。すなわち、グラフフローユニットがグラフ計算タスクを実行するとき、プロセッサコアのパイプラインがブロックされず、別の演算ユニットが正常に動作することができる。プロセッサが命令ディスパッチユニットを使用することにより実行結果同期命令をグラフフローユニットに送信するとき(例えば、別の演算ユニットの演算がグラフフローユニットの実行結果の関与を必要とするとき)、この場合にグラフフローユニットがグラフ計算タスクを完了していないならば、プロセッサのパイプラインは、ブロックされ始め、プロセッサコアは、グラフフローユニットがグラフ計算タスクを完了して実行結果をフィードバックして初めてブロック状態を終了して、別の演算ユニットがグラフフローユニットの実行結果を必要とする場合に、グラフフローユニットが実行結果をフィードバックするときに別の演算ユニットが実行を継続できることが保証される。このように、プロセッサコアの並列度が改善される。命令は、プロセッサ内の別の演算ユニットとグラフフローユニットとが並列である計算モードを実装してよく、非同期的に動作するプログラムに適用されてよい。
【0133】
グラフ計算制御命令を使用することによりグラフフローユニット1012を制御してグラフ計算を開始させる上述の方式に加えて、本発明のある実施形態は更に、グラフフローユニット1012の判断を使用することによりグラフ計算がトリガおよび開始される実装を提供する。具体的には、グラフ構築ブロック情報がN個の計算ノードの各々の演算方法、およびN個の計算ノードの接続およびシーケンス情報を含み、且つ、N個の計算ノードの接続およびシーケンス情報が、L個のエッジに個別に対応するソースノードおよび宛先ノードを含む場合、グラフフローユニット1012は、N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し、入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のためにターゲット計算ノードに対応する演算方法に入力して計算結果を取得し、およびL個のエッジに個別に対応するソースノードおよび宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力する。グラフは、複数のノードと、これらのノードを接続するエッジとを含み、1つのエッジは、エッジを形成するソースノードおよび宛先ノードと、ソースノードと宛先ノードとの対応関係とを含む。従って、本願のグラフアーキテクチャでは、データフローおよび制御フローのプログラムが、N個のノードを含むグラフに抽象化され、ノード間の接続が、データフロー(Dataflow)または制御フロー(ControlFlow)を表す。各ノードは、1つのグラフ命令として使用される。特定のグラフ命令が必要とする入力の準備ができると、現在の命令は操作されてよく、次の命令の対応する入力に結果が伝送されてよい。
【0134】
例えば、
図7は、本発明のある実施形態に係るグラフ構築ブロック内の計算ノードの抽象モデルの概略図である。各グラフ命令が必要とする入力が、左入力(l)、右入力(r)、および条件付き入力(p)であると仮定する。命令が必要とする入力の準備ができると、演算が実行されてよく、後続の対応するノードの入力に演算結果が伝送される。例えば、命令1内のadd演算a+bが終了した後、命令4の左入力に演算結果が送信されてよい。本願のグラフアーキテクチャ命令セットは、「1add 4l」として表されてよく、これは、命令1について、命令1の入力の準備ができると、命令4の左入力に結果が伝送されることを意味する。グラフアーキテクチャ命令セットでは、出力アドレスのみを本願で提供する必要があり、命令の入力情報を提供する必要はない。入力については、各命令の入力に1つまたは複数の命令が伝送されることを保証する必要があるのみである。従って、本願のグラフアーキテクチャ命令セットを使用することによりエンコードが実行された後、グラフ計算プロセスがより単純且つより高速になる。
【0135】
図7からは、命令間の並列度が明らかであると分かる。依存関係のない複数の命令が、必然的に且つ並行して実行され得る。例えば、命令0、命令1、および命令2が1つのクロックサイクルであり、命令3および命令4が1つのクロックサイクルである。ハードウェア実装(すなわち、グラフフローユニット)では、各入力の準備ができているビットおよび有効ビットのみを計算プロセスでチェックして、依存関係のチェックを実装する必要がある。従来技術のスーパースカラプロセッサと比較して、本願のグラフ計算プロセスでは、レジスタ間の依存関係をチェックするために大量のハードウェアが必要でない。
【0136】
オプションで、1つのグラフがN個のノードを含むと仮定し、グラフの実行に必要な理想的なハードウェアは、各ノードに演算ユニット、すなわち、本願の計算ノード(Process Engine、PE)があり、理想的なN対Nクロスバー(Crossbar)を使用することにより次のクロックサイクルで対応する次のレベル(level)の計算ノードに結果が伝送され得ることである。しかしながら、Nが極めて大きい場合は、N-Nクロスバーを実装するのが難しい。従って、実用ハードウェア設計では、考えられる実装において、本発明のこの実施形態では、P個の命令がX個の計算ノードを共有するように定義される。すなわち、1つの計算ノード上では、P個の命令から最大X個の命令(入力の準備が必要な命令)が、同時演算のために各クロックサイクルで選択される。
【0137】
本発明のこの実施形態において、グラフフローユニット内の各計算ノードは、計算ノードの演算方法がロードされ、且つ、計算ノードの入力パラメータが取得されることを条件として、グラフ計算の実行を開始してよい。しかしながら、幾つかの計算ノード(例えば、エッジに対応するソースノード)は、初期入力パラメータをグラフフローユニットの外部から取得し、幾つかの他の計算ノード(例えば、エッジに対応する宛先ノード)は、計算ノードの計算結果を計算ノードの入力パラメータとして使用してグラフ計算を開始する前に、計算ノードと対応関係にある計算ノード(例えば、ソースノード)の計算の完了を待たなければならない場合がある。従って、計算ノードの計算開始時刻に一貫性がない場合がある。しかしながら、各計算ノードは、演算方法および入力パラメータ(左入力パラメータ、右入力パラメータ、または条件付きパラメータを含んでよい)の準備ができた後に演算を開始してよい。
【0138】
考えられる実装において、プロセッサコア101は更に、結果ライトバックユニットを含む。グラフフローユニット1012および少なくとも1つの汎用演算ユニットは、結果ライトバックユニット1014に個別に接続されている。グラフ計算制御命令は、パラメータ復帰命令を含み、パラメータ復帰命令は、K個の計算ノードの識別子、およびK個の計算ノードの識別子に個別に対応する結果レジスタを保持する。グラフフローユニット1012は具体的に、K個の計算ノードの計算結果を結果ライトバックユニット1014に個別に送信するよう制御するように構成されている。
本発明のこの実施形態では、グラフフローユニットのN個の計算ノードについて、最終計算を完了した後、幾つかの計算ノードが計算結果をグラフフローユニットの外部の結果ライトバックユニットに出力しなければならない場合があり、すなわち、グラフフローユニットは、受信されたグラフ計算制御命令内のパラメータ復帰命令内に保持される、K個の計算ノードの識別子に基づき、K個の計算ノードの最終計算結果をグラフ構築ブロック全体の計算結果として使用し、その計算結果をグラフフローユニットの外部の結果ライトバックユニットに出力するよう制御してよく、その結果、後続の実行ユニットが更なる計算を実行する。
【0139】
オプションで、結果ライトバックユニット1014は具体的に、アウトオブオーダ実行の前に命令実行シーケンスを記憶するように構成されたリオーダバッファ(ReorderBuffer)を含む。命令セットがアウトオブオーダ方式で実行されると、元の命令シーケンスに基づき結果が提出される。更にオプションで、結果ライトバックユニット1014は更に、汎用レジスタおよび専用レジスタなどのレジスタ群を含む。汎用レジスタ群は、演算に関与するオペランドと中間結果とを記憶するために使用される。専用レジスタは通常、ステータスレジスタであり、プログラムを使用することにより変更されることができず、特定の状態を示すようプロセッサにより制御される。
【0140】
本願のプロセッサ10内の汎用演算ユニット1013は、異なるタイプの計算タスクを実行または高速化するために、複数のタイプのハードウェア実行ユニットを含んでよい。プロセッサは主に、ロード/ストアユニット1013A(LSU)、浮動小数点ユニット1013D(FPU)、ベクトル演算ユニット1013C(SIMD)、および算術論理ユニット1013D(ALU)のうちの1つまたは複数を含んでよい。以下では、汎用演算ユニットの特徴および機能について具体的に説明する。
【0141】
考えられる実装において、汎用演算命令は、汎用算術論理命令またはロード/ストア命令を含む。少なくとも1つの汎用演算ユニットは、命令ディスパッチユニット1011により送信される汎用算術論理命令を受信し、論理演算を実行するように構成された、算術論理ユニット1013D(ALU)、または、命令ディスパッチユニット1011により送信されるロード/ストア命令を受信し、ロード/ストア操作を実行するように構成された、ロード/ストアユニット1013A(LSU)を含む。
【0142】
算術論理ユニット(Arithmetic and Logical unit、ALU)は主に、バイナリデータに対する、固定小数点算術演算(加算/減算/乗算/除算)、論理演算(ANDまたは非排他的論理和(non-exclusive OR))、およびシフト演算を実装する。論理演算ユニットでは、加算、減算、乗算、および除算などの数学演算並びに「OR、AND、ASL、およびROL」などの論理演算の命令が実行される。算術論理ユニットは、圧縮および解凍、コンピュータプログレスのスケジューリング、コンパイラ構文分析、コンピュータ回路補助設計、およびゲームAI処理などの、プロセッサ内の操作に影響を及ぼす。
【0143】
ロード/ストアユニット(Load Store Unit、LSU)は、アドレスを計算するために使用される。メモリアクセスタイプの命令(一般的にはロード/ストアを意味する)については、命令により使用されるべきメモリアドレスが命令内に保持される。LSUは、命令の処理と命令内に保持されるアドレスの計算とを担う。メモリタイプ命令のアドレスを計算するために単一のLSUが使用され、その結果、LSUおよび別の実行ユニットは、命令を並列に実行することができ、その結果、メモリアクセスタイプの命令の実行効率が改善され、プロセッサの性能が改善される。
【0144】
本発明のこの実施形態において、少なくとも1つの演算ユニットは更に、算術論理ユニット1013Dおよびロード/ストアユニットを含んでよい。論理演算ユニットは主に、関連する論理演算を実行するように構成されており、ロード/ストアユニットは、データ読み取り/書き込み演算命令を実行するように構成されている。すなわち、上述のユニットおよびグラフフローユニットは、実行パイプラインステージにあり、CPUでのデコード後に様々なタイプの計算タスクを共同で完了し、計算タスクは、プロセッサの計算タスクをより効率的に完了するために、並列または直列に実行されてもよいし、部分的に並列に実行され、部分的に直列に実行されてもよい。本発明のこの実施形態では、有向グラフフローアーキテクチャ(Graphflow)をモジュールとしてスーパースカラ中央処理装置に埋め込み、スーパースカラプロセッサコア内の既存の演算ユニットを多重化して、より優れた性能およびより低いエネルギー消費を達成する。
【0145】
考えられる実装において、グラフ計算制御命令は、データ読み取り/書き込み命令を含み、データ読み取り/書き込み命令は、ロード/ストアユニット1013A内の読み取り/書き込みアドレスを保持する。グラフフローユニット1012は更に、データ読み取り/書き込み命令内のロード/ストアアドレスに基づき、データをロード/ストアユニット1013A(LSU)から読み取るか、または、データをロード/ストアユニット1013A(LSU)に書き込むように構成されている。例えば、グラフフローユニット1011は、関連するロード(Load)命令またはストア(Store)命令を使用することにより、グラフ計算に必要な命令またはパラメータなどをロード/ストアユニット1013A(LSU)から読み取ってもよいし、グラフ計算の実行結果をロード/ストアユニット1013A(LSU)に書き込んでもよい。ターゲットプログラム内の特定の命令内容に基づき、異なる操作が実行されてよい。ロード/ストアユニット1013A(LSU)から読み取られるデータは実際のところ、ロード/ストアユニット1013Aによりメモリユニット1017から読み取られるデータであることを理解することができる。ロード/ストアユニット1013A(LSU)に書き込まれるデータは実際のところ、ロード/ストアユニット1013Aに書き込まれた後にロード/ストアユニット1013Aからメモリユニット1017に書き込まれるデータである。
【0146】
オプションで、グラフフローユニット1011は更に、グラフ計算制御命令に従ってデータをメモリユニット1017から直接読み取ってもよいし、実行結果をメモリユニット1017に直接書き込んでもよく、これは、実行対象ターゲットプログラム内の特定の命令に依存する。すなわち、グラフフローユニット1011は、グラフ計算制御命令に従ってデータをロード/ストアユニット1013Aから取得してよく、データをメモリユニット1017から取得してもよく、同様に、グラフ計算制御命令に従ってデータをロード/ストアユニット1013Aに書き込んでよく、データをメモリユニット1017に書き込んでもよい。
【0147】
本発明のこの実施形態において、プロセッサコア101内のグラフフローユニットは、プロセッサコア101内のロード/ストアユニットの機能を多重化し、関連するデータ読み取り/書き込み命令内の読み取り/書き込みアドレスに基づき、データをロード/ストアユニットLSUから読み取るか、または、データをロード/ストアユニットLSUに書き込んでよい。
【0148】
考えられる実装において、少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUまたはベクトル演算ユニット1013C(SIMD)を含む。グラフ計算タスクは、浮動小数点演算またはベクトル演算を含む。グラフフローユニット1012は更に、浮動小数点演算のデータを計算のために浮動小数点ユニットFPUに送信し、およびFPUによりフィードバックされる計算結果を受信するように構成されており、または、ベクトル演算のデータを計算のためにベクトル演算ユニット1013C(SIMD)に送信し、SIMDによりフィードバックされる計算結果を受信するように構成されている。
【0149】
浮動小数点ユニット1013B(Floating Point Unit、FPU)は主に、浮動小数点演算および高精度整数演算を担う。浮動小数点演算能力は、CPUのマルチメディア関連アプリケーション、オーディオ/ビデオのエンコードおよびデコード、並びに画像処理/3Dグラフィックス処理に関連する重要な指標であり、CPUの流体力学および量子力学などの科学計算性能にも影響を及ぼす。
【0150】
単一命令多重データ(Single Instruction Multiple Data、SIMD)は、ベクトル演算ユニット1013Cと呼ばれる場合もあり、データレベルの並列処理を実装するための技術である。ベクトル演算ユニット1013Cは、プロセッサのスループットを増やすために、単一の命令で複数の演算を同時に実行する。すなわち、1つのベクトル命令を使用して一群のデータ操作を開始し、データロード、記憶、およびデータ計算をパイプラインの形で実行する。これは、マルチメディア、ビッグデータ、および人工知能などの、粒度が細かい同種の独立したデータ操作が多数ある適用シナリオに適用可能である。
【0151】
上述の説明に基づき、すなわち、グラフフローユニット1012(GFU)のロード/ストアが、プロセッサ10内のロード/ストアユニット1013A(LSU)を多重化してよく、浮動小数点演算および複素ベクトル演算が、FPUおよびSIMDの演算ロジックを多重化する。このように、GFU内の計算ロジックが繰り返し実装されるのを防止し、多数のハードウェア領域を削減し、通常の演算からグラフ演算への切り替えの遅延を削減する。
【0152】
本発明のこの実施形態において、本発明のこの実施形態における汎用演算ユニットは更に、浮動小数点ユニットFPUおよび/またはベクトル演算ユニット1013C(SIMD)を含んでよい。浮動小数点ユニットは、より高いデータ精度を必要とする浮動小数点演算タスクを実行するように構成されており、ベクトル演算ユニット1013Cは、単一命令多重データ演算を実行するように構成されてよい。加えて、汎用演算ユニット(幾つかの専用演算ユニットを含む)およびグラフフローユニットは両方とも、実行パイプラインステージにあり、汎用演算ユニットとグラフフローユニットとの間にデータ伝送チャネルがある。従って、グラフ計算タスクを処理するプロセスでは、浮動小数点演算に関連する計算タスクまたは単一命令多重データ計算タスクがある場合、グラフフローユニットは、その計算タスクを、対応するデータ伝送チャネルを通じて演算のために対応する汎用演算ユニットに送信してよく、対応するタイプの演算タスクを処理するために、対応する処理ユニットをグラフフローユニット内に繰り返し設置する必要はない。従って、ハードウェア領域およびオーバヘッドが大幅に削減される。
【0153】
本願におけるプロセッサの上述の構造および機能設計並びにGraphflowの理論計算モデルに基づき、考えられる実装において、本願では、グラフフロー命令セット(Graphflow Instruction-Set Architecture、Graphflow ISA)内のフロー命令の基本形式、すなわち、本願のグラフ構築ブロック情報に含まれるN個の計算ノードの各々の演算方法、およびN個の計算ノードの接続およびシーケンス情報を更に定義する。単一の計算ノードにより実行される1つの実行命令の形式は、以下の通り[ID+opcode+dest0ID+dest1ID]と表されてよい。
【0154】
図8は、本発明のある実施形態に係るグラフフロー命令の抽象モデルを示す。対応するシーケンス番号がIDである計算ノード上にIDベースのフロー命令が配置される。IDの範囲は、[0、N-1]であり、Nは、Graphflow内のノードの総数である。1つのフロー命令は、1つまたは2つの依存関係を表現してよく、dest0IDおよびdest1IDに結果データが伝送されることを示してよい。
【0155】
本願のグラフアーキテクチャをより良く理解できるよう、本願では、
図8に示すように、Graphflowの各計算ノードが抽象化される。各抽象計算ノード上には、1つの命令および最大2つの出力が配置されてよい。各計算ノードには、左入力(l)バッファおよび右入力(r)バッファ、オペランド(opcode)、並びに2つのターゲットポインタ(dest0Tおよびdest1T。ここで、Tは、ターゲット命令の左入力および右入力を表す)がある。N個のノードが完全に接続されていると仮定されるので、destの範囲は、[0、N-1]であり、従って、任意のノードの出力が指し示し得る、そのノードの左入力(l)バッファおよび右入力(r)バッファを表す。
【0156】
抽象ノード内の(opcode、dest0T、dest1T)ビットは、グラフ構築ステージで書き込まれてよいが、実行ステージで読み取り専用としてキュアされる。実行ステージに入ると、左入力および右入力が到着するかどうかを、全てのノードが並列にチェックする必要がある。両方の入力の準備ができている場合は、演算が実行されてよく、次のノードの左出力および右出力に結果が伝送される。入力が到着していない場合は、ノードはアイドル状態にある。
【0157】
例えば、本願では、コードセグメントの変数同士を接続してグラフを形成し、次に、これらの変数を
図9に示すように記述することができる。
図9は、本発明のある実施形態に係るデータフローグラフへのコードの抽象化の概略図である。
【0158】
命令のIDに基づき、対応する計算ユニット上に命令0、1、2、5、6、および9が配置される。0および5ではA[i]のアドレスが計算され、命令1、2、および6ではデータ(a+b)*(c+d)が計算される。各命令は、データフローの方向を表す。対応する入力および接続がグラフ構築ステージで構成される。
【0159】
実行ステージでは、計算ノードの入力の準備ができているかどうかを全ての計算ノードが並列にチェックし、その結果、上述のコンパイルは、順次ではなく並行して意味論的に実行される。2add 6rとは、「命令2の加算演算の入力2lおよび2rが両方とも到着すると、加算演算が実行され、命令6の右入力(6r)に演算結果が伝送される」ことを意味する。例えば、9stとは、「命令9のストア演算の入力9lおよび9rが両方とも到着すると、ストア演算が実行される」ことを意味する。ストアがデータを別の命令に送信する必要はなく、従って、命令9で宛先が宣言される必要はない。
【0160】
グラフの接続からは、命令間の並列度が明らかである(例えば、命令0、1、および2、並びに命令5および6)と分かる。ハードウェアが行わなければならない唯一のことは、各ノードが必要とする入力が到着するかどうかを並列にチェックすることである。Graphflowアーキテクチャがハードウェア依存関係の分析に大量のロジックを必要としないのは、このためである。実行ステージでは、各ノードについて、ノードの入力が到着することを条件として演算が実行され得る。従って、命令のソース情報をフロー命令のコード内に配置する必要はない。各フロー命令の入力は、異なるノードにより動的に入力されてもよいし、別のハードウェアモジュールにより伝送されてもよい。各命令の演算は、別の命令が必要とするデータをその別の命令が上記命令に伝送することを条件として、上記命令がデータを読み取る場所に関わらず実行され得る。命令の入力が到着していない場合は、命令は待機する。従って、Graphflowの実行は、アウトオブオーダ方式で伝送され、並行して実行され、各計算ノードの一定数のクロックサイクルは必要ない。従って、Graphflow演算プロセスで任意の時点に割り込まれる場合の、正確なグラフ状態(Exact State)はない。しかしながら、各命令の左バッファおよび右バッファにグラフの中間状態が記憶される。従って、中間状態は、メモリに記憶されてよい。
【0161】
図10は、本発明のある実施形態に係る処理方法の概略フローチャートである。処理方法は、プロセッサに適用され、プロセッサは、プロセッサコアを含む。プロセッサコアは、命令ディスパッチユニット、および命令ディスパッチユニットに接続されたグラフフローユニットおよび少なくとも1つの汎用演算ユニットを含む。加えて、処理方法は、
図1から
図3における任意のプロセッサと、そのプロセッサを含むデバイス(例えば、携帯電話、コンピュータ、またはサーバ)とに適用可能である。方法は、以下のステップS201およびステップS203を含んでよい。
【0162】
ステップS201:命令ディスパッチユニットは、デコードされた実行対象命令内の汎用計算命令を少なくとも1つの汎用計算ユニットに割り当て、およびデコードされた実行対象命令内のグラフ計算制御命令をグラフフローユニットに割り当て、ここで、汎用計算命令は、汎用計算タスクの実行を命令するために使用され、グラフ計算制御命令は、グラフ計算タスクの実行を命令するために使用される。
【0163】
ステップS202:少なくとも1つの汎用演算ユニットは、汎用計算命令を実行する。
【0164】
ステップS203:グラフフローユニットは、グラフ計算制御命令を実行する。
【0165】
考えられる実装において、プロセッサコアは更に、命令フェッチユニットおよび命令デコードユニットを含み、方法は更に、命令フェッチユニットが実行対象ターゲットプログラムを取得する;および命令デコードユニットが、デコードされた実行対象命令を取得するために実行対象ターゲットプログラムをデコードすることを含む。
【0166】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、グラフフローユニットおよび汎用演算ユニットは、結果ライトバックユニットに個別に接続される。方法は更に、少なくとも1つの汎用演算ユニットが汎用計算タスクの第1実行結果を結果ライトバックユニットに送信し、ここで、汎用計算タスクの第1実行結果は、汎用計算命令が実行された後に取得される結果である;グラフフローユニットがグラフ計算タスクの第2実行結果を結果ライトバックユニットに送信し、ここで、グラフ計算タスクの第2実行結果は、グラフ計算制御命令が実行された後に取得される結果である;および結果ライトバックユニットが第1実行結果および第2実行結果のうちの一方または両方を命令ディスパッチユニットにライトバックすることを含む。
【0167】
考えられる実装において、プロセッサは更に、メモリユニットを含み、グラフフローユニットは、N個の計算ノードを含み、グラフ計算制御命令は、グラフ構築開始命令を含み、グラフ構築開始命令は、メモリユニット内のターゲットアドレスを保持し、グラフフローユニットがグラフ計算制御命令を実行することは、グラフフローユニットがグラフ構築開始命令を受信し、およびターゲットアドレスに基づきグラフ構築ブロック情報をメモリユニットから読み取り、ここで、グラフ構築ブロック情報は、N個の計算ノードの各々の演算方法、およびN個の計算ノードの接続およびシーケンス情報を含むことを有する。
【0168】
考えられる実装において、グラフ計算制御命令は、パラメータ受け渡し命令を含み、パラメータ受け渡し命令は、M個の計算ノードの識別子、およびM個の計算ノードの識別子に個別に対応する入力パラメータを保持し、M個の計算ノードは、N個のノードのうちの幾つかまたは全てのノードであり、グラフフローユニットがグラフ計算制御命令を実行することは、グラフフローユニットがパラメータ受け渡し命令を受信し、およびM個の計算ノードの識別子に個別に対応する入力パラメータをM個の計算ノードに個別に入力することを有する。
【0169】
考えられる実装において、N個の計算ノードの接続およびシーケンス情報は、L個のエッジに個別に対応するソースノードおよび宛先ノードを含み、グラフフローユニットがグラフ計算制御命令を実行することは、グラフフローユニットが、N個の計算ノードの各々が必要とする入力パラメータの準備ができているかどうかを監視し、入力パラメータの準備ができているターゲット計算ノードの入力パラメータを、計算のためにターゲット計算ノードに対応する演算方法に入力して計算結果を取得し、およびL個のエッジに個別に対応するソースノードおよび宛先ノードに基づき、各エッジに関するソースノードの計算結果を対応する宛先ノードに入力パラメータとして入力することを有する。
【0170】
考えられる実装において、グラフ計算制御命令は、グラフ計算開始命令を含み、グラフフローユニットがグラフ計算タスクの実行結果を取得するためにグラフ計算制御命令を実行することが、グラフ計算開始命令を受信した後、グラフフローユニットが、グラフフローユニットにより読み取られるグラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致するかどうかをチェックし、およびM個の計算ノード内の入力パラメータが入力されているかどうかを判断し、およびグラフ構築ブロック情報が、事前に開始されたグラフ構築ブロックのアドレスと一致し、且つ、M個の計算ノード内の入力パラメータが入力されている場合に、グラフ計算タスクの実行を開始することを含む。
【0171】
考えられる実装において、方法は更に、グラフフローユニットがグラフ計算開始命令を受信した後、グラフ計算タスクが完了する前に、命令ディスパッチユニットがプロセッサコアを制御してブロック状態に入らせることを含む。
【0172】
考えられる実装において、方法は更に、命令ディスパッチユニットが実行結果同期命令をグラフフローユニットに送信し、およびグラフフローユニットが実行結果同期命令を受信した後、グラフ計算タスクが完了する前に、プロセッサコアを制御してブロック状態に入らせることを含む。
【0173】
考えられる実装において、方法は更に、グラフフローユニットがグラフ計算タスクを完了した後、命令ディスパッチユニットがプロセッサコアを制御してブロック状態を終了させることを含む。
【0174】
考えられる実装において、プロセッサコアは更に、結果ライトバックユニットを含み、結果ライトバックユニットは、複数のレジスタを含む。グラフフローユニットおよび少なくとも1つの汎用演算ユニットは、結果ライトバックユニットに個別に接続されている。グラフ計算制御命令は、パラメータ復帰命令を含み、パラメータ復帰命令は、K個の計算ノードの識別子、およびK個の計算ノードの識別子に個別に対応するレジスタを保持する。グラフ計算制御命令は、グラフ計算開始命令を含み、グラフフローユニットがグラフ計算タスクの実行結果を取得するためにグラフ計算制御命令を実行することが、グラフフローユニットがK個の計算ノードの計算結果を結果ライトバックユニット内の対応するレジスタに個別に送信するよう制御することを含む。
【0175】
考えられる実装において、汎用計算命令は、汎用算術論理命令を含み、少なくとも1つの汎用演算ユニットは、算術論理ユニットALUを含み、少なくとも1つの汎用演算ユニットが汎用計算命令を実行することは、算術論理ユニットALUが、命令ディスパッチユニットにより送信される汎用算術論理命令を受信し、および論理演算を実行することを有する。
【0176】
代替的に、考えられる実装において、汎用計算命令は、ロード/ストア命令を含み、少なくとも1つの汎用演算ユニットは、ロード/ストアユニットLSUを含み、少なくとも1つの汎用演算ユニットが汎用計算命令を実行して汎用計算タスクの実行結果を取得することが、ロード/ストアユニットLSUが、命令ディスパッチユニットにより送信されるロード/ストア命令を受信し、およびロード/ストア操作を実行することを含む。
【0177】
考えられる実装において、グラフ計算制御命令は、データ読み取り/書き込み命令を含み、データ読み取り/書き込み命令は、ロード/ストアアドレスを保持する。方法は更に、グラフフローユニットが、データ読み取り/書き込み命令内のロード/ストアアドレスに基づき、データをロード/ストアユニットLSUから読み取るか、または、データをロード/ストアユニットLSUに書き込むことを含む。
【0178】
考えられる実装において、少なくとも1つの汎用演算ユニットは更に、浮動小数点ユニットFPUを含み、グラフ計算タスクは、浮動小数点演算を含む。方法は更に、グラフフローユニットが浮動小数点演算のデータを計算のために浮動小数点ユニットFPUに送信し、およびFPUによりフィードバックされる計算結果を受信することを含む。
【0179】
代替的に、考えられる実装において、少なくとも1つの汎用演算ユニットは更に、ベクトル演算ユニットSIMDを含み、グラフ計算タスクは、ベクトル演算を含む。方法は更に、グラフフローユニットがベクトル演算のデータを計算のためにベクトル演算ユニットSIMDに送信し、およびSIMDによりフィードバックされる計算結果を受信することを含む。
【0180】
なお、本発明のこの実施形態で説明する処理方法の具体的な手順については、
図1から
図9で説明する本発明の上述の実施形態における関連説明を参照されたい。ここでは詳細について改めて説明しない。
【0181】
本発明のある実施形態は更に、コンピュータ可読記憶媒体を提供する。コンピュータ可読記憶媒体は、プログラムを記憶してよく、プログラムがプロセッサにより実行されると、プロセッサは、上述の方法の実施形態のいずれか1つで説明するステップのうちの幾つかまたは全てを実行することが可能であってよい。
【0182】
本発明のある実施形態は更に、コンピュータプログラムを提供する。コンピュータプログラムは、命令を含み、コンピュータプログラムがマルチコアプロセッサにより実行されると、プロセッサは、上述の方法の実施形態のいずれか1つで説明するステップのうちの幾つかまたは全てを実行することが可能であってよい。
【0183】
上述の実施形態において、各実施形態の説明にはそれぞれの着目点がある。ある実施形態で詳細に説明しない部分については、他の実施形態における関連説明を参照してよい。
【0184】
なお、説明を簡潔にするために、上述の方法の実施形態は、一連の動作として表される。しかしながら、本願によれば幾つかのステップが他の順序でまたは同時に実行され得るので、説明されている動作の順序に本願が限定されないことを、当業者は理解すべきである。この明細書で説明する実施形態が全て好ましい実施形態に属しており、含まれる動作およびモジュールが必ずしも本願に必要であるとは限らないことを、当業者は更に理解すべきである。
【0185】
本願で提供する幾つかの実施形態では、開示されている装置が他の方式で実装され得ることを理解されたい。例えば、説明されている装置の実施形態は、例に過ぎない。例えば、ユニットへの分割は論理的な機能分割に過ぎず、実際の実装では他の分割であってよい。例えば、複数のユニットまたはコンポーネントを組み合わせるかまたは別のシステムに統合してもよいし、幾つかの特徴を無視するかまたは実行しなくてもよい。加えて、表示または説明されている相互結合もしくは直接結合または通信接続は、幾つかのインタフェースを通じて実装されてよい。装置間またはユニット間の間接結合または通信接続は、電子的な形または他の形で実装されてよい。
【0186】
別個の部分として説明する上述のユニットは、物理的に分離していてもしていなくてもよく、ユニットとして表示する部分は、物理的なユニットであってもなくてもよいし、1つの位置に位置付けられてもよいし、複数のネットワークユニット上に分配されてもよい。実施形態の解決策の目的を達成するための実際の要件に基づき、これらのユニットのうちの幾つかまたは全てが選択されてよい。
【0187】
加えて、本願の実施形態における機能ユニットが1つの処理ユニットに統合されてもよいし、これらのユニットの各々が物理的に単独で存在してもよく、または、2つまたはそれより多くのユニットが1つのユニットに統合される。統合されたユニットは、ハードウェアの形で実装されてもよいし、ソフトウェア機能ユニットの形で実装されてもよい。
【0188】
上述の統合されたユニットがソフトウェア機能ユニットの形で実装され、独立した製品として販売または使用される場合は、統合されたユニットは、コンピュータ可読記憶媒体に記憶されてよい。そのような理解に基づき、本願の技術的解決策は本質的に、または、先行技術に寄与する部分は、または技術的解決策のうちの全てもしくは幾つかが、ソフトウェア製品の形で実装されてよい。コンピュータソフトウェア製品は、記憶媒体に記憶され、コンピュータデバイス(パーソナルコンピュータ、サーバ、またはネットワークデバイスなどであってよく、具体的にはコンピュータデバイス内のプロセッサであってよい)に、本願の実施形態で説明する方法のステップのうちの全てまたは幾つかを実行するよう命令するための幾つかの命令を含む。上述の記憶媒体は、USBフラッシュドライブ、リムーバブルハードディスク、磁気ディスク、光ディスク、リードオンリメモリ(Read-Only Memory、略してROM)、またはランダムアクセスメモリ(Random Access Memory、略してRAM)などの、プログラムコードを記憶することができる任意の媒体を含んでよい。
【0189】
上述の実施形態は、本願の技術的解決策の説明を意図しているに過ぎず、本願の限定を意図しているわけではない。上述の実施形態を参照しながら本願が詳細に説明されているが、本願の実施形態の技術的解決策の趣旨および範囲から逸脱することなく、上述の実施形態で説明した技術的解決策に対する修正、または、その幾つかの技術的特徴に対する同等の置き換えを依然として行い得ることを、当業者は理解すべきである。
【国際調査報告】