【実施例1】
【0015】
実施例1では、SRAMの消費電力を削減したプロセッサの例を説明する。
【0016】
図1は、SRAMを備えたプロセッサ10の構成を示すブロック図である。プロセッサ10は、複数のプロセッサコアを備えたマルチコアプロセッサであり、CPU110、CPU120、バス130、入出力ユニット140、SRAM150、タイマ160、電圧/周波数制御ユニット170を有している。
【0017】
CPU110は、マスタ・ワーカ方式の並列処理において、マスタの役割をする演算コアであり、CPU120は、ワーカの役割をする演算コアである。CPU120は、命令キャッシュ121とロード/ストアユニット122を有する。
【0018】
命令キャッシュ121は、命令データを格納するキャッシュメモリであり、メモリセルのトランジスタサイズが大きい、又はトランジスタ数が多いなど、低電圧動作においても高信頼に動作できるように作られている。ロード/ストアユニット122は、CPU120のデータをSRAM150へ書込む処理と、SRAM150のデータをCPU120から読出す処理を行うユニットである。
【0019】
バス130は、プロセッサ10に存在する各モジュールを繋ぐユニットである。入出力ユニット140は、プロセッサ10と外部システムを繋ぐユニットである。SRAM150は、CPU110(マスタ)とCPU120(ワーカ)が計算に使用するデータが格納される共有メモリであり、例えば
図2に示すデータを格納する。
【0020】
タイマ160は、時間をカウントするタイマであり、CPU110から受信した低電圧設定値情報201と電圧変更間隔情報202を含む制御情報111に基づいて、電圧/周波数制御ユニット170へ電圧変更指示を含む制御情報161を出力し、CPU110へ電圧変更完了を示す情報を含む割込み情報162を出力する。
【0021】
電圧/周波数制御ユニット170は、プロセッサ10の動作電圧および動作周波数を変更するユニットである。本実施形態では、電圧/周波数制御ユニット170により、CPU110とCPU120の電圧の制御を共通して行うが、異なる電圧/周波数制御ユニットにより独立した制御を行ってもよい。
【0022】
図2は、SRAM150に格納されるデータの一例である。低電圧設定値情報201は、低電圧状態の動作電圧と、該動作電圧でCPU110およびCPU120が動作可能な動作周波数の情報である。電圧変更間隔情報202は、プロセッサ10の動作電圧を変更する時間間隔の情報である。アドレスオフセット情報203は、CPU110がCPU120へ割り当てるSRAM150上の記憶領域のアドレスオフセット情報である。
【0023】
タスク管理情報204は、CPU110がCPU120へ与えるタスクの管理情報であり、どのワーカ(CPU120)がどのタスクを処理していて、全体としてどれだけのタスクが完了しているかなどを示す情報である。タスクキュー205はCPU110がCPU120へ与えるタスクのキューであり、ワーカ(CPU120)はタスクキュー205のタスクが無くなるまで、タスクキュー205からタスクを受け取って処理する。
【0024】
タスク計算結果情報206は、CPU120(ワーカ)が処理したタスクの計算結果の情報であり、計算結果の配置アドレス情報などCPU110(マスタ)が計算結果を取得するための情報である。マスタ作業データ207は、CPU110(マスタ)が処理の途中に生成するデータである。ワーカ作業データ208は、CPU120(ワーカ)が処理の途中に生成するデータである。
【0025】
入力データ209は、計算の対象となる入力データであり、例えば機械学習の教師データとなる画像データである。生存確認情報210は、ワーカの生存状況を確認するための情報である。目標エラー数211は、プロセッサ10がプログラム実行中の所定処理でカウントするエラーデータ数の目標値である。許容エラー数212は、プロセッサ10がプログラム実行中の所定部分の処理でカウントするエラーデータ数において、アプリケーションが許容可能な閾値である。
【0026】
図3は、プロセッサ10において、CPU110(マスタ)とCPU120(ワーカ)により実行される並列処理の例を示すタイムチャートである。まず、CPU110(マスタ)は、標準電圧の状態で、並列処理を行う前までの処理301を行う。その後、処理302においてタスクキュー作成処理とワーカ起動処理321を行う。CPU120(ワーカ)は、ワーカ起動処理311を行い、完了したことをマスタに通知する。全てのワーカ起動完了を確認したマスタは、タイマ160に低電圧設定値情報201と電圧変更間隔情報202を設定し、スリープ処理303を行う。
【0027】
タイマ160は、低電圧設定値情報201に基づいて電圧/周波数制御ユニット170へ動作電圧および動作周波数の設定値変更指示(制御情報161)を出力する。電圧/周波数制御ユニット170は、タイマ160からの設定値変更指示に基づいて動作電圧および動作周波数を変更し、プロセッサ10を低電圧の状態にする。ワーカは、タスクキュー205よりタスクを取得し、入力データ209を用いてタスク処理312を行う。ワーカは、取得したタスクの処理が完了すると、タスク計算結果の格納アドレスをタスク計算結果情報206としてSRAM150に書込み、タスクキュー205から新たなタスクを取得して処理する。ワーカは、タスクキュー205のタスクがなくなるまでこれを繰り返す。
【0028】
タイマ160は、電圧変更間隔情報202に基づいた所定時間経過後に、電圧/周波数制御ユニット170へ標準電圧への設定値変更指示(制御情報161)を出力し、電圧変更後にマスタに割込み情報162を出力する。割込み情報162を受信したマスタは、タスクの進捗状況確認とワーカの生存状況の確認などを行う管理処理304を行う。ここで、あるワーカ(ワーカ2)が低電圧状態でのSRAM150にアクセスし、ポインタのデータが破損するなどによって停止するアクシデント313が発生していた場合、マスタはワーカ2の再起動処理322を実行する。再起動処理322においては、マスタは再起動するワーカが使用するSRAM150上のアドレス領域のオフセット値を変更する。これにより、再起動したワーカ(ワーカ2)は前回とは異なるアドレス領域にアクセスすることになるため、アクシデント313と同一の原因で停止することを回避することができる。
【0029】
生存状況の確認は、SRAM150上の生存確認情報210のデータをワーカが定期的にカウントアップし、マスタがこれを観測するなどによって行うことができる。管理処理304において全てのタスクが完了していなければ、マスタは処理302と同様にタイマ160へ制御情報111を出力し、スリープ処理303を行う。管理処理304において全てのタスクが完了している場合は、ワーカにタスク終了通知323を通知し、後処理305を行う。
【0030】
このようにマスタがSRAM150へアクセスする際には、常にSRAM150の電圧が標準電圧の状態であるようにすることによって、マスタが保有するデータを正しく保持することができる。また、タスクキュー205、タスク計算結果情報206と生存確認情報210はSRAM150上で三重化して保持されており、低電圧状態でも高信頼(訂正処理によって完全にデータ復元が可能である状態)にデータアクセスができる。一方、ワーカがSRAM150にアクセスする際は、SRAM150の電圧を低電圧の状態にすることにより、SRAM150の消費電力を削減することができる。
【0031】
次に、CPU110(マスタ)が再起動するCPU120(ワーカ)が使用するSRAM150上のアドレス領域のデータ配置を変更する手段を、
図4、
図5、
図6を用いて説明する。
図4、
図5、
図6はワーカが使用するアドレス領域のデータ配置を示す図である。マスタは、ワーカ起動時にワーカが作業に使うアドレス領域を実際に割当てるサイズよりも大きく確保し、ワーカへSRAM150上のアドレス領域のオフセット値とインデックス値を設定し、ワーカが使用可能なアドレス領域を割当てる。オフセット値はワーカへ割当てるアドレス領域の物理的な先頭アドレスであり、インデックス値はワーカへ割当てたアドレス領域内の論理的な先頭アドレスである。
【0032】
図4に示すように、マスタは、例えばワーカ1へはアドレス領域401を確保し、アドレス411をオフセット値(先頭アドレス)として設定することでワーカ1へアドレス領域410を割当て、残りのアドレス領域451をマージン領域とする。同様にワーカ2へはアドレス領域402を確保し、アドレス421をオフセット値として設定することでアドレス領域420を割当てる。なお、インデックス値の初期値はゼロとして設定される。マスタが有するワーカのアドレスオフセットに関する情報はアドレスオフセット情報203としてSRAM150に格納され、ワーカが有するオフセット値とインデックス値は該ワーカのロード/ストアユニット122に格納される。
【0033】
ここで、ワーカ2を再起動させる場合、
図5に示すように、マスタはワーカ2のオフセット値をアドレス422に変更して再起動する。これにより、ワーカ2のデータ配置が変更されるため、同一の原因でワーカ2が何度も停止する事象を回避できる。
【0034】
オフセット値変更を行ってもワーカ2が繰り返し停止する場合、マスタは
図6に示すように、ワーカ2のインデックス値を変更する。ワーカ2のロード/ストアユニット122は変更されたインデックス値に従って、アドレス領域420内でデータを配置するアドレスをリングシフトすることによってデータ配置の変更を行う。
図4ではワーカ2のオフセット値がアドレス422と設定されており、インデックス値の変更に従ってアドレス422がワーカ2の論理的な先頭アドレスとなるようにアドレス変換を行った例を示している。
【0035】
このようにデータ配置の変更を行うことによって、再起動したワーカが過去に停止した原因と同一の原因で何度も停止を繰り返すことを回避することができる。
【0036】
次に、
図7と
図8を用いて、プロセッサ10で実行される並列処理を説明する。
図7はプロセッサ10のCPU110(マスタ)が行う処理のフローチャートである。まず、マスタはタスクキュー205作成処理(ステップS701)を実行する。ここで、タスクキュー205内の情報は3重化などによって高信頼化されて書込まれる。これにより、ワーカはSRAM150が低電圧状態でもタスクキュー205から正確な情報を取得できる。タスクキュー205の情報は全体に比べて非常に小さいため、3重化に伴う電力損失は非常に小さい。その後、ワーカ起動処理(ステップS702)を行い、電圧変更処理(ステップS703)としてタイマ160へ低電圧設定値情報201と電圧変更間隔情報202を設定し、スリープ処理(ステップS704)へ移行する。マスタはタイマ160から割込み情報162を受信(ステップS705)すると、スリープ処理を解除し、ステップS706へ移行してワーカ生存確認とワーカ再起動処理を行う。その後、ステップS707としてタスク管理情報204を参照し、タスク処理状況の進捗確認を行い、タスクキュー205の全てのタスクが処理されていたならば、全てのCPU120(ワーカ)に対してタスク終了通知323を出力し、ステップS710へ移行し、タスクキュー205の全てのタスクが処理されていなければ、S703へ移行するという分岐処理(ステップS708)を行う。
【0037】
ステップS710ではワーカが処理したタスクの計算結果が所定のフォーマットを満たしているかのチェックを行う。例えば、教師なし学習の一種であるK−meansクラスタリングのアルゴリズムにおいては、入力データの各要素が所属するクラスタの番号は必ずクラスタ数Kよりも小さくなる。このように、ワーカの計算結果が、計算結果として取りえる値域を満たしているかをチェックする。これにより、マスタがワーカの計算結果を配列の要素番号として使用する際などに、配列オーバフローなどシステムが停止してしまう致命的なエラーを回避することができる。なお、前記所定のフォーマットを満たしていない計算結果は破棄される。
【0038】
ステップS711では、前記所定のフォーマットを満たしていない計算結果の数が目標エラー数211に近づくように、マスタは信頼性を調整する処理を行う。信頼性の調整は低電圧設定値情報201の電圧値を変更することによって行う。破棄されたデータ数が目標エラー数211よりも大きい場合はSRAM150の信頼性を向上させるために、電圧値をより高い値へ設定する。破棄されたデータ数が目標エラー数211よりも小さい場合はSRAM150の電力効率を向上させるために、電圧値をより低い値へ設定する。また、ステップS711として、前記所定のフォーマットを満たしていない計算結果の数が許容エラー数212以上であるとき、ワーカの計算結果を全て破棄し、計算のリトライを行うためにステップS703へ移行する分岐処理を行う。プロセッサ10を備える計算機システムは、低電圧設定値情報201、目標エラー数211、および許容エラー数212をユーザが容易に設定することが可能なAPI(Application Programming Interface)を有している。なお、精度維持のために特に細やかなエラー数調整が必要ない場合、プロセッサ10を備える計算機システムはステップS711を省略することもできる。
【0039】
図8は、
図7のS702でCPU110(マスタ)により起動されたCPU120(ワーカ)が行う処理のフローチャートである。起動したワーカは、ステップS801にてタスクキュー205のタスク進捗状況を確認し、ステップS802として全タスクが完了しているならばステップS820へ移行し、未処理のタスクが残っているならばS810へ移行する。S820ではタスク終了通知323をマスタから受信するまで待機し、ワーカは処理を終了する。S810ではタスクキュー205からタスクを取得し、どのワーカがどのタスクを取得したかが分かるように、取得したタスク識別番号と自身のワーカ識別番号をタスク管理情報204へ書込む。ステップS811として取得したタスクを処理する。ステップS812として処理したタスクの計算結果をSRAM150へ出力すると共に、取得したタスクの処理が完了したことが分かるように、処理を完了したタスク識別番号と自身のワーカ識別番号をタスク管理情報204へ書込む。ここで、タスク管理情報204のデータは3重化などによって高信頼化されて書込まれる。なお、S801からS820までのフローにおいて、ワーカは所定の間隔で生存確認情報210を更新する。
【0040】
以上の構成及び処理により、SRAM内の故障ビットを完全に訂正することなく、システム全体が停止することを回避した低電力なプロセッサ10を実現できる。
【0041】
次に、
図9、
図10、
図11を用いて、プロセッサ10の低電圧設定値情報201と目標エラー数211を設定する手段を説明する。
図7に示したステップS711の信頼性調整処理では、プログラム中にその目標エラー数211を設定する必要がある。プロセッサ10を含む計算機システムをユーザに提供する場合、ユーザがアプリケーションプログラムを意識して目標エラー数211などのパラメータを設定することが困難な場合がある。そのような場合、ユーザはパラメータ調整用プログラム1003を実行することにより、アプリケーションプログラムを意識することなく最適なパラメータを設定できる。パラメータ調整用プログラム1003は、ユーザが準備したパラメータ調整用のテストデータと予め設定された計算結果の精度目標値情報を用いてアプリケーションプログラムをプロセッサ10の上で実行することによって、計算結果の精度が目標値を満たす範囲で電力が最も下がる低電圧設定値情報201を取得し、さらに目標エラー数211を取得する。
【0042】
図9は、プロセッサ10を含む計算機システム1の構成例を示す図である。メモリ20は、DRAMなどで構成されるメモリである。メモリ20には
図10に示す情報が格納される。入出力ユニット30は外部システムと計算機システム1を繋ぐユニットである。バス40は計算機システム1の各コンポーネントを繋ぐバスである。
【0043】
図10は、メモリ20に格納されたデータの一例である。アプリケーションプログラム1001は、パラメータ調整対象となるアプリケーションプログラムである。テストデータ1002は、低電圧設定値情報201と目標エラー数211のパラメータを調整するための入力テストデータである。パラメータ調整用プログラム1003は、アプリケーションプログラム1001の最適パラメータを探索するためのプログラムである。精度目標値情報1004は、許容可能な精度劣化を規定する基準情報である。
【0044】
図11のパラメータ調整用プログラム1003のフローチャートを用いて、ユーザがアプリケーションプログラムを意識することなく、低電圧設定値情報201と目標エラー数211の設定値を取得する方法を説明する。まず、計算機システム1は正解基準データ生成(ステップS1101)を行う。正解基準データは、プロセッサ10の低電圧設定値情報201を標準電圧値として実行する(すなわち、全ての処理を標準電圧で実行する)ことによって得られる高信頼計算時における計算結果であり、低電圧動作を含む高効率計算時の計算結果と比較するために使用されるデータである。
【0045】
ステップS1102で、低電圧設定値情報201のパラメータを電圧値更新幅情報1005だけ小さい値に設定する。すなわち、ここでは標準電圧よりも電圧値更新幅情報1005だけ小さい値に設定される。次にステップS1103でアプリケーションプログラム1001を実行し、低電圧動作を含む高効率計算時の計算結果を得て、ステップS1104で正解基準データとの比較を行い、高効率計算時における計算精度の劣化の度合いを示す計算精度劣化値を取得する。
【0046】
そして、ステップS1105で、前記計算精度劣化値と精度目標値情報1004を比較し、目標とする計算精度を満たしているならばステップS1102へ移行し、低電圧設定値情報201の値をさらに電圧値更新幅情報1005だけ小さい値に設定する。N回目の試行におけるステップS1105の処理において目標とする計算精度を満たしていなければ、N−1回目の試行における低電圧設定値情報201を、アプリケーションプログラム1001における低電圧設定値情報201として得る。さらに、ステップS1110にてN−1回目の試行におけるステップS710(データ健全性チェック)でカウントした破棄データ数の平均値を目標エラー数211として得る。
【0047】
以上の構成及び処理により、ユーザがアプリケーションプログラムを意識することなく、低電圧設定値情報201と目標エラー数211の設定値を取得することができ、要求された計算精度を満たしつつ消費電力を削減した計算機システム1を実現できる。なお、ここでは低電圧設定値情報201を標準電圧から徐々に低下させる例、即ち高い電圧値から徐々に低い電圧値へ変更することによって最適パラメータを得る例を示したが、低い電圧値から徐々に高い電圧値へ変更することによって最適パラメータを得ることも可能である。
【実施例2】
【0048】
実施例2では、DRAMの消費電力を削減した計算機システム3の例を説明する。
【0049】
図12は、本実施例における計算機システム3の構成例である。計算機システム3はプロセッサ1810、プロセッサ1820、バス40、入出力ユニット30、DRAM1830を有している。
図9と同一のコンポーネントには同一の符号を付し、説明は省略する。
【0050】
プロセッサ1810、プロセッサ1820はCPUなどで構成されるプロセッサである。計算機システム3は実施例1と同じくマスタ・ワーカ構成の計算を行う計算機システムであり、プロセッサ1810はマスタ、プロセッサ1820はワーカの役割を担う。メモリ1830は本発明に係るメモリであり、DRAMなど、データの揮発を防ぐためのリフレッシュを必要とする記憶デバイスで構成される。
【0051】
メモリ1830は、
図13に示すように入出力ユニット1910、制御ユニット1920、バス1940、記憶ユニット1930で構成される。 バス1940はメモリ1830内の各コンポーネントを繋ぐためのバスである。入出力ユニット1910はバス40とメモリ1830の内部とつなぐユニットであり通信プロトコルに関する処理を行う。
【0052】
制御ユニット1920はメモリ1830の制御部であり、記憶ユニット1930へのデータ書込み及び読出し処理や、これに伴うECC処理、さらにリフレッシュ処理などを行う。制御ユニット1920は記憶ユニット1921を有する。
【0053】
記憶ユニット1921は、
図14に示すように、第1のリフレッシュレート情報2001と第2のリフレッシュレート情報2002を有する。第1のリフレッシュレート情報2001は記憶ユニット1930の高信頼領域1931のリフレッシュレートであり、第2のリフレッシュレート情報2002は低電力領域1932のリフレッシュレートである。第1のリフレッシュレート情報2001と第2のリフレッシュレート情報2002はプロセッサ1810(マスタ)から設定される。リフレッシュレートが高いほど頻繁にリフレッシュを行うので記憶ユニットの信頼性は向上するが消費電力も増加する。このため、低電力領域1932のリフレッシュレート(第1のリフレッシュレート情報2001)は高信頼領域1931のリフレッシュレート(第2のリフレッシュレート情報2002)よりも低く設定されている。
【0054】
記憶ユニット1930は、DRAMのアレイで構成される記憶デバイスであり、高信頼領域1931と低電力領域1932を有する。高信頼領域1931は保持されるデータの故障ビット数が、制御ユニット1920が実施するECCで正しく訂正可能な範囲内になるように動作を行うアドレス領域である。低電力領域1932は、保持されるデータの故障ビット数が、制御ユニット1920が実施するECCで正しく訂正可能な範囲外になるように動作を行うアドレス領域である。即ち、低電力領域1932に書込まれたデータは、読出し時に誤りを有しながらバス40に出力される。
【0055】
高信頼領域1931が有するデータを
図15に示す。
図15において、
図2と同一のデータには同一の符号を付し、説明を省略する。レート変更間隔情報2102はリフレッシュレートを変更する間隔の情報である。低電力領域1932が有するデータを
図16に示す。
図16において、
図2と同一のデータには同一の符号を付し、説明を省略する。高信頼領域1931はマスタ及びワーカの双方がアクセスする領域であり、計算機システムを制御するためのデータが格納されている。一方、低信頼領域1932はワーカがアクセスする領域であり、画像やテキストなどの入力データや計算の中間データなどが格納されている。
【0056】
次に計算機システム3の処理フローを、
図17に示す計算機システム3の動作フローチャートを用いて説明する。
図17において、
図7と同一の要素については同一の符号を付し、詳しい説明を省略する。
【0057】
並列処理において、マスタはタスクキュー作成処理(ステップS701)を行い、ワーカ起動処理(ステップS702)を行って、所定時間スリープする(ステップS704)。本実施例におけるタスクキュー作成処理では、マスタは高信頼領域1931に作成したタスクキューを格納する。その後、ステップS705では、割込み情報受信や内部タイマに基づいてアクティブ状態に遷移し、ワーカ生存確認と再起動処理(ステップS706)を行い、タスク進捗確認(ステップS707)を行う。そして、全てのタスクが完了していなければステップS704へ移行し、全てのタスクが完了していたならば得られた結果に対してデータ健全性チェック(ステップS710)を行う。ステップS2311では、実施例1におけるステップS711と同様の手段で信頼性調整処理を行う。但し、実施例1における計算機システム1ではデータ信頼性(即ち、データ中の故障ビット数又は故障ビット割合)の調整を電圧変更によって行っていたが、本実施例における計算機システム3ではデータ信頼性の調整を、DRAMのリフレッシュレートの変更によって行う点が異なる(ステップS2311)。即ち、計算機システム3では低電力領域1932のリフレッシュレートを定める第2のリフレッシュレート情報2002を変更することによって信頼性調整を行う。破棄されたデータ数が目標エラー数211よりも大きい場合はDRAM1932の信頼性を向上させるために、リフレッシュレートをより高い値へ設定する。破棄されたデータ数が目標エラー数211よりも小さい場合はDRAM1932の電力効率を向上させるために、リフレッシュレートをより低い値へ設定する。
【0058】
本実施例においても、S702の処理により起動したワーカは
図8の一連の処理を実行するが、低信頼領域1932に格納された入力データ208を対象として処理を実行し、その処理結果であるワーカ作業データ209を低信頼領域に格納する点が実施例1とは異なる。
【0059】
以上の構成及び処理により、DRAM内の故障ビットを完全に訂正することなく、システム全体が停止することを回避した低電力な計算機システム3を実現できる。大容量DRAMを用いるシステムにおいては、DRAMが消費する電力の大部分はリフレッシュのための電力であるため、本実施例における計算機システムにより、DRAMの電力を大きく削減することが可能になる。