(57)【要約】【課題】演算処理全体の演算効率を向上させる情報処理装置、メモリ制御装置及び情報処理装置の制御方法を提供する。【解決手段】コア１０１は、演算処理を実行する。ＤＩＭＭ１６は、データを格納する。格納処理部１２１は、コア１０１から格納命令を受信した場合、格納命令で格納が指定された第１データに対して、データ長をより短くした桁落データを生成しＤＩＭＭ１６へ格納する。読出処理部１２２は、コア１０１から読出命令を受信した場合、読出命令で読み出しが指定された第２データに対応する桁落データをＤＩＭＭ１６から読み出し、読み出した桁落データを第２データのデータ長のフォーマットに戻してコア１０１へ出力する。【選択図】図２
2019045968.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を実行する演算処理部と、
データを格納する記憶部と、
前記演算処理部から格納命令を受信した場合、前記格納命令で格納が指定された第１データに対し、データ長をより短くした低精度データを生成し、前記記憶部へ格納する格納処理部と、
前記演算処理部から読出命令を受信した場合、前記読出命令で読み出しが指定された第２データに対応する前記低精度データを前記記憶部から読み出し、読み出した前記低精度データを前記第２データのデータ長のフォーマットに戻して前記演算処理部へ出力する読出処理部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記格納処理部は、前記第１データのデータ長が所定長未満の場合、前記第１データを前記記憶部へ格納し、前記第１データのデータ長が所定長以上の場合、前記低精度データを前記記憶部に格納することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記格納処理部は、前記第１データの精度を前記第１データのデータ長よりも短くする桁落処理を実行して桁落データを生成し、前記格納命令で指定された前記記憶部における前記第１データの格納領域の一部領域に生成した前記桁落データを格納し且つ残りの領域を未使用領域とし、
前記読出処理部は、前記読出命令を前記一部領域からデータを読み出す第１読出命令及び前記未使用領域からデータを読み出す第２読出命令に分割し、前記第１読出命令を基に読み出した読出データが前記桁落データの場合、前記第２読出命令を破棄する
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記格納処理部は、前記桁落データであることを表す識別情報を付加して前記桁落データを前記記憶部へ格納し、
前記読出処理部は、前記識別情報を基に前記第１読出命令を基に読み出した前記読出データが前記桁落データか否かを判定する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
格納命令を受信した場合、前記格納命令で格納が指定された第１データに対し、データ長をより短くした低精度データを生成し、メモリへ格納する格納処理部と、
読出命令を受信した場合、前記読出命令で読み出しが指定された第２データに対応する前記低精度データを前記メモリから読み出し、読み出した前記低精度データを前記第２データのデータ長のフォーマットに戻して出力する読出処理部と
を備えたことを特徴とするメモリ制御装置。
【請求項６】
演算処理を実行する演算処理装置と、データを格納するメモリとを有する情報処理装置の制御方法であって、
前記メモリへの格納命令を前記演算処理装置から受信した場合、前記格納命令で格納が指定された第１データに対し、データ長をより短くした低精度データを生成し、前記メモリへ格納し、
前記メモリからの読出命令を前記演算処理装置から受信した場合、前記読出命令で読み出しが指定された第２データに対応する前記低精度データを前記メモリから読み出し、読み出した前記低精度データを前記第２データのデータ長のフォーマットに戻して前記演算処理装置へ出力する
を備えたことを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、メモリ制御装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、データの特徴を学習して認識や分類を行う機械学習の手法であるディープラーニング（Deep  Leaning）が注目を集めている。ディープラーニングは、同様の演算を数多く行う特徴を有する。このため、ディープラーニングでは、ＣＰＵ（Central  Processing  Unit）よりも多くの演算器を内蔵するＧＰＵ（Graphics  Processing  Unit）が演算処理装置として利用される場合も多い。
【０００３】
だたし、ＣＰＵと同様に、ＧＰＵであってもコアのスピードに対してＩ（Input）／Ｏ（Output）の処理スピードが遅く、情報処理装置の全体的な処理が遅延する場合がある。そこで、Ｉ／Ｏ処理の遅延による情報処理装置の処理能力の低下に対する技術として、キャッシュメモリを用いる方法がある。ＧＰＵの中には、キャッシュメモリを内蔵することでＩ／Ｏ処理による遅延を改善させたＧＰＵも存在する。
【０００４】
ここで、Ｉ／Ｏ処理の速度を改善する技術として、ＣＰＵとメモリコントローラ間のバス帯域に比べメモリコントローラとメモリ間のバス帯域が小さい場合、メモリコントローラとメモリ間のスループットを向上させる従来技術がある。この従来技術では、格納領域として圧縮前のデータ容量分の領域を確保した上で、実際には圧縮されたデータを確保した格納領域に格納し、残りの領域を未使用の状態としておくことで、メモリコントローラとメモリ間のスループットを向上させている。また、処理装置で使用される形式のデータをメモリに書き込む際に、浮動小数点データを固定小数点データに変換し、読み出し時に固定小数点データを浮動小数点データに変換する従来技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−４７９５号公報
【特許文献２】特開２００４−２３５２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、キャッシュメモリを用いるなどの技術を用いても、メモリアクセスがボトルネックとなり、情報処理装置の全体的な処理が遅延する場合が存在する。特に、ディープラーニングでは、メモリアクセスの頻度が高く、メモリアクセスの処理による遅延により、ディープラーニングなどの演算処理全体のスループットが大きく低下するおそれがある。
【０００７】
また、確保した格納領域に圧縮したデータを格納し、残りの格納領域を未使用とする従来技術を用いた場合、ＣＰＵとメモリコントローラ間においてデータの圧縮及び伸張処理が行われる。データの圧縮及び伸張処理を高スループットで行うことは困難であり、ディープラーニングで膨大な数のサンプルを学習させる場合には、データの圧縮及び伸張処理による遅延が発生するため、演算処理全体のスループットを向上させ、演算効率を向上させることは困難である。
【０００８】
また、浮動小数点データと固定小数点データとの変換を行う従来技術を用いた場合、データの変換のためにメモリ上の特定のアドレスに対するアクセスが発生する。このため、ディープラーニングで用いる膨大なデータを変換する場合、特定のアドレスにアクセスして変換した後に任意の場所にデータを移動する処理が多数発生し、演算処理全体のスループットを向上させ、演算効率を向上させることは困難である。
【０００９】
開示の技術は、上記に鑑みてなされたものであって、演算処理全体の演算効率を向上させる情報処理装置、メモリ制御装置及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法の一つの態様において、演算処理部は、演算処理を実行する。記憶部は、データを格納する。格納処理部は、前記演算処理部から格納命令を受信した場合、前記格納命令で格納が指定された第１データに対し、データ長をより短くした低精度データを生成し、前記記憶部へ格納する。読出処理部は、前記演算処理部から読出命令を受信した場合、前記読出命令で読み出しが指定された第２データに対応する前記低精度データを前記記憶部から読み出し、読み出した前記桁落データを前記第２データのデータ長のフォーマットに戻して前記演算処理部へ出力する。
【発明の効果】
【００１１】
１つの側面では、本発明は、演算処理全体の演算効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、サーバのハードウェア構成の一例を表す図である。
【図２】図２は、ＧＰＵのブロック図である。
【図３】図３は、格納処理部のブロック図である。
【図４】図４は、データヘッダ生成部の構成の一例を表す図である。
【図５】図５は、桁落データのＤＩＭＭへの格納状態を説明する図である。
【図６】図６は、読出処理部のブロック図である。
【図７】図７は、命令分割部の構成の一例を表す図である。
【図８】図８は、ヘッダ判定部の構成の一例を表す図である。
【図９】図９は、桁落処理及び桁戻処理における信号の状態を表す図である。
【図１０】図１０は、実施例１に係るメモリアクセスコントローラによるデータの格納処理及び読出処理のフローチャートである。
【図１１】図１１は、実施例１に係る格納処理部によるデータの格納処理のフローチャートである。
【図１２】図１２は、実施例１に係る読出処理部によるデータの読出処理のフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、メモリ制御装置及び情報処理装置の制御方法が限定されるものではない。
【実施例１】
【００１４】
図１は、サーバのハードウェア構成の一例を表す図である。情報処理装置であるサーバ１は、ＣＰＵ１１、ＨＤＤ（Hard  Disk  Drive）１２及び記憶装置であるＤＩＭＭ（Dual  Inline  Memory  Module）１３を有する。さらに、サーバ１は、ＰＣＩ（Peripheral  Component  Interconnect）ｅｘｐｒｅｓｓスイッチ１４、ＧＰＵ１５及びＤＩＭＭ１６を有する。
【００１５】
ＣＰＵ１１は、バスを介してＨＤＤ１２、ＤＩＭＭ１３及びＰＣＩｅｘｐｒｅｓｓスイッチ１４と接続される。ＨＤＤ１２は、補助記憶装置であり、各種プログラムを格納する。ＤＩＭＭ１３は、主記憶装置である。ＣＰＵ１１は、ＨＤＤ１２に格納されたプログラムを読み出してＤＩＭＭ１３上にプロセスとして展開し実行することで演算処理を行う。さらに、ＣＰＵ１１は、ＰＣＩｅｘｐｒｅｓｓスイッチ１４を介してＧＰＵ１５と通信を行う。
【００１６】
ＰＣＩｅｘｐｒｅｓｓスイッチ１４は、ＣＰＵ１１とＧＰＵ１５とをＰＣＩｅｘｐｒｅｓｓに準拠したバスで接続する。そして、ＰＣＩｅｘｐｒｅｓｓスイッチ１４は、ＣＰＵ１１とＧＰＵ１５との間の通信を中継する。
【００１７】
ＧＰＵ１５は、ＰＣＩｅｘｐｒｅｓｓスイッチ１４を介してＣＰＵ１１と通信を行う。また、ＧＰＵ１５は、ＤＩＭＭ１６と接続される。本実施例では、ＧＰＵ１５が、ＤＩＭＭ１６を用いてディープラーニングを実行する。
【００１８】
図２は、ＧＰＵのブロック図である。ＧＰＵ１５は、図２に示すように、コア１０１及びメモリアクセスコントローラ１０２を有する。
【００１９】
コア１０１は、実際の演算処理を行う演算処理器である。図２では、ＧＰＵ１５は、コア１０１を１つ有する場合を記載したが、これに限らずＧＰＵ１５は、コア１０１を複数有してもよい。
【００２０】
コア１０１は、ディープラーニングの演算処理の最中にＤＩＭＭ１６に対するデータの格納及び読み出しを行う。データの格納は、データのストア（Ｓｔｏｒｅ）ともよばれる。また、データの読み出しは、データのロード（Ｌｏａｄ）とも呼ばれる。
【００２１】
コア１０１は、ＤＩＭＭ１６に対してデータを格納する場合、メモリアクセスコントローラ１０２の格納処理部１２１にデータの格納先の先頭アドレス及びデータ長を含むデータの格納命令を出力する。また、コア１０１は、データの格納命令を出力する際に、格納するデータに対して桁落処理を実行するか否かを表す桁落フラグ信号を格納処理部１２１へ出力する。その後、コア１０１は、データの格納命令に対する応答である格納応答の入力を格納処理部１２１から受ける。
【００２２】
また、コア１０１は、ＤＩＭＭ１６からデータを読み出す場合、メモリアクセスコントローラ１０２の読出処理部１２２に読み出すデータの先頭アドレス及びデータ長を含むデータの読出命令を出力する。その後、コア１０１は、データの格納命令に対する応答である読出応答及び読み出したデータの入力を読出処理部１２２から受ける。このコア１０１が、「演算処理部」及び「演算処理装置」の一例である。
【００２３】
メモリアクセスコントローラ１０２は、格納処理部１２１及び読出処理部１２２を有する。このメモリアクセスコントローラ１０２が、メモリ制御装置の一例である。
【００２４】
格納処理部１２１は、データの格納命令の入力をコア１０１から受ける。そして、格納処理部１２１は、コア１０１からデータに対する桁落処理の実行を指示する桁落フラグ信号を受信した場合、格納命令で指定されたデータに対して桁落処理を施し桁落データを生成する。ここで、桁落処理とは、データの精度を落とす処理である。その後、格納処理部１２１は、ＤＩＭＭ１６の格納命令に含まれる先頭アドレス及びデータ長で指定された領域に桁落データを格納させ残りの領域を未使用にさせる。この格納命令で指定されたデータが「第１データ」の一例にあたる。また、この桁落処理が「精度低下処理」の一例にあたり、桁落データが「低精度データ」の一例にあたる。そして、格納命令に含まれる先頭アドレス及びデータ長で示される領域が「格納領域」の一例にあたり、桁落データを格納した領域が「一部領域」の一例にあたる。
【００２５】
また、コア１０１からデータに対する桁落処理の不実行を指示する桁落フラグ信号を受信した場合、格納処理部１２１は、ＤＩＭＭ１６の格納命令に含まれる先頭アドレス及びデータ長で指定された領域にデータを格納させる。
【００２６】
格納処理部１２１は、データのＤＩＭＭ１６への格納後、格納応答をコア１０１へ出力する。
【００２７】
読出処理部１２２は、データの読出命令の入力をコア１０１から受ける。このコア１０１による読出命令で読み出しが指定されたデータが、「第２データ」の一例にあたる。
【００２８】
そして、読出処理部１２２は、読出命令に含まれる先頭アドレス及びデータ長で指定された領域における先頭アドレスから桁落データ長の領域からデータを読み出す。その後、読出処理部１２２は、読み出したデータが桁落データか否かを判定する。読み出したデータが桁落データの場合、読出処理部１２２は、読出命令に含まれる先頭アドレス及びデータ長で指定された領域の残りの領域の読み出しを回避する。そして、読出処理部１２２は、読み出した桁落データに対して桁落処理前の精度を有するフォーマットに戻す桁戻処理を実行する。
【００２９】
また、読み出したデータが桁落データでなければ、読出処理部１２２は、読出命令に含まれる先頭アドレス及びデータ長で指定された領域の残りの領域からデータを読み出す。
【００３０】
その後、読出処理部１２２は、ＤＩＭＭ１６から読み出したデータとともに読出応答をコア１０１へ出力する。
【００３１】
次に、図３を参照して、格納処理部１２１の詳細についてさらに説明する。図３は、格納処理部のブロック図である。図３に示すように、格納処理部１２１は、データヘッダ生成部２１１、精度低下処理部２１２、データバッファ２１３、データ出力部２１４及びコマンド変換部２１５を有する。
【００３２】
データヘッダ生成部２１１は、コア１０１から入力された格納命令に含まれる先頭アドレス、データ長及びデータの入力を受ける。また、データヘッダ生成部２１１は、桁落フラグ信号の入力を受ける。そして、データヘッダ生成部２１１は、桁落処理を実行するか否かを判定する。
【００３３】
桁落処理を実行する場合、データヘッダ生成部２１１は、先頭アドレスとともに桁落データのデータ長をコマンド変換部２１５へ出力する。また、データヘッダ生成部２１１は、桁落指示を指示する桁落指示信号及び桁落データを識別するためのデータヘッダをデータバッファ２１３に出力する。また、データヘッダ生成部２１１は、桁落指示信号をデータ出力部２１４へ出力する。その後、データヘッダ生成部２１１は、データの出力を指示する出力指示信号をデータバッファ２１３へ出力する。
【００３４】
また、桁落処理を実行しない場合、データヘッダ生成部２１１は、先頭アドレスとともに格納命令に含まれるデータ長をコマンド変換部２１５へ出力する。
【００３５】
ここで、図４を参照して、データヘッダ生成部２１１の構成の具体例について説明する。図４は、データヘッダ生成部の構成の一例を表す図である。
【００３６】
データヘッダ生成部２１１は、判定回路３０１、比較回路３０２、半減回路３０３、開始判定回路３０４、カウンタ３０５、比較回路３０６、比較回路３０７、データ長選択回路３０８、ＦＦ（Flip  Flop）回路３０９及びヘッダ出力回路３１０を有する。
【００３７】
図４において、Ａｄｄｒ（Address）は、先頭アドレスを表す。また、Ｆ（Flag）＿ｏｎは、桁落フラグ信号を表す。また、Ｌｅｎ（Length）は、格納命令に含まれるデータ長を表す。また、データは、格納命令によりＤＩＭＭ１３への格納が指示されたデータを表す。
【００３８】
比較回路３０２は、桁落処理を実行するか否かを判定するデータ長閾値を予め有する。このデータ長閾値が、「所定値」の一例にあたる。比較回路３０２は、格納命令によりＤＩＭＭ１３への格納が指示されたデータのデータ長が短い場合、桁落処理を実行してもデータ転送の性能の向上の効果が少ないため、データ長がデータ長閾値以上のデータに対して桁落処理を実行することを決定する。
【００３９】
比較回路３０２は、コア１０１から入力された格納命令に含まれるデータ長の入力を受ける。次に、比較回路３０２は、格納命令に含まれるデータ長とデータ長閾値とを比較する。そして、比較回路３０２は、格納命令に含まれるデータ長とデータ長閾値との比較結果を判定回路３０１へ出力する。
【００４０】
判定回路３０１は、コア１０１から入力された桁落フラグ信号の入力を受ける。また、判定回路３０１は、格納命令に含まれるデータ長とデータ長閾値との比較結果の入力を比較回路３０２から受ける。そして、判定回路３０１は、桁落フラグ信号が桁落処理の実行を指示しており、且つ、格納命令に含まれるデータ長がデータ長閾値以上の場合、桁落データのデータ長である桁落データ長の出力を指示する信号をデータ長選択回路３０８へ出力する。
【００４１】
半減回路３０３は、コア１０１から入力された格納命令に含まれるデータ長の入力を受ける。次に、半減回路３０３は、データ長の半分の長さを算出し、算出した値を桁落データ長とする。そして、半減回路３０３は、桁落データ長を比較回路３０７及びデータ長選択回路３０８へ出力する。
【００４２】
データ長選択回路３０８は、コア１０１から入力された格納命令に含まれるデータ長の入力を受ける。また、データ長選択回路３０８は、桁落データ長の入力を半減回路３０３から受ける。そして、データ長選択回路３０８は、桁落データ長の出力を指示する信号の入力を判定回路３０１から受けたか否かを判定する。
【００４３】
桁落データ長の出力を指示する信号の入力を受けていない場合、データ長選択回路３０８は、格納命令に含まれるデータ長をコマンド変換部２１５へ出力する。また、桁落データ長の出力を指示する信号の入力を受けた場合、データ長選択回路３０８は、桁落データ長をコマンド変換部２１５へ出力する。図４におけるデータ長選択回路３０８から出力される変換Ｌｅｎは、格納命令に含まれるデータ長又は桁落データ長を表す。
【００４４】
開始判定回路３０４は、桁落フラグ信号の入力を受ける。そして、開始判定回路３０４は、桁落処理の実行を指示する桁落フラグ信号が入力されると、桁落処理の開始信号をＦＦ回路３０９へ出力する。
【００４５】
例えば、桁落フラグ信号の値がＬｏｗであれば桁落処理の不実行を表し、値がＨｉｇｈであれば桁落処理の実行を指示する場合、開始判定回路３０４は、桁落フラグ信号の立ち上りの検出を行う。そして、開始判定回路３０４は、桁落フラグ信号の立ち上りを検出すると、桁落処理の開始信号をＦＦ回路３０９へ出力する。
【００４６】
カウンタ３０５は、コア１０１から入力された格納命令でＤＩＭＭ１３への格納が指示されたデータの入力を受ける。そして、カウンタ３０５は、ＤＩＭＭ１３への格納が指示されたデータのうちの受信済みのデータの長さのカウントを開始する。例えば、カウンタ３０５は、クロック数をカウントすることでデータの長さをカウントする。そして、カウンタ３０５は、カウント値を比較回路３０６及び３０７へ出力する。
【００４７】
比較回路３０６は、コア１０１から入力された格納命令に含まれるデータ長の入力を受ける。さらに、比較回路３０６は、受信済みのデータの長さを表すカウント値の入力をカウンタ３０５から受ける。そして、比較回路３０６は、カウント値が格納命令に含まれるデータ長に達した場合、すなわち、格納命令に含まれるデータの全ての受信が完了した場合、桁落処理の終了信号をＦＦ回路３０９へ出力する。
【００４８】
ＦＦ回路３０９は、セットリセット型のフリップフロップである。図４のＦＦ回路３０９における端子Ｓがセット端子を表す。また、ＦＦ回路３０９における端子Ｒがリセット端子を表す。ＦＦ回路３００は、セット端子に開始判定回路３０４から出力された桁落処理の開始信号の入力を受けると、データバッファ２１３及びデータ出力部２１４への桁落処理の実行を表す桁落指示信号の出力を開始する。そして、リセット端子に比較回路３０６から出力された桁落処理の終了信号の入力を受けると、ＦＦ回路３００は、データバッファ２１３及びデータ出力部２１４への桁落指示信号の出力を停止する。
【００４９】
比較回路３０７は、桁落データ長の入力を半減回路３０３から受ける。さらに、比較回路３０６は、受信済みのデータの長さを表すカウント値の入力をカウンタ３０５から受ける。そして、比較回路３０７は、カウント値が桁落データ長に達した場合、すなわち、桁落データ長分のデータの受信が完了した場合、出力指示信号をデータバッファ２１３へ出力する。
【００５０】
ヘッダ出力回路３１０は、データが桁落データで有ることを表すヘッダ情報を生成する。このヘッダ情報は、ＥＣＣ（Error  Check  and  Correct）情報まで含めると通常ではありえないパターン、すなわちエラーとして検出されないパターンを有する。以下では、ヘッダ出力回路３１０が生成するヘッダ情報のパターンを固有パターンという。このデータが桁落データで有ることを表すヘッダ情報が、「識別情報」の一例にあたる。
【００５１】
また、ヘッダ出力回路３１０は、コア１０１から入力された格納命令に含まれるデータ長の入力を受ける。そして、ヘッダ出力回路３１０は、メモリ空間における先頭アドレスから始まる一列分の領域にあたる１つのメモリエントリに固有パターンを有するヘッダ情報の格納し、次のメモリエントリへデータ長を格納したデータヘッダを生成する。その後、ヘッダ出力回路３１０は、桁落処理の開始信号の入力を開始判定回路３０４から受けると、生成したデータヘッダをデータバッファ２１３へ出力する。
【００５２】
図３に戻って説明を続ける。精度低下処理部２１２は、コア１０１から入力された格納命令でＤＩＭＭ１３への格納が指示されたデータの入力を受ける。そして、精度低下処理部２１２は、取得したデータの精度の半分に落とす桁落処理を行うことで桁落データを生成する。３２ｂｉｔのデータの場合、精度を半分に落とす前のデータは「単精度データ」と呼ばれる場合があり、単精度データの精度を半分に落とした１６ｂｉｔのデータは「半精度データ」と呼ばれる場合がある。例えば、精度低下処理部２１２は、取得したデータが１０桁の情報であれば、前半１０桁の情報を含む桁落データを作成する。そして、精度低下処理部２１２は、作成した桁落データをデータバッファ２１３へ出力する。
【００５３】
データバッファ２１３は、データを一時的に格納するバッファである。また、データバッファ２１３は、コア１０１から桁落処理を行うデータの入力が開始されると、桁落指示信号の入力をデータヘッダ生成部２１１から受ける。また、データバッファ２１３は、固有パターンを有するヘッダ情報及び格納命令で指定されたデータ長を含むデータヘッダをデータバッファ２１３から取得する。そして、データバッファ２１３は、取得したデータヘッダを格納する。次に、データバッファ２１３は、桁落指示信号の入力を受けている場合、精度低下処理部２１２から入力された桁落データの格納を開始する。
【００５４】
その後、桁落データ長のデータの受信が完了した時点で、データバッファ２１３は、データの出力指示信号の入力をデータバッファ２１３から受ける。そして、データの出力指示信号の入力を受けると、データバッファ２１３は、格納したデータヘッダ及びデータの出力を開始する。その後、データバッファ２１３は、データヘッダ生成部２１１からの桁落指示信号の入力が停止するまで、すなわち、格納命令に含まれるデータ長分のデータの受信が完了するまで、精度低下処理部２１２から入力された桁落データの出力を継続する。
【００５５】
このように、格納命令で示されたデータ長の半分の長さのデータを受信すると、連続する桁落データの送信時に間が空かないようになり、データ転送の時間を短縮することができる。また、ＤＩＭＭ１３に１つのデータを隙間なくデータを格納することができる。言い換えれば、精度低下前の元データを半分以上受信することで、連続する桁落データの送信時に間が空かないようにすることができる。
【００５６】
ここで、本実施例では、データ長を半分にする桁落ちの処理を行ったがデータ長を他の長さにする桁落ち処理を行った場合、以下の方法で送信時に間が空かないようにすることができる。例えば、元のデータ長の１／ｎの長さにする桁落ち処理を行う場合、格納命令で示されたデータ長の（１−１／ｎ）の長さのデータを受信した後にデータの出力を開始することで、連続する桁落データの送信時に間を空かなくすることができる。なぜなら、送信側でデータを消費するスピードは桁落処理を行っても行わなくても同じである。そのため、データを１／ｎにした場合、送信時にはデータは元のサイズのデータのｎ倍の速さで消費されるのと同じと考えることができる。そのため、例えばデータ長を１／４の長さにする桁落処理を行った場合、送信時にはデータは元のサイズのデータの４倍の速さで消費される。この場合、元のデータの全長の３／４の長さのデータを受信してから送信をｙ始めることで、送信時に間が空かなくなる。すなわち、元のデータ長の１／ｎの長さにする桁落ち処理を行う場合、格納命令で示されたデータ長の（１−１／ｎ）の長さのデータを受信した後にデータの出力を開始すればよいといえる。
【００５７】
データ出力部２１４は、コア１０１から入力された格納命令でＤＩＭＭ１３への格納が指示されたデータの入力を受ける。また、桁落処理が実施される場合、データ出力部２１４は、固有パターンを有するヘッダ情報及び格納命令で指定されたデータ長を含むデータヘッダ、並びに、桁落データの入力をデータバッファ２１３から受ける。さらに、桁落処理が実施される場合、データ出力部２１４は、桁落指示信号の入力をデータヘッダ生成部２１１から受ける。
【００５８】
桁落指示信号がデータヘッダ生成部２１１から入力された場合、データ出力部２１４は、データバッファ２１３から入力されたデータヘッダ及び桁落データをコマンド変換部２１５へ出力する。また、桁落指示信号がデータヘッダ生成部２１１から入力されていない場合、データ出力部２１４は、コア１０１から入力された格納命令に含まれるデータをコマンド変換部２１５へ出力する。
【００５９】
コマンド変換部２１５は、桁落処理が行われる場合、先頭アドレス及び桁落データ長の入力をデータヘッダ生成部２１１から受ける。また、コマンド変換部２１５は、固有パターンを有するヘッダ情報及び格納命令で指定されたデータ長を含むデータヘッダ、並びに、桁落データの入力をデータ出力部２１４から受ける。
【００６０】
次に、コマンド変換部２１５は、ＤＩＭＭ１３のメモリ空間における先頭アドレスから始まる２つのメモリエントリへデータヘッダの格納を決定する。さらに、コマンド変換部２１５は、次に続くＤＩＭＭ１３の領域に桁落データを配置することを決定する。そして、コマンド変換部２１５は、決定した配置情報にしたがって桁落データを配置するＤＩＭＭ１３向けの格納命令を生成する。その後、コマンド変換部２１５は、生成した格納命令をＤＩＭＭ１６へ出力して、データヘッダ及び桁落データをＤＩＭＭ１３に格納させる。
【００６１】
これに対して、桁落処理が行われていない場合、コマンド変換部２１５は、先頭アドレス及び格納命令に含まれるデータ長の入力をデータヘッダ生成部２１１から受ける。また、コマンド変換部２１５は、格納命令に含まれるデータの入力をデータ出力部２１４から受ける。そして、コマンド変換部２１５は、ＤＩＭＭ１３のメモリ空間の先頭アドレスから始まるデータ長の領域へのデータの格納を指示するＤＩＭＭ１３向けの格納命令を生成する。その後、コマンド変換部２１５は、生成した格納命令をＤＩＭＭ１６へ出力して、データをＤＩＭＭ１３に格納させる。
【００６２】
ここで、図５は、桁落データのＤＩＭＭへの格納状態を説明する図である。図５における配置状態６１は、桁落処理を行わずにデータを配置した場合を表す。また、配置状態６２は、桁落処理を行って左側と同じデータを配置した場合を表す。メモリ空間１６０は、ＤＩＭＭ１３のデータが格納されるアドレスを表す空間であり、１つのメモリエントリのサイズが３２バイトである。そして、メモリ空間１６０の左に付した数字はアドレス番号を表す。また、データＤ１−１〜Ｄ１−２５６は、１つのデータＤ１を表す。また、データＤ２−１〜Ｄ１２８は１つのデータＤ２を表す。また、配置状態６１におけるデータＤ１−１〜Ｄ１−２５６及びデータＤ２−１〜Ｄ１２８のそれぞれは、桁落処理を行わない場合の４バイトの浮動小数点データを表す。また、配置状態６２におけるデータＤ１−１〜Ｄ１−２５６及びデータＤ２−１〜Ｄ１２８のそれぞれは、桁落処理を行った後の２バイトの浮動小数点データを表す。
【００６３】
配置状態６１に示すように桁落処理を施さない場合、ＤＩＭＭ１３のメモリ空間１６０のアドレス番号が１００番〜１１２３番の領域に、１０２４バイトのデータＤ１−１〜Ｄ１−２５６が格納される。また、メモリ空間１６０のアドレス番号が１１２４番〜１６３６番の領域に、５１２バイトのデータＤ２−１〜Ｄ２−１２８が格納される。
【００６４】
これに対して、桁落処理を施すと、先頭アドレスから１つのメモリエントリ、すなわちアドレス番号が１００番から１３２番までの領域に固有バターンを有するヘッダ情報が格納される。また、次のメモリエントリ、すなわち、アドレス番号が１３２番から１６４番までの領域にコア１０１により指定されたデータ長の情報が格納される。これにより、先頭アドレスから２つ分のメモリエントリがデータヘッダとなる。
【００６５】
さらに、桁落処理を施されたデータＤ１−１〜Ｄ１−２５６は、サイズが半分になるので、アドレス番号が１６４番から６７６番までの領域に格納される。そしてメモリ空間１６０におけるアドレス番号が１１２４番までの残りの領域は未使用領域１６１となる。
【００６６】
同様に、データＤ２についても、先頭アドレスである１１２４番から２つ分のメモリエントリがデータヘッダとなる。そして、桁落処理を施されたデータＤ２−１〜Ｄ２−１２８は、サイズが半分になるので、アドレス番号が１１８８番から１４４４番までの領域に格納される。そしてメモリ空間１６０のアドレス番号が１６３６番までの残りの領域は未使用領域１６２となる。
【００６７】
例えばデータＤ１を格納するメモリ空間１６０の使用領域は、桁落処理を施した場合は５７６バイトとなり、桁落処理を施さない場合に比べて４４％減る。また、データＤ２を格納するメモリ空間１６０の使用領域は、桁落処理を施した場合は３２０バイトとなり、桁落処理を施さない場合に比べて３８％減る。したがって、データの格納時にＧＰＵ１５とＤＩＭＭ１６とを結ぶバスの使用率が格納データのサイズが減った分だけ下がり、ＧＰＵ１５は、データの転送を短時間で行えるようになる。
【００６８】
次に、図６を参照して、読出処理部１２２の詳細についてさらに説明する。図６は、読出処理部のブロック図である。図６に示すように、読出処理部１２２は、命令分割部２２１、コマンド変換部２２２、ヘッダ判定部２２３、ヘッダ削除部２２４、精度回復処理部２２５、データバッファ２２６及びデータ出力部２２７を有する。
【００６９】
命令分割部２２１は、コア１０１から読み出すデータが格納された先頭アドレス及び読み出すデータのデータ長を含む読出命令の入力を受ける。次に、命令分割部２２１は、取得した読出命令を、読み出しが指定されたデータの前半部分を読み出す前半部読出命令と、後半部分を読み出す後半部読出命令の２つに分割する。そして、命令分割部２２１は、前半部読出命令をコマンド変換部２２２へ出力する。以下では、前半部読出命令により読み出しが指定されるデータを前半データと呼び、後半部読出命令により読み出しが指定されるデータを後半データと呼ぶ。
【００７０】
ここで、本実施例では、データ長を半分にする桁落ちの処理を行ったデータの読み出しの場合について説明したが、データ長を他の長さにする桁落ち処理を行った場合、以下の方法でデータを読み出すことができる。例えば、元のデータ長の１／ｎの長さにする桁落ち処理を行う場合、命令分割部２２１は、読み出しが指定されたデータの先頭から１／ｎの長さのデータの読み出しの読出命令とその後に続く（１−１／ｎ）の長さのデータを読み出す読出命令を生成する。この２つの命令を用いることで、データ長を他の長さにする桁落ち処理を行った場合にも適切なデータの読み出しを行うことができる。
【００７１】
その後、命令分割部２２１は、後半出力指示信号の入力をヘッダ判定部２２３から受けた場合、後半部読出命令をコマンド変換部２２２へ出力する。これに対して、後半出力指示信号の入力をヘッダ判定部２２３から受けない場合、命令分割部２２１は、後半部読出命令を破棄する。
【００７２】
ここで、図７を参照して、命令分割部２２１の構成の具体例について説明する。図７は、命令分割部の構成の一例を表す図である。
【００７３】
命令分割部２２１は、半減回路２０１、後半アドレス生成回路４０２、比較回路４０３、アドレス選択回路４０４及びデータ長選択回路４０５を有する。図７におけるＡｄｄｒは、読出命令に含まれる読み出すデータの先頭アドレスである。また、図７におけるＬｅｎは、読出命令に含まれる読み出すデータのデータ長である。コア１０１は、メモリアクセスコントローラ１０２により桁落処理が施されたことは把握していないため、自己が格納命令で指定したデータ長を読出命令においても指定する。
【００７４】
半減回路４０１は、コア１０１から入力された読出命令に含まれるデータ長の入力を受ける。次に、半減回路４０１、データ長の半分の長さを算出し、算出した値を桁落データ長とする。そして、半減回路４０１は、桁落データ長を後半アドレス生成回路４０２及びデータ長選択回路４０５へ出力する。
【００７５】
後半アドレス生成回路４０２は、コア１０１から入力された読出命令に含まれる先頭アドレスの入力を受ける。また、後半アドレス生成回路４０２は、桁落データ長の入力を半減回路４０１から受ける。そして、後半アドレス生成回路４０２は、後半データの先頭アドレスを求める。例えば、後半アドレス生成回路４０２は、桁落データ長をメモリ空間１６０におけるアドレスサイズに変更する。次に、後半アドレス生成回路４０２は、先頭アドレスに桁落データ長を加算して後半データの先頭アドレスを求める。その後、後半アドレス生成回路４０２は、求めた後半データの先頭アドレスをアドレス選択回路４０４へ出力する。
【００７６】
アドレス選択回路４０４は、コア１０１から入力された読出命令に含まれる先頭アドレスの入力を受ける。また、アドレス選択回路４０４は、後半データの先頭アドレスの入力を後半アドレス生成回路４０２から受ける。
【００７７】
アドレス選択回路４０４は、ヘッダ判定部２２３からの後半出力指示信号の入力が無ければ、読出命令に含まれる先頭アドレスをコマンド変換部２２２へ出力する。これに対して、ヘッダ判定部２２３からの後半出力指示信号の入力があれば、アドレス選択回路４０４は、後半データの先頭アドレスをコマンド変換部２２２へ出力する。図７におけるアドレス選択回路４０４から出力される変換Ａｄｄｒは、読出命令に含まれる先頭アドレス又は後半データの先頭アドレスを表す。
【００７８】
比較回路４０３は、データ長閾値を予め有する。また、比較回路４０３は、コア１０１から入力された読出命令に含まれるデータ長の入力を受ける。そして、比較回路４０３は、読出命令に含まれるデータ長とデータ長閾値とを比較する。その後、比較回路４０３は、読出命令に含まれるデータ長とデータ長閾値との比較結果をデータ長選択回路４０５へ出力する。
【００７９】
データ長選択回路４０５は、コア１０１から入力された読出命令に含まれるデータ長の入力を受ける。また、データ長選択回路４０５は、桁落データ長の入力を半減回路４０１から受ける。
【００８０】
さらに、データ長選択回路４０５は、読出命令に含まれるデータ長とデータ長閾値との比較結果の入力を比較回路４０３から受ける。そして、読出命令に含まれるデータ長がデータ長閾値以上の場合、桁落データ長をコマンド変換部２２２へ出力する。これに対して、読出命令に含まれるデータ長がデータ長閾値未満の場合、読出命令に含まれるデータ長をコマンド変換部２２２へ出力する。図７におけるデータ長選択回路４０５から出力される変換Ｌｅｎは、読出命令に含まれるデータ長又は桁落データ長を表す。
【００８１】
図６に戻って説明を続ける。コマンド変換部２２２は、読出命令に含まれるデータ長がデータ長閾値以上の場合、コア１０１から出力された読出命令に含まれる先頭アドレス及び桁落データ長を含む前半部読出命令の入力を命令分割部２２１から受ける。そして、コマンド変換部２２２は、前半部読出命令をＤＩＭＭ１３向けの読出命令に変換してＤＩＭＭ１３に出力する。その後、コマンド変換部２２２は、ＤＩＭＭ１３から前半データを取得し、ヘッダ判定部２２３、ヘッダ削除部２２４及びデータ出力部２２７へ出力する。この前半データには、データヘッダが含まれる。
【００８２】
その後、読み出したデータが桁落データの場合、コマンド変換部２２２は、後半データの先頭アドレス及び桁落データ長を含む後半部読出命令の入力を命令分割部２２１から受ける。そして、コマンド変換部２２２は、後半部読出命令をＤＩＭＭ１３向けの読出命令に変換してＤＩＭＭ１３に出力する。その後、コマンド変換部２２２は、ＤＩＭＭ１３から後半データを取得しヘッダ削除部２２４及びデータ出力部２２７へ出力する。
【００８３】
これに対して、読出命令に含まれるデータ長がデータ長閾値未満の場合、コア１０１から出力された読出命令に含まれる先頭アドレス及び読出命令に含まれるデータ長を含む前半部読出命令の入力を命令分割部２２１から受ける。そして、コマンド変換部２２２は、前半部読出命令をＤＩＭＭ１３向けの読出命令に変換してＤＩＭＭ１３に出力する。その後、コマンド変換部２２２は、ＤＩＭＭ１３から前半データを取得し、ヘッダ判定部２２３、ヘッダ削除部２２４及びデータ出力部２２７へ出力する。この場合、読み出したデータは桁落データでないため、コマンド変換部２２２は、後半部読出命令の入力を受けず、後半データの読み出しは行わない。
【００８４】
ヘッダ判定部２２３は、前半データの入力をコマンド変換部２２２から受ける。そして、ヘッダ判定部２２３は、前半データの先頭から２つのメモリエントリ分のデータを読み出しデータヘッダを取得する。そして、ヘッダ判定部２２３は、データヘッダの先頭から１つのメモリエントリ分のデータが固定パターンに一致するか否かを判定する。固定パターンに一致する場合、ヘッダ判定部２２３は、フォーマット変換指示信号をヘッダ削除部２２４、精度回復処理部２２５、データバッファ２２６及びデータ出力部２２７へ出力する。その後、ヘッダ判定部２２３は、桁落データ長分のデータの読み出しを終えると、フォーマット変換指示信号の出力を停止する。
【００８５】
これに対して、固定パターンに一致しない場合、ヘッダ判定部２２３は、後半出力指示を命令分割部２２１へ出力する。
【００８６】
ここで、図８を参照して、ヘッダ判定部２２３の構成の具体例について説明する。図８は、ヘッダ判定部の構成の一例を表す図である。
【００８７】
ヘッダ判定部２２３は、ヘッダ分離回路５０１、フォーマット変換判定回路５０２、後半出力判定回路５０３、データ長抽出回路５０４、読出開始判定回路５０５、ＦＦ回路５０６、半減回路５０７、カウンタ５０８、比較回路５０９及びＦＦ回路５１０を有する。
【００８８】
ヘッダ分離回路５０１は、前半データの入力をコマンド変換部２２２から受ける。そして、ヘッダ分離回路５０１は、取得した前半データの先頭から２つのメモリエントリ分のデータを取得する。そして、ヘッダ分離回路５０１は、取得した２つのメモリエントリ分のデータをフォーマット変換判定回路５０２及び後半出力判定回路５０３へ出力する。また、ヘッダ分離回路５０１は、前半データをカウンタ５０８へ出力する。
【００８９】
フォーマット変換判定回路５０２は、前半データの先頭から２つのメモリエントリ分のデータの入力をヘッダ分離回路５０１から受ける。そして、フォーマット変換判定回路５０２は、取得したデータの先頭から１つのメモリエントリ分のデータのパターンが固定パターンに一致するか否かを判定する。固定パターンに一致する場合、フォーマット変換判定回路５０２は、フォーマット変換指示信号を読出開始判定回路５０５及びＦＦ回路５１０へ出力する。
【００９０】
後半出力判定回路５０３は、前半データの先頭から２つのメモリエントリ分のデータの入力をヘッダ分離回路５０１から受ける。そして、後半出力判定回路５０３は、取得したデータの先頭から１つのメモリエントリ分のデータのパターンが固定パターンに一致するか否かを判定する。固定パターンに一致しない場合、後半出力判定回路５０３は、後半出力指示信号を命令分割部２２１へ出力する。
【００９１】
データ長抽出回路５０４は、前半データの先頭から２つのメモリエントリ分のデータの入力をヘッダ分離回路５０１から受ける。そして、データ長抽出回路５０４は、取得したデータの先頭から２つめのメモリエントリにあたる領域に格納されたデータ長を取得する。そして、データ長抽出回路５０４は、取得したデータ長をＦＦ回路５０６へ出力する。
【００９２】
読出開始判定回路５０５は、フォーマット変換判定回路５０２から後半出力指示信号の入力を受けるとＦＦ回路５０６に対して出力指示を行う。例えば、フォーマット変換判定回路５０２から入力される信号の値がＬｏｗであれば後半出力指示信号の未入力を表し、値がＨｉｇｈであれば後半出力指示信号が入力されたことを表す場合で説明する。この場合、読出開始判定回路５０５は、フォーマット変換判定回路５０２から入力される信号の立ち上りの検出を行う。そして、読出開始判定回路５０５は、フォーマット変換判定回路５０２から入力される信号の立ち上りを検出すると、ＦＦ回路５０６に対して出力指示を行う。
【００９３】
ＦＦ回路５０６は、データ長の入力をデータ長抽出回路５０４から受ける。そして、ＦＦ回路５０６は、取得したデータ長を保持する。その後、ＦＦ回路５０６は、読出開始判定回路５０５からの出力指示を受けて、保持するデータ長を半減回路５０７へ出力する。
【００９４】
半減回路５０７は、データ長の入力をＦＦ回路５０６から受ける。そして、半減回路５０７は、データ長の半分の長さを算出し桁落データ長を取得する。そして、半減回路５０７は、桁落データ長を比較回路５０９へ出力する。
【００９５】
カウンタ５０８は、前半データの入力をヘッダ分離回路５０１から受ける。そして、カウンタ５０８は、前半データのうちの受信済みのデータの長さのカウントを開始する。そして、カウンタ５０８は、カウント値を比較回路５０９へ出力する。
【００９６】
比較回路５０９は、桁落データ長の入力を半減回路５０７から受ける。また、比較回路５０９は、受信済みのデータの長さを表すカウント値の入力をカウンタ５０８から受ける。比較回路５０９は、桁落データ長とカウント値とを比較する。そして、カウント値が桁落データ長に達すると、比較回路５０９は、読出終了信号をＦＦ回路５１０へ出力する。
【００９７】
ＦＦ回路５１０は、セットリセット型のフリップフロップである。ＦＦ回路５１０は、フォーマット変換判定回路５０２から出力された読出開始信号のセット端子への入力を受けると、フォーマット変換指示信号をヘッダ削除部２２４、精度回復処理部２２５、データバッファ２２６及びデータ出力部２２７へ出力する。その後、比較回路５０９から出力された読出終了信号のリセット端子への入力を受けると、ＦＦ回路５１０は、フォーマット変換指示信号の出力を停止する。
【００９８】
図６に戻って説明を続ける。ヘッダ削除部２２４は、前半データの入力をコマンド変換部２２２から受ける。そして、ヘッダ判定部２２３は、フォーマット変換指示信号の入力をヘッダ判定部２２３から受けた場合、前半データの先頭から２つのメモリエントリ分のデータを削除することでデータヘッダを削除する。その後、ヘッダ削除部２２４は、データヘッダを削除した前半データを精度回復処理部２２５へ出力する。
【００９９】
これに対して、フォーマット変換指示信号の入力をヘッダ判定部２２３から受けていなければ、ヘッダ削除部２２４は、データヘッダの削除は行わずに前半データを精度回復処理部２２５へ出力する。その後、ヘッダ削除部２２４は、後半データの入力をコマンド変換部２２２から受ける。そして、ヘッダ削除部２２４は、データヘッダの削除は行わずに後半データを精度回復処理部２２５へ出力する。
【０１００】
精度回復処理部２２５は、データヘッダが削除された前半データの入力をヘッダ削除部２２４から受ける。以下では、データヘッダが削除された前半データを単に前半データと呼ぶ。そして、ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けて、精度回復処理部２２５は、前半データに対して桁落処理を実行する前の桁を有するデータに変換する桁戻処理を実行する。例えば、精度回復処理部２２５は、前半データである桁落データが５桁のデータで有る場合、後に５桁分の０を付加して１０桁のデータに戻す。その後、精度回復処理部２２５は、桁戻処理を施した前半データをデータバッファ２２６へ出力する。
【０１０１】
また、前半データが桁落データの場合、後半データの読み出しは行われない。そのため、精度回復処理部２２５は、後半データの入力を受けず、また、前半データの処理後にフォーマット変換指示信号の入力を受けなくなるので、後半データに対する処理は行わない。
【０１０２】
データバッファ２２６は、桁戻処理を施した前半データの入力を精度回復処理部２２５から受ける。データバッファ２２６は、取得した前半データを保持する。そして、ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けて、データバッファ２２６は、保持した前半データをデータ出力部２２７へ出力する。また、データバッファ２２６は、精度回復処理部２２５と同様に、後半データに対する処理は行わない。
【０１０３】
データ出力部２２７は、桁戻処理が施された前半データの入力をデータバッファ２２６から受ける。また、データ出力部２２７は、桁戻処理が施される前の前半データの入力をコマンド変換部２２２から受ける。
【０１０４】
ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けている場合、データ出力部２２７は、桁戻処理が施された前半データを選択してコア１０１へ出力する。また、ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けていない場合、データ出力部２２７は、桁戻処理が施される前の前半データを選択してコア１０１へ出力する。
【０１０５】
その後、ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けている場合、データ出力部２２７は、データの出力を終了する。これに対して、ヘッダ判定部２２３からフォーマット変換指示信号の入力を受けていない場合、データ出力部２２７は、コマンド変換部２２２から入力された後半データをコア１０１へ出力する。
【０１０６】
次に、図９を参照して、桁落処理を行うデータの格納及び桁戻処理を行うデータの読み出しにおける送受信される信号について説明する。図９は、桁落処理及び桁戻処理における信号の状態を表す図である。
【０１０７】
図９では、コア１０１、メモリアクセスコントローラ１０２及びＤＩＭＭ１６の間に、それぞれの間で送受信が行われる信号を記載した。信号Ｆは、桁落フラグ信号を表す。信号ＳＴは、格納命令を表す。データは、格納命令で格納が指示されたデータ又は読出命令にしたがって読み出されたデータを表す。領域Ｈは、データヘッダを表す。信号ＳＴ＿Ｒは、格納応答を表す。ＬＤは、読出命令をあらわす。破線で囲われた枠は、読出命令により指定されたデータを表す。
【０１０８】
コア１０１は、桁落処理を行ってデータを格納する場合、桁落フラグ信号、格納命令及び格納するデータを格納処理部１２１へ出力する。この状態ではデータは、桁落処理前のデータ長を有する。そして、格納処理部１２１は、桁落フラグ信号の入力を受けて桁落処理の実行を決定する。次に、格納処理部１２１は、データに桁落処理を施すとともに、生成したデータヘッダを付加し、ＤＩＭＭ１６向けに変換した格納命令とともにＤＩＭＭ１６へ出力し、ＤＩＭＭ１６にデータヘッダ及びデータを格納させる。この場合、コア１０１により指定されたデータ長と、桁落処理を施したデータとデータヘッダとを加えた長さとの差分である領域６０１がＤＩＭＭ１６における未使用領域となる。そして、格納処理部１２１は、領域６０１の分のデータ転送を行わないため、その分のバス使用率を軽減できる。
【０１０９】
また、コア１０１は、ＤＩＭＭ１６に格納された桁落データを読み出す場合、桁落処理を施されていないデータに対する読出命令を読出処理部１２２に出力する。すなわち、コア１０１は、読出命令により、桁落処理が施されていない状態のデータ長を有するデータの読み出しを指示する。
【０１１０】
読出処理部１２２は、受信した読出命令を前半部読出命令と後半部読出命令に分割する。図９において読出処理部１２２の上部に表した読出命令が前半部読出命令と後半部読出命令にあたる。その後、読出処理部１２２は、前半部読出命令をＤＩＭＭ１６へ出力する。この場合、読み出しを指定するデータ長は、桁落データ長となる。
【０１１１】
その後、読出処理部１２２は、前半部読出命令を受けて、読出応答とともにデータヘッダを含む前半データをＤＩＭＭ１６から取得する。この場合、読出処理部１２２は、データヘッダが固定パターンを有するヘッダ情報を含むことを確認し、後半部読出命令は破棄する。次に、読出処理部１２２は、前半データからデータヘッダを削除し、桁落データに対して桁戻処理を施して、コア１０１により読出命令で指定されたデータ長を有するデータに変換する。例えば、読出処理部１２２は、前半データからデータヘッダを削除したデータに桁落ち処理前の桁に戻すためのデータ６０２を付加する。そして、読出処理部１２２は、読出応答とともにデータ６０２を付加したデータをコア１０１へ出力する。
【０１１２】
次に、図１０を参照して、本実施例に係るメモリアクセスコントローラ１０２によるデータの格納処理及び読出処理の全体の流れについて説明する。図１０は、実施例１に係るメモリアクセスコントローラによるデータの格納処理及び読出処理のフローチャートである。
【０１１３】
メモリアクセスコントローラ１０２は、リクエストをコア１０１から受信する（ステップＳ１０１）。
【０１１４】
次に、メモリアクセスコントローラ１０２は、リクエストが格納命令か否かを判定する（ステップＳ１０２）。
【０１１５】
リクエストが格納命令の場合（ステップＳ１０２：肯定）、メモリアクセスコントローラ１０２の格納処理部１２１は、桁落フラグ信号が入力されたか否かにより、桁落処理の要求があるか否かを判定する（ステップＳ１０３）。
【０１１６】
桁落処理の要求が無い場合（ステップＳ１０３：否定）、格納処理部１２１は、格納命令にしたがいＤＩＭＭ１６にデータを格納させる（ステップＳ１０４）。その後、格納処理部１２１は、ステップＳ１０８へ進む。
【０１１７】
これに対して、桁落処理の要求を受けた場合（ステップＳ１０３：肯定）、格納処理部１２１は、格納命令で指定されたデータに桁落処理を実行する（ステップＳ１０５）。
【０１１８】
次に、格納処理部１２１は、固有パターンを有するヘッダ情報及びデータ長を含むデータヘッダを作成する（ステップＳ１０６）。
【０１１９】
次に、格納処理部１２１は、桁落データにデータヘッダを付加してＤＩＭＭ１６に格納させる（ステップＳ１０７）。このとき、格納命令で指定されたデータ長からデータヘッダのデータ長及び桁落データ長を除いたサイズのデータは、ＤＩＭＭ１６に送信されず、ＤＩＭＭ１６は、そのデータの領域を未使用とする。
【０１２０】
その後、格納処理部１２１は、格納応答をコア１０１へ送信する（ステップＳ１０８）。
【０１２１】
一方、リクエストが格納命令でなく読出命令の場合（ステップＳ１０２：否定）、メモリアクセスコントローラ１０２の読出処理部１２２は、読出命令を前半部読出命令及び後半部読出命令の２つに分割し、前半部読出命令をＤＩＭＭ１６へ送信する（ステップＳ１０９）。
【０１２２】
読出処理部１２２は、前半データをＤＩＭＭ１６から取得する。そして、読出処理部１２２は、前半データに含まれるデータヘッダから前半データに含まれるデータが桁落データか否かを判定する（ステップＳ１１０）。
【０１２３】
前半データに含まれるデータが桁落データの場合（ステップＳ１１０：肯定）、読出処理部１２２は、後半部読出命令を破棄する（ステップＳ１１１）。
【０１２４】
次に、読出処理部１２２は、前半データからデータヘッダを除いて取得したデータに桁戻処理を実行する（ステップＳ１１２）。
【０１２５】
その後、読出処理部１２２は、読出応答及び桁戻処理を施したデータをコア１０１へ送信する（ステップＳ１１３）。
【０１２６】
これに対して、前半データに含まれるデータが桁落データでない場合（ステップＳ１１０：否定）、読出処理部１１２は、後半部読出命令をＤＩＭＭ１６へ送信する（ステップＳ１１４）。
【０１２７】
その後、読出処理部１２２は、後半データをＤＩＭＭ１６から取得する。そして、読出処理部１２２は、前半データ及び後半データを合体させて読出応答とともにコア１０１へ送信する（ステップＳ１１５）。
【０１２８】
次に、図１１を参照して、本実施例に係る格納処理部１２１によるデータの格納処理の流れについて説明する。図１１は、実施例１に係る格納処理部によるデータの格納処理のフローチャートである。
【０１２９】
データヘッダ生成部２１１は、データ長がデータ長閾値以上で且つ桁落フラグ信号の入力を受けたか否かを判定する（ステップＳ２０１）。この処理は、例えば、図４の比較回路３０２及び判定回路３０１により行われる。
【０１３０】
データ長がデータ長閾値以下又は桁落フラグ信号の入力を受けていない場合（ステップＳ２０１:否定）、データヘッダ生成部２１１は、通常のデータ格納処理を実行する（ステップＳ２０２）。この処理は、例えば、図４のデータ長選択回路３０８が、格納命令で指定されたデータ長をコマンド変換部２１５へ出力することで実現される。
【０１３１】
これに対して、データ長がデータ長閾値以上で且つ桁落フラグ信号の入力を受けた場合（ステップＳ２０１：肯定）、データヘッダ生成部２１１は、データヘッダを生成する（ステップＳ２０３）。この処理は、例えば、図４のヘッダ出力回路３１０によって行われる。
【０１３２】
そして、データヘッダ生成部２１１は、生成したデータヘッダをデータバッファ２１３に書き込む（ステップＳ２０４）。この処理は、例えば、図４のヘッダ出力回路３１０によって行われる。
【０１３３】
次に、データヘッダ生成部２１１は、格納命令で指定されたデータに対して桁落処理を実行し桁落データを生成する（ステップＳ２０５）。この処理は、例えば、図４の半減回路３０３によって行われる。そして、格納処理部１２１は、桁落データをデータバッファ２１３に書き込む。
【０１３４】
データバッファ２１３は、格納処理部１２１から桁落データを受信し、２個の桁落データをメモリエントリの１つ分の領域に格納する（ステップＳ２０６）。
【０１３５】
データヘッダ生成部２１１は、データバッファ２１３にデータ長の半分以上の長さのデータを格納済みか否かを判定する（ステップＳ２０７）。データ長の半分以上の長さのデータの格納が完了していない場合（ステップＳ２０７：否定）、データヘッダ生成部２１１は、データバッファ２１３にデータ長の半分以上の長さのデータを格納されるまで待機する（ステップＳ２０７）。
【０１３６】
これに対して、データバッファ２１３にデータ長の半分以上の長さのデータを格納済みの場合（ステップＳ２０７：肯定）、データヘッダ生成部２１１は、データの出力指示をデータバッファ２１３及びデータ出力部２１４に出す（ステップＳ２０８）。この処理は、例えば、図４のカウンタ３０５及び比較回路３０７により行われる。
【０１３７】
データバッファ２１３は、桁落データをデータ出力部２１４へ出力する。データ出力部２１４は、データバッファ２１３から入力された桁落データを選択してコマンド変換部２１５へ出力する。コマンド変換部２１５は、データ出力部２１４から入力された桁落データのＤＩＭＭ１６向けの格納命令を生成してＤＩＭＭ１６へ出力することで、ＤＩＭＭ１６に連続して桁落データを書き込む（ステップＳ２０９）。
【０１３８】
次に、図１２を参照して、本実施例に係る読出処理部１２２によるデータの読出処理の流れについて説明する。図１２は、実施例１に係る読出処理部によるデータの読出処理のフローチャートである。
【０１３９】
命令分割部２２１は、読出命令をコア１０１から受信する（ステップＳ３０１）。
【０１４０】
次に、命令分割部２２１は、受信した読出命令を前半部読出命令及び後半部読出命令に変換する（ステップＳ３０２）。
【０１４１】
次に、命令分割部２２１は、前半部読出命令をコマンド変換部２２２を介してＤＩＭＭ１６へ送信する（ステップＳ３０３）。その後、ヘッダ判定部２２３は、前半データをコマンド変換部２２２を介してＤＩＭＭ１６から取得する。
【０１４２】
次に、ヘッダ判定部２２３は、前半部データからデータヘッダを取得する。そして、ヘッダ判定部２２３は、データヘッダが固定パターンを含むか否かを判定する（ステップＳ３０４）。
【０１４３】
データヘッダが固定パターンを含まない場合（ステップＳ３０４：否定）、ヘッダ判定部２２３は、後半出力指示信号を命令分割部２２１へ出力する。この処理は、例えば、図８の後半出力判定回路５０３により行われる。命令分割部２２１は、後半出力指示信号の入力を受けて、後半部読出命令をコマンド変換部２２２を介してＤＩＭＭ１６へ出力する（ステップＳ３０５）。
【０１４４】
データ出力部２２７は、前半データ及び後半データの入力をコマンド変換部２２２から受ける。そして、データ出力部２２７は、前半データと後半データとを合体させコア１０１へ送信する（ステップＳ３０６）。
【０１４５】
これに対して、データヘッダが固定パターンを含む場合（ステップＳ３０４：肯定）、命令分割部２２１は、後半部読出命令を破棄する（ステップＳ３０７）。
【０１４６】
また、ヘッダ判定部２２３は、データヘッダからデータ長を読み出す（ステップＳ３０８）。この処理は、例えば、図８のデータ長抽出回路５０４により行われる。
【０１４７】
次に、ヘッダ判定部２２３は、フォーマット変換指示信号をデータ長の半分の期間、ヘッダ削除部２２４、精度回復処理部２２５、データバッファ２２６及びデータ出力部２２７へ出力する（ステップＳ３０９）。この処理は、例えば、図８のフォーマット変換判定回路５０２、比較回路５０９及びＦＦ回路５１０により行われる。
【０１４８】
ヘッダ削除部２２４は、前半データの入力をコマンド変換部２２２から受ける。そして、ヘッダ削除部２２４は、前半データからデータヘッダを削除し桁落データを取得する。そして、ヘッダ削除部２２４は、桁落データを精度回復処理部２２５へ出力する。
【０１４９】
精度回復処理部２２５は、桁落データの入力をヘッダ削除部２２４から受ける。そして、精度回復処理部２２５は、前半データから取得した桁落データに対して桁戻処理を実行する（ステップＳ３１０）。その後、精度回復処理部２２５は、桁戻処理を施したデータをデータバッファ２２６へ送信する。
【０１５０】
データバッファ２２６は、メモリエントリの２つ分のデータが１度に書き込まれる（ステップＳ３１１）。その後、データバッファ２２６は、桁戻処理が施されたデータをデータ出力部２２７へ出力する。
【０１５１】
データ出力部２２７は、桁戻処理が施されたデータをコア１０１へ順次出力する（ステップＳ３１２）。
【０１５２】
以上に説明したように、本実施例に係るメモリアクセスコントローラは、データの精度を落としてメモリに格納し、読み出し時にはデータの精度を読出要求で指定された精度のフォーマットに戻してコアへ出力する。これにより、メモリとの間で送受信するデータ量を低減することができる。したがって、バスの使用率が抑えられ、メモリとの間のデータの送受信のスループットを向上させることができ、情報処理装置の演算効率を向上させることができる。
【０１５３】
特に、ディープラーニングの学習において計算される誤差データや重みの差分のデータは厳密な値を要求されないデータであり、ディープラーニングにおける演算は厳密解を要求される演算ではない。そのため、ディープラーニングでは本実施例で用いた桁落処理のような精度を落とす処理を施したデータを演算に用いることができ、本実施例に係るサーバは、要求される演算性能を維持しつつ演算効率を向上させることができる。
【実施例２】
【０１５４】
次に、実施例２について説明する。本実施例に係るサーバは図１で表される構成を有し、ＧＰＵは図２のブロック図で表される。本実施例では、コア１０１が、メモリアクセスコントローラ１０２に対して桁落処理の実行を指示するタイミングについて説明する。ここでは、サーバ１がディープラーニングを実行する場合で説明する。
【０１５５】
メモリアクセスコントローラ１０２が桁落処理を行うタイミングとしては、ディープラーニングにおける学習の初期段階が考えられる。すなわち、サーバ１は、最初は大雑把に学習し、学習が進んだ段階で高精度のデータを用いた学習を行うことでディープラーニングを完了することができる。そこで、このようなディープラーニングを実現するために、コア１０１は、以下で説明するタイミングで桁落処理の実行を指示する桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。
【０１５６】
コア１０１は、ディープラーニングの開始時に、桁落処理の実行を指示する桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。
【０１５７】
その後、コア１０１は、学習を実行した回数をカウントし、学習回数（iteration）が予め決められた一定回数を超えた場合、桁落処理を停止させる桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。例えば、コア１０１は、桁落処理の実行を指示する場合は桁落フラグ信号の値をＨｉｇｈにして、桁落処理の実行を指示する場合は桁落フラグ信号の値をＬｏｗにすることで桁落処理の実行を制御することができる。
【０１５８】
また、コア１０１は、学習が１回完了する毎に推定の品質の悪さを表す関数であるＬＯＳＳ関数を用いて推定の品質を求める。そして、推定の品質が予め決められた品質基準値以下となった場合、コア１０１は、桁落処理を停止させる桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。
【０１５９】
ここで、上述した２つの桁落処理を停止させる桁落フラグ信号を出力するタイミングは、組み合わせてもよいし、いずれか一方を用いてもよい。
【０１６０】
また、高い精度が求められない演算を行うタイミングであれば、これら以外のタイミングでメモリアクセスコントローラ１０２に桁落処理を実行させてもよい。例えば、コア１０１は、予めディープラーニングにおける学習が行われる複数の層のうち桁落処理を実行させる特定層を予め記憶しておく。特定層は、例えば、畳み込み層などを指定することができる。そして、コア１０１は、特定層における学習の開始のタイミングで、桁落処理の実行を指示する桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。その後、コア１０１は、特定層における学習の終了のタイミングで、桁落処理の停止させる桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。
【０１６１】
以上に説明したように、本実施例に係るコアは、高い精度が求められない演算を行うタイミングでメモリアクセスコントローラ１０２に桁落処理を実行させる。これにより、本実施例に係るサーバは、精度の良いディープラーニングを効率的に行うことができる。
【実施例３】
【０１６２】
次に、実施例３について説明する。本実施例に係るサーバは図１で表される構成を有し、ＧＰＵは図２のブロック図で表される。本実施例では、コア１０１は、学習サンプルやディープラーニングネットワークの品質の評価に桁落処理を用いる。ここでは、サーバ１がディープラーニングを実行する場合で説明する。
【０１６３】
コア１０１は、学習の前段階で、桁落処理の実行を指示する桁落フラグ信号を出力し、低精度の学習を短時間で行う。そして、コア１０１は、低精度の学習による学習結果が予め決められた学習結果以上であるか否かを判定する。例えば、コア１０１は、低精度の学習による画像認識の精度が、予め決められた精度に達しているか否かを判定する。
【０１６４】
低精度の学習による学習結果が予め決められた学習結果以上であれば、コア１０１は、桁落処理の停止させる桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。そして、コア１０１は、高精度の学習によるディープラーニングを実行する。
【０１６５】
これに対して、低精度の学習による学習結果が予め決められた学習結果未満であれば、コア１０１は、学習サンプルやディープラーニングネットワークを変更する。コア１０１は、例えば、パラメータを変更するなどしてディープラーニングネットワークを変更する。その後、コア１０１は、桁落処理の実行を指示する桁落フラグ信号を出力し、低精度の学習を短時間で行う。コア１０１は、低精度の学習による学習結果が予め決められた学習結果以上になるまで、学習サンプルやディープラーニングネットワークの変更を繰り返す。そして、低精度の学習による学習結果が予め決められた学習結果以上となった場合、コア１０１は、桁落処理の停止させる桁落フラグ信号をメモリアクセスコントローラ１０２へ出力する。その後、コア１０１は、高精度の学習によるディープラーニングを実行する。
【０１６６】
以上に説明したように、本実施例に係るコアは、学習の前段階で低精度の学習を行い、学習サンプルやディープラーニングネットワークの適切な設定を求め、その後求めた設定を用いて高精度の学習によるディープラーニングを実行する。これにより、本実施例に係るサーバは、精度の良いディープラーニングを効率的に行うことができる。
【符号の説明】
【０１６７】
１  サーバ
１１  ＣＰＵ
１２  ＨＤＤ
１３  ＤＩＭＭ
１４  ＰＣＩｅｘｐｒｅｓｓスイッチ
１５  ＧＰＵ
１６  ＤＩＭＭ
１０１  コア
１０２  メモリアクセスコントローラ
１２１  格納処理部
１２２  読出処理部
１６０  メモリ空間
２１１  データヘッダ生成部
２１２  精度低下処理部
２１３  データバッファ
２１４  データ出力部
２１５  コマンド変換部
２２１  命令分割部
２２２  コマンド変換部
２２３  ヘッダ判定部
２２４  ヘッダ削除部
２２５  精度回復処理部
２２６  データバッファ
２２７  データ出力部
３０１  判定回路
３０２  比較回路
３０３  半減回路
３０４  開始判定回路
３０５  カウンタ
３０６  比較回路
３０７  比較回路
３０８  データ長選択回路
３０９  ＦＦ回路
３１０  ヘッダ出力回路
４０１  半減回路
４０２  後半アドレス生成回路
４０３  比較回路
４０４  アドレス選択回路
４０５  データ長選択回路
５０１  ヘッダ分離回路
５０２  フォーマット変換判定回路
５０３  後半出力判定回路
５０４  データ長抽出回路
５０５  読出開始判定回路
５０６  ＦＦ回路
５０７  半減回路
５０８  カウンタ
５０９  比較回路
５１０  ＦＦ回路
【図１】
2019045968.tif 000003
【図２】
2019045968.tif 000004
【図３】
2019045968.tif 000005
【図４】
2019045968.tif 000006
【図５】
2019045968.tif 000007
【図６】
2019045968.tif 000008
【図７】
2019045968.tif 000009
【図８】
2019045968.tif 000010
【図９】
2019045968.tif 000011
【図１０】
2019045968.tif 000012
【図１１】
2019045968.tif 000013
【図１２】
2019045968.tif 000014