(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024123842
(43)【公開日】2024-09-12
(54)【発明の名称】演算処理装置および演算処理装置の制御方法
(51)【国際特許分類】
G06F 9/50 20060101AFI20240905BHJP
【FI】
G06F9/50 150Z
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023031585
(22)【出願日】2023-03-02
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】伊藤 真紀子
(57)【要約】
【課題】バス幅を大きくすることなく複数の演算ユニットの稼動率を向上する。
【解決手段】演算処理装置は、演算を実行する複数の演算ユニットと、前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断する圧縮判断部と、前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する圧縮部と、を有する。これにより、演算処理装置の処理性能の向上することができ、科学技術計算または機械学習等の効率を向上することができる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
演算を実行する複数の演算ユニットと、
前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、
前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断する圧縮判断部と、
前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する圧縮部と、を有する
演算処理装置。
【請求項2】
前記複数の演算ユニットの動作をそれぞれ制御し、データ転送要求と圧縮の許可を示す圧縮許可フラグとを出力する複数の演算制御部を有し、
前記圧縮判断部は、
前記第1データの圧縮の可否を示す圧縮可否フラグを生成する判定部と、
前記圧縮可否フラグと、前記複数の演算制御部からそれぞれ受信する複数の前記圧縮許可フラグとに基づいて、圧縮仕様を示す圧縮情報を生成する圧縮制御部と、を有し、
前記圧縮部は、前記圧縮情報に基づいて前記第1データを圧縮する
請求項1に記載の演算処理装置。
【請求項3】
前記第1データは、浮動小数点数データであり、
前記判定部は、前記データ転送要求によるアクセス単位である複数の浮動小数点数データの指数部の値の大きさに応じて、前記圧縮可否フラグを生成する
請求項2に記載の演算処理装置。
【請求項4】
前記判定部は、前記複数の浮動小数点数データの指数部の値の最大値および最小値を表現可能なデータ型を示す前記圧縮可否フラグを生成する
請求項3に記載の演算処理装置。
【請求項5】
前記圧縮制御部は、生成した前記圧縮情報により圧縮する複数の演算ユニット用の複数の前記第1データのサイズが前記バスのバス幅より大きい場合、生成した前記圧縮情報にかかわらず、データを前記圧縮部から複数回に分けて前記バスに転送させる前記圧縮情報を生成する
請求項2ないし請求項4のいずれか1項に記載の演算処理装置。
【請求項6】
前記圧縮制御部は、前記複数の演算制御部のいずれかから単一の前記データ転送要求を受信した場合、前記圧縮可否フラグおよび前記圧縮許可フラグにかかわらず、非圧縮を示す前記圧縮情報を生成する
請求項2ないし請求項4のいずれか1項に記載の演算処理装置。
【請求項7】
前記第1データを保持するメモリを有し、
前記判定部は、前記メモリに格納される前記第1データ毎に前記圧縮可否フラグを生成し、生成した前記圧縮可否フラグを前記第1データとともに前記メモリに格納し、
前記圧縮制御部は、前記データ転送要求とともに受信する前記圧縮許可フラグと、前記データ転送要求に応じて前記第1データとともに前記メモリから出力される前記圧縮可否フラグとに基づいて前記圧縮情報を生成する
請求項2ないし請求項4のいずれか1項に記載の演算処理装置。
【請求項8】
前記複数の演算ユニットの各々に対応して設けられ、前記バスを介して受信する圧縮されたデータを前記圧縮情報に基づいて伸長する伸長部を有する
請求項2ないし請求項4のいずれか1項に記載の演算処理装置。
【請求項9】
前記バス、前記圧縮判断部および前記圧縮部をそれぞれ含む複数のデータ供給部を有する
請求項2ないし請求項4のいずれか1項に記載の演算処理装置。
【請求項10】
演算を実行する複数の演算ユニットと、前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、を有する演算処理装置の制御方法であって、
前記演算処理装置が有する圧縮判断部が、前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断し、
前記演算処理装置が有する圧縮部が、前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する
演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【0002】
科学技術計算または機械学習等で使用する演算は、行列演算が多用されることが多い。汎用CPUを用いた大規模な行列演算は、性能向上に限界があることが知られている。そこで、複数のプロセッシングエレメントを縦横に配置して大規模な行列乗算を高速に実行するシストリックアレイ型のアクセラレータが提案されている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
プロセッシングエレメントにデータを入出力するバスの幅は、プロセッシングエレメントの数が多くなるほど大きくなる。例えば、複数のプロセッシングエレメントを各々含み独立に動作する複数の演算ユニットを縦横に配置する場合、性能向上のためには、一方向に並ぶ演算ユニットに同時にデータを供給することが好ましい。しかしながら、バスの配線面積等の制約により、一方向に並ぶ演算ユニットに同時にデータを供給可能なバス幅を確保できない場合、複数の演算ユニットを並列に動作させることが困難になる。この結果、演算ユニットの稼動率が低下し、アクセラレータの処理性能は低下する。
【0005】
1つの側面では、本発明は、バス幅を大きくすることなく複数の演算ユニットの稼動率を向上することを目的とする。
【課題を解決するための手段】
【0006】
一つの観点によれば、演算処理装置は、演算を実行する複数の演算ユニットと、前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断する圧縮判断部と、前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する圧縮部と、を有する。
【発明の効果】
【0007】
バス幅を大きくすることなく複数の演算ユニットの稼動率を向上することができる。
【図面の簡単な説明】
【0008】
【
図1】一実施形態におけるアクセラレータの一例を示すブロック図である。
【
図2】
図1のアクセラレータの動作の一例を示す説明図である。
【
図3】別の実施形態におけるアクセラレータの一例を示すブロック図である。
【
図4】
図3の一点鎖線枠に含まれる要素の一例を示すブロック図である。
【
図5】
図3の行列演算ユニットMOUの一例を示すブロック図である。
【
図6】
図5の行列演算ユニットMOUによる演算の一例を示す説明図である。
【
図7】
図3のアクセラレータが搭載される情報処理装置の一例を示すブロック図である。
【
図8】
図3の型判定部DTYPによる圧縮可否フラグFLG0の求め方の概要を示す説明図である。
【
図9】
図3の型判定部DTYPの動作の一例を示すフロー図である。
【
図10】
図4のバス制御部BCNTによる調停の概要を示す説明図である。
【
図11】
図3のバス制御部BCNT(A)、BCNT(C)によるリクエストREQの調停動作の一例を示すフロー図である。
【
図12】
図7の情報処理装置の動作の一例を示すフロー図である。
【
図13】
図3の行列演算ユニットMOUの動作の一例を示すフロー図である。
【
図14】
図3の行列演算ユニットMOUを制御する制御部CNTの動作の一例を示すフロー図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して実施形態が説明される。以下では、データ、アドレス、コマンド等の信号が伝達される信号線には、信号名と同じ符号が使用される。
【0010】
図1は、一実施形態におけるアクセラレータの一例を示す。
図1に示すアクセラレータ100は、判定部10、メモリ20、圧縮制御部30、圧縮部40、伸長部50a、50b、演算ユニット60a、60b、演算制御部70a、70b、入力バスIBUSおよび出力バスOBUSを有する。判定部10および圧縮制御部30は、圧縮判断部の一例である。
【0011】
伸長部50aおよび演算制御部70aは、演算ユニット60aに対応して設けられ、伸長部50bおよび演算制御部70bは、演算ユニット60bに対応して設けられる。入力バスIBUSおよび出力バスOBUSは、複数の演算ユニット60a、60bに共通に設けられる。例えば、各演算ユニット60a、60bは、シストリックアレイとして動作する。以下では、演算ユニット60a、60bが区別なく説明される場合、演算ユニット60とも称される。
【0012】
例えば、判定部10、メモリ20、圧縮制御部30、圧縮部40、伸長部50a、50bおよび入力バスIBUSは、シストリックアレイの列方向Xに転送するデータをシストリックアレイに供給する回路ブロックを示す。アクセラレータ100は、シストリックアレイの行方向Yに転送するデータをシストリックアレイに供給する図示しない判定部10、メモリ20、圧縮制御部30、圧縮部40、伸長部50a、50bおよび入力バスIBUSを有してもよい。
【0013】
判定部10は、アクセラレータ100の外部から転送されるデータDTa、DTbの圧縮の可否を判定する。なお、データDTa、DTbは、アクセラレータ100に同時に転送されてもよく、別々のタイミングで転送されてもよい。データDTa、DTbは、第1データの一例である。以下では、データDTa、DTbが区別なく説明される場合、データDTとも称される。
【0014】
判定部10は、データDTa、DTbのそれぞれの圧縮の可否を示す圧縮可否フラグFLG0a、FLG0bをデータDTa、DTbとともにメモリ20に格納する。以下では、圧縮可否フラグFLG0a、FLG0bが区別なく説明される場合、圧縮可否フラグFLG0とも称される。特に限定されないが、例えば、各データDTa、DTbは、リクエストREQa、REQbによるアクセス単位である32個の64ビットの浮動小数点数データである。以下では、64ビットの浮動小数点数データは、FP64とも称される。
【0015】
例えば、判定部10は、32個のデータDT(FP64)の指数部の値の最大値と最小値とが、32ビットの浮動小数点数データのデータ型の指数部に納まる場合、圧縮可否フラグFLG0を"1"に設定する。すなわち、圧縮可否フラグFLG0の"1"は、32個のFP64の全ての指数部の値が、32ビットの浮動小数点数データのデータ型で表現可能であり、圧縮可能なことを示す。以下では、32ビットの浮動小数点数データは、FP32とも称される。
【0016】
指数部の値の最大値と最小値とに応じて圧縮可否フラグFLG0を生成することで、FP64を圧縮してFP32を生成する場合にも、圧縮の前後において、指数の値を同じにすることができ、演算ユニット60が誤った行列演算を実行することを抑止することができる。この結果、アクセラレータ100の誤動作を抑止することができる。
【0017】
判定部10は、32個のFP64の指数部の最大値、最小値、または最大値と最大値との両方が、FP32のデータ型の指数部に納まらない場合、圧縮可否フラグFLG0を"0"に設定する。すなわち、圧縮可否フラグFLG0の"0"は、32個のFP64の指数部の1つまたは複数が、FP32のデータ型で表現できず、圧縮不可能なことを示す。
【0018】
メモリ20は、圧縮制御部30からアドレスADaを受信した場合、アドレスADaで示される領域に保持しているデータDTaと圧縮可否フラグFLG0aとを出力する。また、メモリ20は、圧縮制御部30からアドレスADbを受信した場合、アドレスADbで示される領域に保持しているデータDTbと圧縮可否フラグFLG0bとを出力する。例えば、データDTa、DTbは、圧縮部40に入力され、圧縮可否フラグFLG0a、FLG0bは、圧縮制御部30に入力される。以下では、アドレスADa、ADbが区別なく説明される場合、アドレスADとも称される。
【0019】
圧縮制御部30は、演算制御部70aからアドレスADaを含むリクエストREQaとともに圧縮許可フラグFLG1aを受信し、演算制御部70bからアドレスADbを含むリクエストREQbとともに圧縮許可フラグFLG1bを受信する。リクエストREQa、REQbは、データ転送要求の一例である。
【0020】
以下では、演算制御部70a、70bが区別なく説明される場合、演算制御部70とも称される。圧縮許可フラグFLG1a、FLG1bが区別なく説明される場合、圧縮許可フラグFLG1とも称される。リクエストREQa、REQbが区別なく説明される場合、リクエストREQとも称される。
【0021】
例えば、演算制御部70は、演算の精度を落とせない場合、圧縮許可フラグFLG1を"0"に設定し、演算の精度を落としてもよい場合、圧縮許可フラグFLG1を"1"に設定する。すなわち、演算制御部70は、演算ユニット60による行列演算の要求精度に合わせて圧縮許可フラグFLG1を生成する。なお、圧縮許可フラグFLG1aは、リクエストREQaに含まれてもよく、圧縮許可フラグFLG1bは、リクエストREQbに含まれてもよい。
【0022】
圧縮制御部30は、リクエストREQa毎に、圧縮可否フラグFLG0aと圧縮許可フラグFLG1aとに基づいて、データDTaを圧縮するか否かを決定し、圧縮または非圧縮を示す圧縮制御信号CCNTaを圧縮部40および伸長部50aに出力する。圧縮制御部30は、リクエストREQb毎に、圧縮可否フラグFLG0bと圧縮許可フラグFLG1bとに基づいて、データDTbを圧縮するか否かを決定し、圧縮または非圧縮を示す圧縮制御信号CCNTbを圧縮部40および伸長部50bに出力する。以下では、圧縮制御信号CCNTa、CCNTbが区別なく説明される場合、圧縮制御信号CCNTとも称される。圧縮制御信号CCNTa、CCNTbは、圧縮情報の一例である。
【0023】
圧縮部40は、圧縮を示す圧縮制御信号CCNTaを受けた場合、データDTa(32個のFP64)を圧縮して32個のFP32を生成し、入力バスIBUSに出力する。圧縮部40は、非圧縮を示す圧縮制御信号CCNTaを受けた場合、データDTa(32個のFP64)を圧縮せずに入力バスIBUSに出力する。データDTa(32個のFP64または32個のFP32)は、入力バスIBUSを介して圧縮データCDTaとして伸長部50aに供給される。圧縮データCDTaは、第2データの一例である。
【0024】
圧縮部40は、圧縮を示す圧縮制御信号CCNTbを受信した場合、データDTb(32個のFP64)を圧縮して32個のFP32を生成し、入力バスIBUSに出力する。圧縮部40は、非圧縮を示す圧縮制御信号CCNTbを受信した場合、データDTb(32個のFP64)を圧縮せずに入力バスIBUSに出力する。以下では、圧縮制御信号CCNTa、CCNTbが区別なく説明される場合、圧縮制御信号CCNTとも称される。
【0025】
データDTb(32個のFP64または32個のFP32)は、入力バスIBUSを介して圧縮データCDTbとして伸長部50bに供給される。圧縮データCDTbは、第2データの一例である。例えば、入力バスIBUSは、256B(バイト)の幅を有し、32個のFP64または64個のFP32を同時に転送可能である。
【0026】
伸長部50aは、圧縮制御信号CCNTaが圧縮を示す場合、入力バスIBUSを介して受信する圧縮データCDTa(32個のFP32)を伸長して32個のFP64を生成し、データDTa1として演算ユニット60aに出力する。伸長部50aは、圧縮制御信号CCNTaが非圧縮を示す場合、入力バスIBUSを介して受信する圧縮データCDTa(32個のFP64)をそのままデータDTa1として演算ユニット60aに出力する。
【0027】
伸長部50bは、圧縮制御信号CCNTbが圧縮を示す場合、入力バスIBUSを介して受信する圧縮データCDTb(32個のFP32)を伸長して32個のFP64を生成し、データDTb1として演算ユニット60bに出力する。伸長部50bは、圧縮制御信号CCNTbが非圧縮を示す場合、入力バスIBUSを介して受信する圧縮データCDTb(32個のFP64)をそのままデータDTb1として演算ユニット60bに出力する。
【0028】
演算ユニット60は、列方向Xに32個と行方向Yに32個とがそれぞれ配置された1024個の図示しないプロセッシングエレメント(シストリックアレイ)を有する。例えば、演算ユニット60a、60bは、
図5に示す行列演算ユニットMOUと同様のシストリックアレイを有する。
【0029】
演算ユニット60は、伸長部50a(または、伸長部50b)を介して受信する32個のFP64を、シストリックアレイの列方向Xの一端に行方向Yに沿って並ぶ32個のプロセッシングエレメントPEにそれぞれ供給する(列方向Xへの転送)。また、演算ユニット60は、行方向Yへの転送用の図示しない伸長部50a(または、伸長部50b)を介して受信する32個のFP64を、シストリックアレイの行方向Yの一端に列方向Xに沿って並ぶ32個のプロセッシングエレメントPEにそれぞれ供給する。
【0030】
例えば、各プロセッシングエレメントは、1個のFP64と予め保持している1個のFP64とを乗算する。各プロセッシングエレメントは、乗算結果を行方向Yの上流側のプロセッシングエレメントから受信するFP64(例えば、部分和)と加算して新たな部分和を生成し、行方向Yの下流側のプロセッシングエレメントに出力する。そして、シストリックアレイに順次供給されるデータを使用して行列演算が順次実行される。シストリックアレイによる行列演算の結果は、64個のFP64を含む出力データODTa(または、ODTb)として出力バスOBUSに出力される。例えば、出力バスOBUSは、256Bの幅を有してもよく、512Bの幅を有してもよい。
【0031】
演算制御部70aは、リクエストREQaおよび圧縮許可フラグFLG1aを生成して圧縮制御部30に出力することで、演算ユニット60a用のデータをメモリ20から転送させ、転送されたデータの行列演算を演算ユニット60aに実行させる。演算制御部70bは、リクエストREQbおよび圧縮許可フラグFLG1bを生成して圧縮制御部30に出力することで、演算ユニット60b用のデータをメモリ20から転送させ、転送されたデータの行列演算を演算ユニット60bに実行させる。
【0032】
図2は、
図1のアクセラレータ100の動作の一例を示す。
図2に示す動作1、動作2および動作3では、圧縮制御部30は、リクエストREQa、REQbを同じサイクルで受信する。
【0033】
動作1では、圧縮制御部30は、リクエストREQaとともに圧縮許可フラグFLG1a="1"を受信し、リクエストREQbとともに圧縮許可フラグFLG1b="1"を受信する。圧縮制御部30は、リクエストREQaに含まれるアドレスADaに対応してメモリ20から圧縮可否フラグFLG0a="1"を受信し、リクエストREQbに含まれるアドレスADbに対応してメモリ20から圧縮可否フラグFLG0b="1"を受信する。
【0034】
圧縮制御部30は、圧縮許可フラグFLG1a、FLG1bおよび圧縮可否フラグFLG0a、FLG0bの"1"に基づいて、リクエストREQa、REQbに対応する64個のデータDTa、DTbを圧縮することで入力バスIBUSに同時に出力可能と判断する。そして、圧縮制御部30は、データDTをFP64からFP32に圧縮させる圧縮制御信号CCNTを圧縮部40に出力する。
【0035】
圧縮部40は、圧縮した64個のデータCDTa(FP32)、CDTb(FP32)を、1つの転送サイクルで入力バスIBUSに出力する。伸長部50a、50bは、データCDTa(FP32)、CDTb(FP32)をデータDTa1(FP64)、DTb1(FP64)に伸長し、演算ユニット60a、60bにそれぞれ出力する。演算ユニット60a、60bは、データDTa1、DTb1をそれぞれ使用して行列演算を実行する。
【0036】
ビット幅が入力バスIBUSのバス幅の2倍である64個のデータDTa(FP64)、DTb(FP64)を圧縮することで、データDTa、DTbを一度に転送することができる。入力バスIBUSのバス幅を大きくすることなくデータDTa、DTbを圧縮、転送、伸長し、演算ユニット60a、60bで行列演算を実行することができるため、演算ユニット60a、60bの稼動率を向上することができる。
【0037】
動作2では、圧縮制御部30は、リクエストREQaとともに圧縮許可フラグFLG1a="1"または"0"を受信し、リクエストREQbとともに圧縮許可フラグFLG1b="1"または"0"を受信する。圧縮制御部30は、リクエストREQaに含まれるアドレスADaに対応してメモリ20から圧縮可否フラグFLG0a="1"または"0"を受信する。また、圧縮制御部30は、リクエストREQbに含まれるアドレスADbに対応してメモリ20から圧縮可否フラグFLG0a="0"を受信する。
【0038】
圧縮制御部30は、圧縮許可フラグFLG1a、FLG1bおよび圧縮可否フラグFLG0a、FLG0bの1つまたは複数が"0"の場合、リクエストREQa、REQbの一方のデータ転送に入力バスIBUSが占有されると判断する。このため、圧縮制御部30は、データDTa、DTbを同時に転送できないと判断する。
【0039】
圧縮制御部30は、最初の転送サイクル(1)で、データDTa(FP64)またはデータDTb(FP64)の一方を非圧縮で転送する圧縮制御信号CCNTを圧縮部40に出力する。圧縮制御部30は、次の転送サイクル(2)で、データDTa(FP64)またはデータDTb(FP64)の他方を非圧縮で転送する圧縮制御信号CCNTを圧縮部40に出力する。
【0040】
圧縮部40は、データDTa、DTbを圧縮せずに入力バスIBUSに順次出力する。伸長部50a、50bは、互いに異なるサイクルで、データDTa、DTbを伸長せずにそのまま演算ユニット60a、60bにそれぞれ出力する。演算ユニット60a、60bは、それぞれデータDTa、DTbを使用して互いに異なるサイクルで行列演算を実行する。このため、動作2では、演算ユニット60a、60bの稼動率は向上しない。
【0041】
動作3では、圧縮制御部30は、リクエストREQaとともに圧縮許可フラグFLG1a="0"を受信し、リクエストREQbとともに圧縮許可フラグFLG1b="1"または"0"を受信する。圧縮制御部30は、リクエストREQaに含まれるアドレスADaに対応してメモリ20から圧縮可否フラグFLG0a="1"または"0"を受信する。また、圧縮制御部30は、リクエストREQbに含まれるアドレスADbに対応してメモリ20から圧縮可否フラグFLG0b="1"または"0"を受信する。
【0042】
圧縮制御部30は、動作2と同様に、データDTa、DTbを同時に転送できないと判断する。そして、圧縮制御部30は、2つの転送サイクル(1)、(2)を使用して、データDTa(FP64)およびデータDTb(FP64)を非圧縮で転送する圧縮制御信号CCNTを圧縮部40に出力する。
【0043】
動作4では、圧縮制御部30は、リクエストREQaとともに圧縮許可フラグFLG1a="1"または"0"を受信し、リクエストREQbを受信しない。圧縮制御部30は、リクエストREQaに含まれるアドレスADaに対応してメモリ20から圧縮可否フラグFLG0a="1"または"0"を受信する。
【0044】
圧縮制御部30は、リクエストREQaのみを受信した場合、データDTa(FP64)を非圧縮で演算ユニット60aに転送すると判断する。なお、圧縮制御部30は、リクエストREQbのみを受信した場合、データDTb(FP64)を非圧縮で演算ユニット60bに転送すると判断する。圧縮部40は、データDTaを圧縮せずに入力バスIBUSに出力する。伸長部50aは、データDTaをそのままデータDTa1として演算ユニット60aに出力する。演算ユニット60aは、データDTa1を使用して行列演算を実行する。
【0045】
以上、この実施形態では、判定部10は、圧縮許可フラグFLG1a、FLG1bが"1"の場合、データDTa、DTbの圧縮が可能と判定し、圧縮部40は、判定結果に基づいて、メモリ20から出力されるデータDTa、DTbを圧縮して出力する。これにより、入力バスIBUSを介してデータDTa、DTbを同じ転送サイクルで演算ユニット60a、60bに転送することができ、演算ユニット60a、60bの稼動率を向上することができる。この結果、データDTa、DTbを圧縮せずに異なる転送サイクルで順次転送する場合に比べて、アクセラレータ100の処理性能を向上することができる。
【0046】
圧縮制御部30は、圧縮可否フラグFLG0だけでなく圧縮許可フラグFLG1に基づいて、データDTa、DTbの圧縮の可否を判断する。これにより、演算ユニット60a、60bによる行列演算の要求精度に合わせて、データDTa、DTbを圧縮または非圧縮することができる。
【0047】
判定部10は、32個のデータDT(FP64)の指数部の値の大きさに応じて圧縮可否フラグFLG0を生成する。例えば、判定部10は、32個のデータDT(FP64)の指数部の最大値および最小値を表現可能なデータ型を示す圧縮可否フラグ値を生成する。これにより、FP64を圧縮してFP32を生成する場合にも、圧縮の前後において、32個の全てのデータDTの指数の値を同じにすることができ、演算ユニット60による誤った行列演算の実行を抑止することができる。この結果、アクセラレータ100の誤動作を抑止することができる。
【0048】
判定部10は、メモリ20に格納されるデータDT毎に圧縮可否フラグFLGを生成し、データDTとともにメモリ20に格納する。圧縮制御部30は、リクエストREQに含まれるアドレスADをメモリ20に出力し、リクエストREQに対応するデータDTと圧縮可否フラグFLG0とをメモリ20に出力させる。
【0049】
このため、判定部10は、圧縮可否フラグFLG0の生成のためにデータDTをメモリ20から読み出さなくてよく、生成した圧縮可否フラグFLG0をデータDTと別にメモリ20に格納しなくてよい。したがって、圧縮可否フラグFLG0の生成効率を向上することができる。また、判定部10は、圧縮制御部30からのリクエストREQを受信した後に圧縮可否フラグFLG0を生成しなくてよいため、圧縮制御部30による圧縮の可否の判断を迅速に実施することができる。
【0050】
演算ユニット60aに対応して設けられる伸長部50aは、圧縮制御部30からの圧縮制御信号CCNTaに応じて圧縮されたデータCDTaを伸長する。演算ユニット60bに対応して設けられる伸長部50bは、圧縮制御部30からの圧縮制御信号CCNTbに応じて圧縮されたデータCDTbを伸長する。これにより、圧縮部40により圧縮されて入力バスIBUSに転送されるデータCDTa、CDTbをそれぞれ元のデータDTa、DTbに対応するデータに戻すことができる。
【0051】
図3は、別の実施形態におけるアクセラレータの一例を示す。
図4は、
図3の一点鎖線枠に含まれる要素の一例を示す。
図3に示すアクセラレータ100Aは、DMAC(Direct Memory Access Controller)を介してメモリMEMから転送されるデータを使用して行列演算を実行し、実行結果をDMACを介してメモリMEMに転送する機能を有する。アクセラレータ100Aは、演算処理装置の一例である。アクセラレータ100Aが搭載される情報処理装置の例は、
図7に示される。
【0052】
アクセラレータ100Aは、複数の行列演算ユニットMOUと、データを保持するスクラッチパッドメモリSPMと、スクラッチパッドメモリSPMと行列演算ユニットMOUとを接続するバスA、B、Ci、Coとを有する。各バスA、B、Ci、Coは、複数の行列演算ユニットMOUに共通に接続される。
【0053】
アクセラレータ100Aは、各バスA、Ciに対応して設けられるデータ型判定部DTYP、圧縮部CMP、バス制御部BCNTおよび伸長部DCMPと、各バスBに対応して設けられるバス制御部BCNTとを有する。また、アクセラレータ100Aは、各行列演算ユニットMOUに対応して設けられる制御部CNTを有する。
【0054】
データ型判定部DTYPおよびバス制御部BCNTは、圧縮判断部の一例である。バス制御部BCNT(A)は、圧縮制御部の一例である。以下では、同じ名称の要素を識別可能にするために、各要素の名称の末尾に括弧付きの数字が付され、または、各要素の名称の末尾に括弧付きのバス名と数字が付される。
【0055】
例えば、アクセラレータ100Aは、列方向Xに4個と行方向Yに4個とがそれぞれ配置された16個の行列演算ユニットMOUを有する。例えば、行列演算ユニットMOUの数は、2のn乗個(nは2以上の整数)であれば、16個に限定されない。なお、行列演算ユニットMOUの数は、2のn乗個に限定されない。列方向Xと行方向Yに並ぶ行列演算ユニットMOUの数は、互いに等しいことが好ましい。各行列演算ユニットMOUは、列方向Xに32個が配置され行方向Yに32個が配置された1024個の図示しないプロセッシングエレメントPEを有する。プロセッシングエレメントPEの例は、
図5に示される。
【0056】
データ型判定部DTYP(A)、スクラッチパッドメモリSPM(A)、バス制御部BCNT(A)、圧縮部CMP(A)およびバスAは、データ供給部の一例である。データ型判定部DTYP(C)、スクラッチパッドメモリSPM(C)、バス制御部BCNT(C)、圧縮部CMP(C)およびバスCiは、データ供給部の一例である。この実施形態では、データ供給部毎に、スクラッチパッドメモリSPMに保持されているデータの圧縮の可否を判定し、判定結果に基づいて圧縮されたデータを対応する行列演算ユニットMOUに転送することができる。
【0057】
各バスA、B、Ci、Coには、列方向Xの位置または行方向Yの位置を識別する0から3のいずれかが付されている。データ型判定部DTYP、スクラッチパッドメモリSPM、圧縮部CMPおよびバス制御部BCNTには、接続されるバスA、B、Ciのいずれかと、列方向Xの位置または行方向Yの位置を識別する0から3のいずれかとを組み合わせた符号が付されている。行列演算ユニットMOU、伸長部DCMPおよび制御部CNTには、接続されるバスA、B、Ciのいずれかと、行方向Yの位置を識別する0から3のいずれかと、列方向Xの位置を識別する0から3のいずれかとを組み合わせた符号が付されている。
【0058】
特に限定されないが、各バスA、B、Ci、Coは、256B(バイト)の幅を有し、例えば、32個の64ビットの浮動小数点数データ(FP64)を同時に転送可能である。各バスA、Ciのバス幅は、各バスA、Ciに対応する4個の行列演算ユニットMOUに同時にFP64を転送可能なバス幅(1024B)より小さい。各行列演算ユニットMOUは、行方向Yに並ぶ32個のプロセッシングエレメントPEの各々でFP64の積和演算を実行可能である。
【0059】
このため、バスAに接続された列方向Xに並ぶ4個の行列演算ユニットMOUの全てを使用して別々のデータの行列演算を実行する場合には、列方向Xに並ぶ各行列演算ユニットMOUは、4サイクルに1回しかデータを受信することができない。同様に、バスCiに接続され、行方向Yに並ぶ4個の行列演算ユニットMOUの全てを使用して別々のデータの行列演算を実行する場合には、各行列演算ユニットMOUは、4サイクルに1回しかデータを受信することができない。但し、同一のデータであれば、4個の行列演算ユニットMOUの全てを使用して行列演算を同時に実行可能である。
【0060】
そこで、この実施形態では、圧縮部CMPは、FP64を32ビットの浮動小数点数データ(FP32)、16ビットの浮動小数点数データ(FP16またはbflort(brain floating point format)16)に圧縮し、バスA(またはバスCi)にデータを出力する。伸長部DCMPは、圧縮されたデータを受信した場合、FP64に伸長した後、行列演算ユニットMOUに出力する。以下では、16ビットの浮動小数点数データFP16は、FP16とも称され、bflort16は、BF16とも称される。
【0061】
例えば、圧縮部CMPによりFP64をFP16またはBF16に圧縮することで、32個のFP64に相当するデータをバスA(またはバスCi)を介して各行列演算ユニットMOUに一度に転送することができる。また、例えば、列方向Xに並ぶ4個の行列演算ユニットMOUのうちの2個が行列演算を並列に実行するとする。この場合、圧縮部CMPによりFP64をFP32に圧縮することで、32個のFP64に相当するデータをバスAを介して2個の行列演算ユニットMOUに一度に転送することができる。
【0062】
さらに、例えば、列方向Xに並ぶ4個の行列演算ユニットMOUのうちの3個が行列演算を並列に実行するとする。この場合、圧縮部CMPによりFP64をFP32と2個のFP16またはBF16に圧縮することで、32個のFP64に相当するデータをバスAを介して3個の行列演算ユニットMOUに一度に転送することができる。
【0063】
データ型判定部DTYP(A)(例えば、(A0)-(A3))は、DMACから受信する32個のFP64の指数部の値に基づいて、FP32、FP16、BF16のうちの圧縮可能なデータ型を判定する。データ型判定部DTYP(A)は、圧縮可能と判定した型を示す圧縮可否フラグFLG0をDMACから受信した32個のFP64とともにスクラッチパッドメモリSPM(A)(例えば、(A0)-(A3))に格納する。なお、データ型判定部DTYP(A)は、最大で4組の32個のFP64をDMACから受信可能であり、各組毎に圧縮可否フラグFLG0を生成する。
【0064】
データ型判定部DTYP(C)(例えば、(C0)-(C3))は、DMACまたは行列演算ユニットMOUから受信する最大で32個のFP64の指数部の値に基づいて、FP32、FP16、BF16のうちの圧縮可能な型を判定する。データ型判定部DTYP(C)は、圧縮可能と判定した型を示す圧縮可否フラグFLG0をDMACまたは行列演算ユニットMOUから受信した最大で32個のFP64とともにスクラッチパッドメモリSPM(C)(例えば、(C0)-(C3))に格納する。なお、データ型判定部DTYP(C)は、最大で4組の32個のFP64をDMACから受信可能であり、各組毎に圧縮可否フラグFLG0を生成する。データ型判定部DTYPの動作の例は、
図8に示される。データ型判定部DTYP(A)、DTYP(C)がDMACから受信するFP64は、第1データの一例である。
【0065】
スクラッチパッドメモリSPM(A)((A0)-(A3)のいずれか)は、バス制御部BCNT(A)((A0)-(A3)のいずれか)からのアクセス要求(アドレスAD)で示されるFP64を圧縮部CMP(A)((A0)-(A3)のいずれか)に出力する。
【0066】
スクラッチパッドメモリSPM(C)((C0)-(C3)のいずれか)は、バス制御部BCNT(C)((C0)-(C3)のいずれか)からのアクセス要求(アドレスAD)で示されるFP64を圧縮部CMP(C)((C0)-(C3)のいずれか)に出力する。
【0067】
スクラッチパッドメモリSPM(B)((B0)-(B3)のいずれか)は、バス制御部BCNT(B)((B0)-(B3)のいずれか)からのアクセス要求(アドレスAD)で示されるFP64を圧縮部CMP(B)((B0)-(B3)のいずれか)に出力する。
【0068】
圧縮部CMP(A)((A0)-(A3))は、スクラッチパッドメモリSPM(A)((A0)-(A3))から出力されるFP64を、バス制御部BCNT(A)((A0)-(A3))からの圧縮制御信号CCNT(CCNT0-CCNT3)に基づいて圧縮または非圧縮する。圧縮制御信号CCNT0-CCNT3は、圧縮情報の一例である。圧縮部CMP(A)は、圧縮または非圧縮したデータをバスA((A0)-(A3))に転送する。
【0069】
圧縮部CMP(C)((C0)-(C3))は、スクラッチパッドメモリSPM(C)((C0)-(C3))から出力されるFP64を、バス制御部BCNT(C)((C0)-(C3))からの圧縮制御信号CCNT(CCNT0-CCNT3)に基づいて圧縮または非圧縮する。圧縮部CMP(C)は、圧縮または非圧縮したデータをバスCi((Ci0)-(Ci3))に転送する。なお、バス制御部BCNT(C)が出力する圧縮制御信号CCNTは、バス制御部BCNT(A)が出力する圧縮制御信号CCNTとは異なる。圧縮部CMP(A)、CMP(C)により圧縮されたデータは、第2データの一例である。
【0070】
バス制御部BCNT(A)は、調停部ARB(A)((A0)-(A3))を有する。調停部ARB(A)は、対応するスクラッチパッドメモリSPM(A)からの圧縮可否フラグFLG0と、調停部ARB(A)の列方向Xに位置する4個の制御部CNTからの圧縮許可フラグFLG1とを受信する。なお、圧縮許可フラグFLG1は、リクエストREQ(A)に含まれてもよい。リクエストREQ(A)、REQ(B)、REQ(C)は、データ転送要求の一例である。バス制御部BCNT(A)の動作の例は、
図10および
図11で説明される。
【0071】
調停部ARB(A)は、列方向Xに位置する4個の制御部CNTのうちの1個のみからリクエストREQ(A)(例えば、A00、A01、A02、A03のいずれか)を受信した場合、FP64を圧縮せずにバスAに出力することを決定する。調停部ARB(A)は、4個の制御部CNTのうちの複数からリクエストREQ(A)を受信した場合、各リクエストREQ(A)が要求するFP64を圧縮して一度にバスAに出力するか、FP64を行列演算ユニットMOU毎にバスAに出力するかを判定する。この際、調停部ARB(A)は、圧縮可否フラグFLG0および圧縮許可フラグFLG1に基づいて、圧縮仕様を決定する。
【0072】
調停部ARB(A)は、FP64を行列演算ユニットMOU毎にバスAに出力する場合、バスAへの出力順を決定する。調停部ARB(A)は、調停の決定に基づいて、データの圧縮仕様を示す圧縮制御信号CCNT0-CCNT3を、圧縮部CMP(A)に出力する。圧縮制御信号CCNT0-CCNT3は、バス制御部BCNT(A)毎に生成される。例えば、圧縮制御信号CCNT0-CCNT3は、4個の制御部CNTからの4個のリクエストREQ(例えば、REQ(A00)、REQ(A01)、REQ(A02)、REQ(A03))にそれぞれ対応して生成される。
【0073】
バス制御部BCNT(C)は、調停部ARB(C)((C0)-(C3))を有する。調停部ARB(C)は、対応するスクラッチパッドメモリSPM(C)からの圧縮可否フラグFLG0と、調停部ARB(C)の行方向Yに位置する4個の制御部CNTからの圧縮許可フラグFLG1とを受信する。なお、圧縮許可フラグFLG1は、リクエストREQ(C)に含まれてもよい。バス制御部BCNT(C)の機能および動作は、バス制御部BCNT(A)の機能および動作と同様である。バス制御部BCNT(C)の動作の例は、
図10および
図11で説明される。
【0074】
圧縮許可フラグFLG1は、複数のデータ型のうち、使用可能なデータ型を3ビットで示す。例えば、FP64のみを使用可能な場合、圧縮許可フラグFLG1は、"000"に設定される。FP32を使用可能(圧縮可能)な場合、圧縮許可フラグFLG1は、"1**"に設定される。ここで符号"*"は、値が"0"、"1"のいずれでもよいことを示す。BF16を使用可能(圧縮可能)な場合、圧縮許可フラグFLG1は、"*1*"に設定される。FP16を使用可能(圧縮可能)な場合、圧縮許可フラグFLG1は、"**1"に設定される。
【0075】
なお、
図5で説明するように、バスBを介した行列演算ユニットMOUへのデータb(FP64)は、行列演算を開始する前に行列演算ユニットMOUに予め転送される。このため、バスBに転送されるFP64は、圧縮されない。但し、FP64を圧縮してバスBに転送する場合、バス制御部BCNT(C)および圧縮部CMP(C)と同様に、バス制御部BCNT(B)に図示しない調停部ARB(B)が設けられ、バスBに対応して図示しない圧縮部CMP(B)が設けられてもよい。
【0076】
各行列演算ユニットMOUに対応して設けられる制御部CNT(例えば、(00))は、対応する伸長部DCMP(A)、DCMP(C)、FIFO(First-In First-Out)(A)、(C)および行列演算ユニットMOUの動作を制御する。
【0077】
伸長部DCMP(A)は、対応するバスAを介して転送されるデータを、対応する圧縮制御信号CCNTに基づいて伸長して32個のFP64を生成する。伸長部DCMP(A)は生成したFP64をFIFO(A)に格納する。
【0078】
伸長部DCMP(C)は、対応するバスCiを介して転送されるデータを、対応する圧縮制御信号CCNTに基づいて伸長して32個のFP64を生成する。伸長部DCMP(C)は生成したFP64をFIFO(C)に格納する。
【0079】
FIFO(A)は、対応する伸長部DCMP(A)から出力される32個のFP64を順次保持する。FIFO(A)は、対応する制御部CNTからの指示に基づいて、先に保持した32個のFP64から順に行列演算ユニットMOUに出力する。
【0080】
各制御部CNTは、対応する伸長部DCMP(A)、DCMP(C)、FIFO(A)、FIFO(C)および行列演算ユニットMOUの動作を制御する。各制御部CNTは、アクセラレータ100Aの外部から受信するコマンドCMDを保持するコマンドバッファCMDBを有する。
【0081】
各制御部CNTは、コマンドバッファCMDBに保持したコマンドCMDに基づいて、リクエストREQ(データ転送要求)を生成し、生成したリクエストREQを対応するバス制御部BCNTに出力する。各制御部CNTは、リクエストREQに応答してバスを介して転送されるデータの行列演算を行列演算ユニットMOUに実行させるために、伸長部DCMP(A)、DCMP(C)、FIFO(A)、FIFO(C)および行列演算ユニットMOUに制御信号を出力する。
【0082】
各行列演算ユニットMOUは、対応するFIFO(A)、(C)にそれぞれ保持されたFP64と、対応するバスBを介して転送されるFP64を使用して行列演算を実行する。行列演算ユニットMOUは、実行結果をバスCo(Co0-Co3のいずれか)を介して、対応する型判定部DTYP(C)に出力する。行列演算ユニットMOUの例は、
図5に示される。
【0083】
図5は、
図3の行列演算ユニットMOUの一例を示す。
図5では、説明の簡単化のため、スクラッチパッドメモリSPM(A)、SPM(B)、SPM(C)と行列演算ユニットMOUとの間に配置される圧縮部CMPおよび伸長部DCMP等の要素は省略される。実際には、バスA、Cをそれぞれ介して転送される圧縮されたデータは、伸長された後に行列演算ユニットMOUに供給される。
【0084】
行列演算ユニットMOUは、列方向Xに32個と行方向Yに32個とがそれぞれ配置された1024個のプロセッシングエレメントPEを有する。互いに隣接するプロセッシングエレメントPE間は、レジスタまたはFIFOを介して接続される。そして、行列演算ユニットMOUにより、演算結果を外部のレジスタ等に格納することなく、順次使用することで内積等の行列演算を連続して実行可能なシストリックアレイが構築される。以下では、行列演算ユニットMOUは、シストリックアレイとも称される。
【0085】
なお、行列演算ユニットMOUは、バスAを介してスクラッチパッドメモリSPM(A)から256Bのデータaを受信し、バスBを介してスクラッチパッドメモリSPM(B)から256Bのデータbを受信する。また、行列演算ユニットMOUは、バスCiを介してスクラッチパッドメモリSPM(C)から256Bのデータcを受信し、バスCoを介してスクラッチパッドメモリSPM(C)に256Bのデータcを送信する。
【0086】
各プロセッシングエレメントPEは、データb(1個のFP64)を保持する少なくとも1個のレジスタREGと、乗算器MULと、加算器ADDとを有する。乗算器MULは、データa(1個のFP64)とレジスタREGに保持されたデータbとを乗算し、乗算結果を加算器ADDに出力する。加算器ADDは、乗算結果とデータc(1個のFP64)とを加算し、部分和として行方向Yの下流側のプロセッシングエレメントPEに出力する。
【0087】
データaは、レジスタまたはFIFOを介して列方向Xの下流側のプロセッシングエレメントPEに順次転送される。データbは、レジスタまたはFIFOを介して行方向Yの下流側のプロセッシングエレメントPEに予め順次転送される。
【0088】
図6は、
図5の行列演算ユニットMOUによる演算の一例を示す。
図6では、説明の簡単化のため、プロセッシングエレメントPEが列方向Xと行方向Yとにそれぞれ2個ずつ配置される例が示される。また、データbは、各プロセッシングエレメントPEのレジスタREGに予め格納されている。
【0089】
プロセッシングエレメントPE00は、列方向Xおよび行方向Yの最も上流側に配置される。プロセッシングエレメントPE01は、列方向Xの下流側に配置される。プロセッシングエレメントPE10は、行方向Yの下流側に配置される。プロセッシングエレメントPE11は、列方向Xおよび行方向Yの最も下流側に配置される。太枠で示すプロセッシングエレメントPEは、該当のサイクルCYCで有効な行列演算を実行することを示す。
【0090】
サイクルCYC=0において、プロセッシングエレメントPE00は、行列a[0][0]とレジスタREGに保持された行列b[0][0]との積を行列c[0][0]に加算し、演算結果(a[0][0]*b[0][0]+c[0][0])を出力する。式中の符号*は、乗算を示す。演算結果は、プロセッシングエレメントPE10に転送される。
【0091】
サイクルCYC=1において、プロセッシングエレメントPE00は、行列a[1][0]とレジスタREGに保持された行列b[0][0]との積を行列c[1][0]に加算し、演算結果(a[1][0]*b[0][0]+c[1][0])を出力する。演算結果は、部分和としてプロセッシングエレメントPE10に転送される。
【0092】
サイクルCYC=1において、プロセッシングエレメントPE01は、行列a[0][0]とレジスタREGに保持された行列b[0][1]との積を行列c[0][1]に加算し、演算結果(a[0][0]*b[0][1]+c[0][1])を出力する。演算結果は、部分和としてプロセッシングエレメントPE11に転送される。
【0093】
サイクルCYC=1において、プロセッシングエレメントPE10は、行列a[0][1]とレジスタREGに保持された行列b[1][0]との積と、サイクルCYC=0での部分和である行列(a[0][0]*b[0][0]+c[0][0])とを加算する。プロセッシングエレメントPE10は、加算結果を行方向Yの下流側のプロセッシングエレメントPE(この例では、図示しないPE20)に出力する。
【0094】
図7は、
図3のアクセラレータ100Aが搭載される情報処理装置200の一例を示す。情報処理装置200は、例えば、ニューラルネットワークを用いた画像処理等の学習または推論に使用され、あるいは、学習および推論の両方に使用される。なお、
図1のアクセラレータ100が情報処理装置200に搭載されてもよい。
【0095】
例えば、情報処理装置200は、サーバであり、バスBUSで相互に接続されたCPU210、アクセラレータ100A、メモリ220、補助記憶装置230、通信インタフェース240および入出力インタフェース250を有する。なお、情報処理装置200は、図示した以外の要素を含んでもよい。
【0096】
CPU210は、情報処理装置200の全体を制御するとともに、アクセラレータ100Aに行列演算を実行させるコマンド列を送信し、アクセラレータ100Aからの行列演算の終了報告の通知を待つ。アクセラレータ100Aは、CPU210から受信するコマンド列が終了するまでコマンド列に含まれるコマンドを順次実行し、メモリ220からのデータのロード、行列演算の実行、および、演算結果のメモリ220へのストアを行う。
【0097】
メモリ220は、行列演算の対象データ、行列演算の実行結果、および各種プログラム等を保持する。なお、
図3に示すメモリMEMは、メモリ220でもよい。補助記憶装置230は、CPU210が実行するOS(Operating System)および情報処理装置200を動作させる情報処理プログラム等の各種プログラムを保持する。
【0098】
補助記憶装置230は、ニューラルネットワークの計算で使用するデータと重み等の各種変数等とを保持してもよい。例えば、補助記憶装置230が記憶するプログラムは、メモリ220に転送され、CPU210により実行されてもよい。また、補助記憶装置230が記憶するニューラルネットワークの計算で使用するデータと各種変数とは、ニューラルネットワークの学習時またはニューラルネットワークを使用した推論時に補助記憶装置230からメモリ220に転送されてもよい。
【0099】
通信インタフェース240は、例えば、ネットワークを介して他の情報処理装置等と通信する機能を有する。これにより、ニューラルネットワークの計算を複数の情報処理装置を使用して並列に実行することが可能になる。入出力インタフェース250は、情報処理装置200に接続される記録媒体300に対してデータまたはプログラム等を入出力する機能を有する。
【0100】
例えば、記録媒体300は、CD(Compact Disc:登録商標)、DVD(Digital Versatile Disc:登録商標)またはUSB(Universal Serial Bus)メモリ等である。記録媒体300に記録されたプログラムは、入出力インタフェース250を介して補助記憶装置230に転送された後、メモリ220上に展開され、CPU210により実行されてもよい。
【0101】
図8は、
図3の型判定部DTYPによる圧縮可否フラグFLG0の求め方の概要を示す。型判定部DTYP(A0)-DTYP(A3)の各々は、DMACから受信する32個のFP64の全ての指数部Eを抽出し、指数部Eの値の最大値EMAXおよび最小値EMINを求める。
【0102】
型判定部DTYP(C0)-DTYP(C3)の各々は、DMACから受信する32個のFP64の全ての指数部Eを抽出し、指数部Eの値の最大値EMAXおよび最小値EMINを求める。また、型判定部DTYP(C0)-DTYP(C3)の各々は、バスCo(Co0-Co3)を介して4個の行列演算ユニットMOUから受信する最大で32個のFP64の全ての指数部Eを抽出し、指数部Eの値の最大値EMAXおよび最小値EMINを求める。
【0103】
特に限定されないが、圧縮可否フラグFLG0は、2ビットを有する。"00"の圧縮可否フラグFLG0は、FP64のみを使用可能であることを示す(圧縮不可)。"10"の圧縮可否フラグFLG0は、FP64、FP32またはBF16を使用可能であることを示す。"11"の圧縮可否フラグFLG0は、全てのデータ型FP64、FP32、BF16、FP16を使用可能であることを示す。なお、圧縮可否フラグFLG0は、圧縮許可フラグFLG1と同様に3ビットを有してもよい。この場合、"000"の圧縮可否フラグFLG0は、FP64のみを使用可能であることを示す(圧縮不可)。"110"の圧縮可否フラグFLG0は、FP64、FP32またはBF16を使用可能であることを示す。"111"の圧縮可否フラグFLG0は、全てのデータ型FP64、FP32、BF16、FP16を使用可能であることを示す。
【0104】
各型判定部DTYPは、求めた最大値EMAXおよび最小値EMINに基づいて、FP64を圧縮可能な少なくとも1つの浮動小数点数データのデータ型を判定する。各型判定部DTYPは、判定した浮動小数点数データのデータ型を示す情報を含む圧縮可否フラグFLG0を32個のFP64に付加してスクラッチパッドメモリSPMに格納する。
【0105】
例えば、IEEE(Institute of Electrical and Electronics Engineers)754では、FP64は、1ビットの符号部と11ビットの指数部と52ビットの仮数部とを含む。FP64の指数部は、-1022から1023までを表現可能である。FP32は、1ビットの符号部と8ビットの指数部と23ビットの仮数部とを含む。FP32の指数部は、-126から127までを表現可能である。FP16は、1ビットの符号部と5ビットの指数部と10ビットの仮数部とを含む。FP16の指数部は、-14から15までを表現可能である。FP32の仮数部の16ビットを切り捨てた形式であるBF16は、1ビットの符号部と8ビットの指数部と7ビットの仮数部とを含む。BF16の指数部は、-126から127までを表現可能である。
【0106】
図9は、
図3の型判定部DTYPの動作の一例を示す。
図9は、アクセラレータ100Aの制御方法の一例を示す。
図9では、圧縮可否フラグFLG0は、2ビットに設定されるとする。型判定部DTYP(A)は、DMACから32個のFP64を受信する毎に
図8に示す動作を実行する。型判定部DTYP(C)は、DMACから32個のFP64を受信する毎、または、行列演算ユニットMOUから最大で32個のFP64を受信する毎に
図8に示す動作を実行する。
【0107】
まず、ステップS11において、型判定部DTYPは、受信した最大で32個のFP64の指数部Eの最大値EMAXを求める。次に、ステップS12において、型判定部DTYPは、受信した最大で32個のFP64の指数部Eの最小値EMINを求める。FP64の指数部Eは、11ビットにより-1022から1023を表現可能である。
【0108】
次に、ステップS13において型判定部DTYPは、最大値EMAXが127より大きいか、または、最小値EMINが-126より小さいかを判定する。最大値EMAXが127より大きい場合、または、最小値EMINが-126より小さい場合、FP64からFP32、FP16またはBF16への圧縮によりデータが表現できる範囲を超過し、元の値とかけ離れた値となるおそれがある。このため、型判定部DTYPは、ステップS15を実行する。最大値EMAXと最小値EMINとが-126から127の間に含まれる場合、FP64をFP32、FP16またはBF16のいずれに圧縮可能であるかを判定するため、型判定部DTYPは、ステップS14を実行する。
【0109】
ステップS14において型判定部DTYPは、最大値EMAXが15より大きいか、または、最小値EMINが-14より小さいかを判定する。最大値EMAXが15より大きい場合、または、最小値EMINが-14より小さい場合、FP64からFP16の圧縮によりデータが失われるおそれがある。このため、型判定部DTYPは、ステップS16を実行する。最大値EMAXと最小値EMINとが-14から15の間に含まれる場合、FP64をFP32、BF16またはFP16のいずれにも圧縮可能であるため、型判定部DTYPは、ステップS17を実行する。
【0110】
ステップS15において、型判定部DTYPは、32個のFP64に圧縮可否フラグFLG0="00"を付加し、スクラッチパッドメモリSPMに格納し、
図8の動作を終了する。
図8に示すように、圧縮可否フラグFLG0="00"は、FP64のみが使用可能であることを示す。
【0111】
ステップS16において、型判定部DTYPは、32個のFP64に圧縮可否フラグFLG0="10"を付加し、スクラッチパッドメモリSPMに格納し、
図8の動作を終了する。
図8に示すように、圧縮可否フラグFLG0="10"は、FP64、FP32またはBF16が使用可能であることを示す。
【0112】
ステップS17において、型判定部DTYPは、32個のFP64に圧縮可否フラグFLG0="11"を付加し、スクラッチパッドメモリSPMに格納し、
図8の動作を終了する。
図8に示すように、圧縮可否フラグFLG0="11"は、FP64、FP32、BF16またはFP16のいずれも使用可能であることを示す。
【0113】
図10は、
図4のバス制御部BCNTによる調停の概要を示す。
図10に示すデータの組み合わせは、例えば、組み合わせ表として、バス制御部BCNT内に保持されてもよい。
【0114】
バス制御部BCNTは、受信したリクエストREQの数が1個の場合、FP64を非圧縮でバス(例えば、バスA)に出力できるため、調停部ARBによる調停を行わないことを判定する。これにより、FP64を精度を落とすことなくスクラッチパッドメモリSPMから行列演算ユニットMOUに転送することができ、行列演算ユニットMOUによる行列演算の精度が低下することを抑止することができる。
【0115】
バス制御部BCNTは、受信したリクエストREQの数が2個から4個のいずれかの場合、データをバスに一度に出力するためにはFP64の圧縮が必要なため、調停部ARBによる調停を行うことを判定する。
【0116】
バス制御部BCNTは、受信したリクエストREQの数が2個の場合、調停部ARBにFP64をFP32に圧縮する圧縮制御信号CCNT0-CCNT3を生成させる。そして、2個のリクエストREQに対応して圧縮部CMPで圧縮された64個のFP32がバスA(または、バスCi)に出力される。
【0117】
バス制御部BCNTは、受信したリクエストREQの数が3個の場合、リクエストREQの1個のFP64をFP32に圧縮し、リクエストREQの残りの2個のFP64をFP16またはBF16に圧縮することを判定する。バス制御部BCNTは、判定した圧縮仕様に基づいて調停部ARBに圧縮制御信号CCNT0-CCNT3を生成させる。そして、3個のリクエストREQに対応して圧縮部CMPで圧縮された32個のFP32と64個のFP16(またはBF16)がバスA(または、バスCi)に出力される。
【0118】
バス制御部BCNTは、受信したリクエストREQの数が4個の場合、4個のリクエストREQのFP64をそれぞれFP16またはBF16に圧縮することを判定する。バス制御部BCNTは、判定した圧縮仕様に基づいて調停部ARBに圧縮制御信号CCNT0-CCNT3を生成させる。これにより、4個のリクエストREQ毎に32個のFP16または32個のBF16がバスに出力される。
【0119】
なお、調停部ARBは、圧縮可否フラグFLG0および圧縮許可フラグFLG1により圧縮仕様が制限される場合、バス制御部BCNTの判定結果によらず、圧縮仕様を決定する。そして、調停部ARBは、例えば、リクエストREQ毎のFP64を別のサイクルでバスA(または、バスCi)に出力させる圧縮制御信号CCNT0-CCNT3を生成する。
【0120】
図11は、
図3のバス制御部BCNT(A)、BCNT(C)によるリクエストREQの調停動作の一例を示す。
図11は、アクセラレータ100Aの制御方法の一例を示す。
図11に示す動作は、各バス制御部BCNT(A)、BCNT(C)が4個の制御部CNTの少なくともいずれかからリクエストREQを受信したことに基づいて開始される。バス制御部BCNT(A)、BCNT(C)の動作は、互いに同様のため、以下では、バス制御部BCNT(A)の動作が説明される。
【0121】
まず、ステップS21において、バス制御部BCNT(A)は、受信したリクエストREQの各々に含まれる圧縮許可フラグFLG1と、スクラッチパッドメモリSPM(A)から受信した圧縮可否フラグFLG0とのアンド論理を求める。この際、バス制御部BNCT(A)は、圧縮可否フラグFLG0の2ビットのうちの上位ビットを上位側にコピーして拡張した3ビットの圧縮可否フラグFLG0を生成する。
【0122】
例えば、2ビットの圧縮可否フラグFLG0が"00"の場合、3ビットの圧縮可否フラグFLG0="000"が生成される。2ビットの圧縮可否フラグFLG0が"10"の場合、3ビットの圧縮可否フラグFLG0="110"が生成される。2ビットの圧縮可否フラグFLG0が"11"の場合、3ビットの圧縮可否フラグFLG0="111"が生成される。
【0123】
なお、
図8で説明したように、圧縮可否フラグFLG0が3ビットに設定されている場合、バス制御部BNCT(A)は、スクラッチパッドメモリSPM(A)から受信した圧縮可否フラグFLG0をそのまま使用する。バス制御部BCNT(A)は、求めたアンド論理の値(3ビットの仮の圧縮フラグ)から、圧縮可能な浮動小数点数データフォーマットを判定する。なお、圧縮可能な浮動小数点数データフォーマットは、圧縮しないFP64も含む。
【0124】
仮の圧縮フラグの仕様は、3ビットに拡張した圧縮可否フラグFLG0および圧縮許可フラグFLG1と同様である。すなわち、"000"は、FP64のみが使用可能であることを示し、"100"は、FP64またはFP32が使用可能であることを示す。"110"は、FP64、FP32またはBF16が使用可能であることを示す。"111"は、FP64、FP32、BF16またはFP16のいずれも使用可能であることを示す。
【0125】
次に、ステップS22において、バス制御部BCNT(A)は、受信した全てのリクエストREQの判定を完了した場合、ステップS23を実行し、判定していないリクエストREQがある場合、ステップS21の動作に戻る。
【0126】
ステップS23において、バス制御部BCNT(A)は、複数のリクエストREQを受信した場合、予め決められた優先順にしたがってリクエストREQをソートする。すなわち、バス制御部BCNT(A)は、リクエストREQのバスAへの出力順を決定する。
【0127】
次に、ステップS24において、バス制御部BCNT(A)は、受信した全てのリクエストREQにおいて、ステップS21で判定した圧縮可能な浮動小数点数データのデータ型の中に、
図10の浮動小数点数データのデータ型の組み合わせが存在するか否かを判定する。
【0128】
バス制御部BCNT(A)は、組み合わせ表に示す組み合わせが存在する場合、複数のリクエストREQに対応する複数組のデータを同時に転送可能なため、ステップS26を実行する。バス制御部BCNT(A)は、組み合わせ表に示す組み合わせが存在しない場合、複数のリクエストREQに対応する複数組のデータの少なくとも1組を同時に転送できないため、ステップS25を実行する。
【0129】
すなわち、バス制御部BCNT(A)は、組み合わせ表に示す組み合わせが存在しない場合、複数のリクエストREQに対応するデータを複数回に分けてバスAに転送することを判定する。そして、バス制御部BCNT(A)は、データを複数回に分けてバスAに転送するための圧縮制御信号CCNT0-CCNT3を調停部ARBに生成させる。
【0130】
ステップS25において、バス制御部BCNT(A)は、ステップS23でのソートに使用した優先順が最低のリクエストREQを再送することを判定し、判定したリクエストREQを出力対象のリクエストREQから外し、ステップS24の動作に戻る。出力対象のリクエストREQから外されたリクエストREQに対応するデータは、後続のサイクルでバスAに転送される。
【0131】
ステップS26において、バス制御部BCNT(A)は、存在する組み合わせに含まれるリクエストREQの優先順を更新する。次に、ステップS27において、バス制御部BCNT(調停部ARB)は、以上の判定結果に基づいて圧縮制御信号CCNT0-CCNT3を生成して圧縮部CMP(A)および伸長部DCMP(A)に出力し、
図11に示す動作を終了する。
【0132】
図11に示す動作フローにより、圧縮可否フラグFLG0および圧縮許可フラグFLG1により判定した圧縮可能なデータ型のデータを同時にバスAに転送できない場合にも、後続のサイクルを使用してデータを転送することができる。すなわち、バス制御部BCNT(A)は、同時に複数のリクエストREQを受信する場合にも、圧縮可能なデータ型に合わせて、1回または複数回でデータを各行列演算ユニットMOUに転送することができる。
【0133】
図12は、
図7の情報処理装置200の動作の一例を示す。なお、アクセラレータ100Aの代わりにアクセラレータ100が情報処理装置200に搭載される場合、アクセラレータ100Aの動作は、アクセラレータ100の動作として読み替えられてもよい。
【0134】
まず、ステップS210において、CPU210は、アクセラレータ100Aに行列演算を実行させるコマンド列を送信する。次に、ステップS220において、CPU210は、コマンド列の実行の終了通知をアクセラレータ100Aから受信するまで待ち、終了通知を受信した場合、
図12のコマンド列の送信処理を終了する。
【0135】
一方、ステップS110において、アクセラレータ100Aは、コマンド列の受信を待ち、コマンド列を受信した場合、ステップS120を実行する。ステップS120において、アクセラレータ100Aは、受信したコマンド列に含まれるコマンドを実行する。コマンドの例は、
図13で説明される。
【0136】
次に、ステップS130において、アクセラレータ100Aは、受信したコマンド列に含まれる全てのコマンドの実行が終了したか否かを判定する。アクセラレータ100Aは、全てのコマンドの実行が終了した場合、ステップS140を実行し、実行していないコマンドがある場合、ステップS120の動作に戻る。ステップS140において、アクセラレータ100Aは、CPU210にコマンド列の実行の終了通知を送信し、
図12のコマンドの実行処理を終了する。
【0137】
図13は、
図3の行列演算ユニットMOUの動作の一例を示す。
図13は、アクセラレータ100Aの制御方法の一例を示す。
図13に示す動作は、アクセラレータ100AがCPU210からコマンド列を受信したことに基づいて行列演算ユニットMOUにより開始される。例えば、
図13は、
図12のステップ120で実行されるコマンド処理の一例を示す。
図13では、アクセラレータ100Aが、データa、cのロードコマンド、データbのプリロードコマンド、行列演算の実行コマンドおよび演算結果のストアコマンドをコマンド列としてCPU210から受信した場合の動作の例が示される。
【0138】
まず、ステップS121において、行列演算ユニットMOUは、ロードコマンドに基づいて、DMACを起動し、メモリMEMからスクラッチパッドメモリSPM(A)、SPM(B)、SPM(C)のそれぞれにデータをロードする。次に、ステップS122において、行列演算ユニットMOUは、プリロードコマンドに基づいて、スクラッチパッドメモリSPM(B)からシストリックアレイにデータbをプリロードする。
【0139】
次に、ステップS123において、行列演算ユニットMOUは、スクラッチパッドメモリSPM(A)、SPM(C)からシストリックアレイにデータa、cを流し込み、行列演算を実行する。行列演算ユニットMOUは、行列演算結果をスクラッチパッドメモリSPM(C)に格納する。次に、ステップS124において、行列演算ユニットMOUは、DMACを起動し、スクラッチパッドメモリSPM(C)からメモリMEMに行列演算結果をストアし、
図13に示す動作を終了する。
【0140】
図14は、
図3の行列演算ユニットMOUを制御する制御部CNTの動作の一例を示す。
図14は、アクセラレータ100Aの制御方法の一例を示す。例えば、
図14は、
図13のステップS123に対応する動作を示す。
【0141】
まず、ステップS31において、制御部CNTは、バス制御部BCNT(A)、BCNT(C)にデータを要求するリクエストREQを送信する。次に、ステップS32において、制御部CNTは、リクエストREQに応答するデータを受信した場合、ステップS34を実行し、リクエストREQに応答するデータを受信しない場合、ステップS33を実行する。
【0142】
ステップS33において、制御部CNTは、シストリックアレイによる行列演算の実行をストールし、再度ステップS31を実行する。ステップS34において、制御部CNTは、データをシストリックアレイに流し込み、シストリックアレイに行列演算を実行させる。
【0143】
次に、ステップS35において、制御部CNTは、所定の回数のリクエストREQに対応する行列演算の実行を完了した場合、
図14に示す動作を終了する。制御部CNTは、所定の回数のリクエストREQに対応する行列演算の実行を完了していない場合、ステップS31の動作を再度実行する。
【0144】
以上、この実施形態においても、
図1および
図2に示す実施形態と同様の効果を得ることができる。例えば、データ型判定部DTYPによりFP64の圧縮が可能と判定されたことに基づいて、圧縮部CMPは、スクラッチパッドメモリSPMから出力されるFP64を圧縮し、バスA(またはバスCi)に同時に出力する。
【0145】
これにより、バスA(またはバスCi)を介してFP64を圧縮したデータを同じ転送サイクルで複数の行列演算ユニットMOUに転送することができ、行列演算ユニットMOUの稼動率を向上することができる。この結果、FP64を圧縮せずに異なる転送サイクルで転送する場合に比べて、アクセラレータ100Aの性能を向上することができる。
【0146】
バス制御部BCNT(調停部ARB)は、圧縮可否フラグFLG0および圧縮許可フラグFLG1に基づいて、リクエストREQ毎のFP64の圧縮の可否を判断する。これにより、行列演算ユニットMOUによる行列演算の要求精度に合わせて、FP64を圧縮または非圧縮することができる。
【0147】
型判定部DTYPは、1個のリクエストREQに対応する32個のFP64の指数部Eの最大値および最小値を求め、最大値および最小値を表現可能なデータ型を示す圧縮可否フラグFLG0を生成する。これにより、FP64をFP32、BF16、FP16のいずれに圧縮する場合にも、圧縮の前後において、32個の全てのデータDTの指数の値を同じにすることができ、行列演算ユニットMOUによる誤った行列演算の実行を抑止することができる。
【0148】
型判定部DTYPが生成した圧縮可否フラグFLG0は、対応する32個のFP64とともにスクラッチパッドメモリSPMに格納される。これにより、リクエストREQ(アドレスAD)に応じてスクラッチパッドメモリSPMから32個のFP64と圧縮可否フラグFLG0とを出力することができ、スクラッチパッドメモリSPMのアクセス頻度を低減して調停部ARBによる調停の判定を実施することができる。
【0149】
各行列演算ユニットMOUに対応して設けられる伸長部DCMPは、バス制御部BCNT(調停部ARB)がリクエストREQ毎に生成した圧縮制御信号CCNTを受ける。このため、各伸長部DCMPは、対応する圧縮部CMPにより圧縮されてバスを介して転送されるデータから元のFP64に対応するFP64を生成することができる。
【0150】
圧縮可否フラグFLG0および圧縮許可フラグFLG1により判定した圧縮可能なデータ型のデータを同時にバスAに転送できない場合にも、後続のサイクルを使用してデータを転送することができる。すなわち、各バス制御部BCNT(A)、BCNT(C)は、同時に複数のリクエストREQを受信する場合にも、圧縮可能なデータ型に合わせて、1回または複数回でデータを各行列演算ユニットMOUに転送することができる。
【0151】
受信したリクエストREQの数が1個の場合、FP64がそのままバスに転送されるため、FP64の精度を落とすことなくスクラッチパッドメモリSPMから行列演算ユニットMOUにFP64を転送することができる。このため、行列演算ユニットMOUによる行列演算の精度が低下することを抑止することができる。
【0152】
バスA、Ciにそれぞれ対応するデータ型判定部DTYP、スクラッチパッドメモリSPM、バス制御部BCNTおよび圧縮部CMPにより、データの圧縮の可否を判定し、判定結果に基づいて圧縮されたデータを対応する行列演算ユニットMOUに転送することができる。
【0153】
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
演算を実行する複数の演算ユニットと、
前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、
前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断する圧縮判断部と、
前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する圧縮部と、を有する
演算処理装置。
(付記2)
前記複数の演算ユニットの動作をそれぞれ制御し、データ転送要求と圧縮の許可を示す圧縮許可フラグとを出力する複数の演算制御部を有し、
前記圧縮判断部は、
前記第1データの圧縮の可否を示す圧縮可否フラグを生成する判定部と、
前記圧縮可否フラグと、前記複数の演算制御部からそれぞれ受信する複数の前記圧縮許可フラグとに基づいて、圧縮仕様を示す圧縮情報を生成する圧縮制御部と、を有し、
前記圧縮部は、前記圧縮情報に基づいて前記第1データを圧縮する
付記1に記載の演算処理装置。
(付記3)
前記第1データは、浮動小数点数データであり、
前記判定部は、前記データ転送要求によるアクセス単位である複数の浮動小数点数データの指数部の値の大きさに応じて、前記圧縮可否フラグを生成する
付記2に記載の演算処理装置。
(付記4)
前記判定部は、前記複数の浮動小数点数データの指数部の値の最大値および最小値を表現可能なデータ型を示す前記圧縮可否フラグを生成する
付記3に記載の演算処理装置。
(付記5)
前記圧縮制御部は、生成した前記圧縮情報により圧縮する場合の複数の演算ユニット用の複数の前記第2データのサイズが前記バスのバス幅より大きくなる場合、生成した前記圧縮情報にかかわらず、データを前記圧縮部から複数回に分けて前記バスに転送させる前記圧縮情報を生成する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記6)
前記圧縮制御部は、前記複数の演算制御部のいずれかから単一の前記データ転送要求を受信した場合、前記圧縮可否フラグおよび前記圧縮許可フラグにかかわらず、非圧縮を示す前記圧縮情報を生成する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記7)
前記第1データを保持するメモリを有し、
前記判定部は、前記メモリに格納される前記第1データ毎に前記圧縮可否フラグを生成し、生成した前記圧縮可否フラグを前記第1データとともに前記メモリに格納し、
前記圧縮制御部は、前記データ転送要求とともに受信する前記圧縮許可フラグと、前記データ転送要求に応じて前記第1データとともに前記メモリから出力される前記圧縮可否フラグとに基づいて前記圧縮情報を生成する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記8)
前記複数の演算ユニットの各々に対応して設けられ、前記バスを介して受信する圧縮されたデータを前記圧縮情報に基づいて伸長する伸長部を有する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記9)
前記バス、前記圧縮判断部および前記圧縮部をそれぞれ含む複数のデータ供給部を有する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記10)
前記複数の演算ユニットの各々は、シストリックアレイを有する
付記2ないし付記4のいずれか1項に記載の演算処理装置。
(付記11)
演算を実行する複数の演算ユニットと、前記複数の演算ユニットに共通に設けられ、前記複数の演算ユニットにデータを同時に転送可能なバス幅より小さいバス幅を有するバスと、を有する演算処理装置の制御方法であって、
前記演算処理装置が有する圧縮判断部が、前記複数の演算ユニットにそれぞれ転送する第1データの指数部の値に基づいて前記第1データの圧縮の可否を判断し、
前記演算処理装置が有する圧縮部が、前記圧縮判断部が圧縮の可能を判定した場合、前記第1データを圧縮した第2データを前記バスに出力し、前記圧縮判断部が圧縮の不可能を判定した場合、前記第1データを前記バスに出力する
演算処理装置の制御方法。
【0154】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0155】
10 判定部
20 メモリ
30 圧縮制御部
40 圧縮部
50a、50b 伸長部
60a、60b 演算ユニット
70a、70b 演算制御部
100、100A アクセラレータ
200 情報処理装置
210 CPU
220 メモリ
230 補助記憶装置
240 通信インタフェース
250 入出力インタフェース
300 記録媒体
A バス
AD アドレス
ARB 調停部
B バス
BCNT バス制御部
C バス
CCNT 圧縮制御信号
CMP 圧縮部
CNT 制御部
Co バス
DCMP 伸長部
DTYP データ型判定部
FLG0 圧縮可否フラグ
FLG1 圧縮フラグ
MOU 行列演算ユニット
REQ リクエスト
SPM スクラッチパッドメモリ
X 列方向
Y 行方向