IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特許-情報処理装置 図1
  • 特許-情報処理装置 図2
  • 特許-情報処理装置 図3
  • 特許-情報処理装置 図4
  • 特許-情報処理装置 図5
  • 特許-情報処理装置 図6
  • 特許-情報処理装置 図7
  • 特許-情報処理装置 図8
  • 特許-情報処理装置 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-11
(45)【発行日】2023-05-19
(54)【発明の名称】情報処理装置
(51)【国際特許分類】
   G06F 15/177 20060101AFI20230512BHJP
   G06F 11/07 20060101ALI20230512BHJP
【FI】
G06F15/177 Z
G06F11/07 199
【請求項の数】 5
(21)【出願番号】P 2019142773
(22)【出願日】2019-08-02
(65)【公開番号】P2021026429
(43)【公開日】2021-02-22
【審査請求日】2022-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100087480
【弁理士】
【氏名又は名称】片山 修平
(72)【発明者】
【氏名】末安 直樹
(72)【発明者】
【氏名】石井 邦憲
(72)【発明者】
【氏名】橋本 剛
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2017-97795(JP,A)
【文献】特開2009-60410(JP,A)
【文献】特開2004-72271(JP,A)
【文献】特開2015-233178(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/12
G06F 17/16
G06F 15/177
G06F 11/07
(57)【特許請求の範囲】
【請求項1】
複数の送信ノード、演算装置、及び受信ノードを備えた情報処理装置であって、
前記送信ノードは、
複数の前記送信ノードの各々に対応付けられた複数の符号化ベクトルのうち、自身に対応する前記符号化ベクトルを送信データでスカラ倍することにより、前記送信データを符号化した第1のベクトルを算出する第1の算出部と、
前記第1のベクトルを前記演算装置に送信する第1の送信部とを有し、
前記演算装置は、
複数の前記送信ノードの各々が送信した前記第1のベクトル同士を加算した第2のベクトルを算出する第2の算出部と、
前記第2のベクトルを前記受信ノードに送信する第2の送信部とを有し、
前記受信ノードは、
前記送信ノードの各々に対応する前記符号化ベクトルの各成分を係数とする連立一次方程式であって、前記第2のベクトルの各成分を定数項とする連立一次方程式を解くことにより前記送信データを復号する復号部を有する、
ことを特徴とする情報処理装置。
【請求項2】
前記送信データは、ゼロと非ゼロのいずれかを示すデータであることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第1の送信部は、自身を識別する整数値を冪指数とする2の冪乗を前記演算装置に送信し、
前記第2の算出部は、前記送信ノードの各々が送信した前記2の冪乗の総和を算出し、
前記第2の送信部は、前記総和を前記受信ノードに送信し、
前記復号部は、前記総和を2進表記したときに1が立っているビットに対応する冪指数を前記整数値と特定することにより、前記総和から前記整数値を復号することを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第1の送信部は、前記送信データがゼロを示すデータである場合には、前記2の冪乗に代えてゼロを送信することを特徴とする請求項3に記載の情報処理装置。
【請求項5】
複数の前記符号化ベクトルの成分を並べた行列の要素のうち、任意の複数の列番号と、複数の前記列番号に等しい複数の行番号とで特定される複数の要素を備えた正方行列は正則であることを特徴とする請求項1に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置に関する。
【背景技術】
【0002】
分散メモリ型の並列計算機においては、計算ジョブを複数のノードに分散し、各ノードが並列して計算を行うことにより大規模な計算を実行する。各ノードは、ネットワークを介して相互に接続されており、相互にデータを交換しながら並列計算を行う。
【0003】
各ノード間の通信はMPI(Message Passing Interface)を利用して行われる。MPIは、各ノードが相互に通信を行うためのAPI(Application Programming Interface)である。MPIを使用することにより、複数のノードが協調して様々な集団通信を実現できる。
【0004】
例えば、複数のノードのうちの一つを受信ノードとして定めておき、計算が正常に終了しなかった一部のノードが受信ノードにエラーコード送信することにより、計算ジョブが正常終了していないことを受信ノードが判断できる。
【0005】
この場合、エラーコード等のデータの送受信に要する処理時間を短縮するために、送信側のノードがデータを符号化してその情報量を小さくし、受信ノードがデータを復号する方法が提案されている(例えば特許文献1)。しかし、この方法は、代数方程式の根を求めることによりデータを復号しており、復号に要する計算量が膨大となってしまう。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2017-097795号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
一側面によれば、本発明は、計算量を低減することを目的とする。
【課題を解決するための手段】
【0008】
一側面によれば、複数の送信ノード、演算装置、及び受信ノードを備えた情報処理装置であって、前記送信ノードは、複数の前記送信ノードの各々に対応付けられた複数の符号化ベクトルのうち、自身に対応する前記符号化ベクトルを送信データでスカラ倍することにより、前記送信データを符号化した第1のベクトルを算出する第1の算出部と、前記第1のベクトルを前記演算装置に送信する第1の送信部とを有し、前記演算装置は、複数の前記送信ノードの各々が送信した前記第1のベクトル同士を加算した第2のベクトルを算出する第2の算出部と、前記第2のベクトルを前記受信ノードに送信する第2の送信部とを有し、前記受信ノードは、前記送信ノードの各々に対応する前記符号化ベクトルの各成分を係数とする連立一次方程式であって、前記第2のベクトルの各成分を定数項とする連立一次方程式を解くことにより前記送信データを復号する復号部を有する情報処理装置が提供される。
【発明の効果】
【0009】
一側面によれば、計算量を低減できる。
【図面の簡単な説明】
【0010】
図1図1は、検討に使用した並列計算機の構成図である。
図2図2は、本実施形態に係る情報処理装置のハードウェア構成図である。
図3図3は、本実施形態に係る情報処理装置10の機能構成図である。
図4図4は、本実施形態に係る送信ノードが演算装置に送信するデータのフォーマットの一例を示す図である。
図5図5は、本実施形態におけるリダクション操作により得られたデータのフォーマットの一例を示す図である。
図6図6は、本実施形態に係る送信ノードが行う処理について説明するためのフローチャートである。
図7図7は、本実施形態において、総和に基づいて各送信ノードの識別子を復号する処理について説明するためのフローチャートである。
図8図8は、図5の例で得られるidc_listの内容を模式的に示す図である。
図9図9は、本実施形態に係る受信ノードが各送信データを復号する処理について説明するためのフローチャートである。
【発明を実施するための形態】
【0011】
本実施形態の説明に先立ち、本願発明者が検討した事項について説明する。
図1は、検討に使用した並列計算機の構成図である。
【0012】
この並列計算機1は、分散メモリ型の並列計算機であり、複数の送信ノード2、リダクション装置3、及び受信ノード4を有する。
【0013】
このうち、複数の送信ノード2の各々は、計算ジョブを並列して実行する計算機である。並列計算機1の規模にもよるが、送信ノード2の個数は数100~数10万程度である。これらの大部分の送信ノード2においては計算ジョブが正常に終了するが、数個程度の送信ノード2では計算ジョブの実行中に異常が発生する場合がある。そのような異常としてはハードウェアの障害やオーバーフロー等がある。
【0014】
異常が発生した送信ノード2は、その異常を識別するエラーコードを送信データとしてリダクション装置3に送信する。ここでは、エラーコードは整数値とする。例えば、計算時にオーバーフローが生じた場合のエラーコードは「2」とし、ハードウェアの障害によって計算が終了した場合のエラーコードは「3」等とする。
【0015】
なお、計算が正常に終了した送信ノード2は、乗法の単位元である「1」をエラーコードとして送信する。
【0016】
リダクション装置3は、送信ノード2からエラーコードを受信し、そのエラーコードに対してMPIのリダクション操作を行う装置である。リダクション装置3が行うリダクション操作にはReduceとAllreduceとがある。Reduceは、エラーコードに対して種々の演算を行い、その演算結果をリダクション装置3のみが保有する操作である。また、Allreduceは、その演算結果を複数の送信ノード2に共有させる操作である。
【0017】
この例では、リダクション装置3は、異常が発生した全ての送信ノード2のエラーコードの総積を求める乗法のReduceを行うものとする。例えば、異常が発生した三つの送信ノード2がそれぞれ「2」、「3」、「2」のエラーコードを送信し、残りの正常な送信ノード2がエラーコードとして「1」を送信した場合を考える。この場合は、リダクション装置3は、これらのエラーコードの総積として12(=2×3×2)を得る。
【0018】
そして、受信ノード4は、リダクション装置3からエラーコードの総積を受信し、その総積から以下のようにエラーコードを求める。
【0019】
まず、送信ノード2の個数をkとし、i番目の送信ノード2が整数値のエラーコードEiを生成する。また、相異なるk個の整数Ai(i=1, …, k)を予め用意しておき、これらの整数を全ての送信ノード2に配布しておく。
【0020】
この場合、i番目の送信ノード2は、リダクション装置3にk個のデータA1+Ei、A2+Ei、…、Ak+Eiを送信する。
【0021】
リダクション装置3は、全ての送信ノード2が送信したこれらのデータに対して以下の式(1)のリダクション操作を行うことによりk個の値G(Ai)を算出し、これらの値の各々を受信ノード4に送信する。
【0022】
【数1】
【0023】
ここで、式(1)の整数Aiを未知数Xに置き換えた式(2)を考える。
【0024】
【数2】
【0025】
F(X):=G(-X)とすると、代数方程式F(X)=0の根はエラーコードEi(i=1, …, k)となる。これを利用して、受信ノード4は、リダクション装置3から受信したk個の値G(Ai)を用いてエラーコードEi(i=1, …, k)を復号する。
【0026】
以上説明した並列計算機1によれば、受信ノード4が代数方程式F(X)=0の根を求めることにより、k個の送信ノード2が送信したエラーコードEi(i=1, …, k)を復号することができる。
【0027】
特に、この例では、異常が発生した一部の送信ノード2のみが通信に参加する。このような通信は情報集約型通信とも呼ばれる。情報集約型通信では、全ての送信ノード2が通信に参加する場合と比較して通信速度が高速になることが期待できる。
【0028】
しかしながら、この方法では、代数方程式の根を求めるために膨大な計算量が必要となり、受信ノード4が高速にエラーコードEi(i=1, …, k)を復号することができない。
【0029】
以下に、復号に要する計算量を低減することができる本実施形態について説明する。
【0030】
(本実施形態)
[ハードウェア構成]
図2は、本実施形態に係る情報処理装置のハードウェア構成図である。
【0031】
この情報処理装置10は、分散メモリ型の並列計算機であり、ノード11、中継装置12、及び演算装置13をそれぞれ複数備える。
【0032】
このうち、複数のノード11の各々は、計算ジョブを並列実行する計算機である。ノード11の個数は特に限定されないが、例えば数100~数10万程度の個数のノード11が情報処理装置10に設けられる。
【0033】
また、各ノード11は、プロセッサ14とメモリ15とを備えており、プロセッサ14とメモリ15が協働して計算ジョブを実行する。なお、プロセッサ14は、CPU(Central Processing Unit)やGPU(Graphical Processing Unit)等のような計算機能を備えたハードウェアである。また、メモリ15は、DRAM(Dynamic Random Access Memory)等の揮発性メモリである。
【0034】
更に、各ノード11はネットワークインターフェース16を有しており、そのネットワークインターフェース16を介して各ノード11と中継装置12とが接続される。
【0035】
中継装置12は、例えばスイッチやルータであり、各ノード11と演算装置13とを相互に接続する。また、この例では、複数の中継装置12の各々がネットワークを介して相互に接続される。そのネットワークとしては、例えばLAN(Local Area Network)がある。
【0036】
演算装置13は、各ノード11からエラーコードを受信し、そのエラーコードに対してMPIのリダクション操作を行うリダクション装置である。演算装置13が行うリダクション操作としては、例えば前述のReduceとAllreduceとがある。また、演算装置13は、プロセッサ17とメモリ18とを有しており、これらが協働することによりリダクション操作が行われる。
【0037】
なお、プロセッサ17は、CPUやGPU等のようなハードウェアである。そして、メモリ18は、DRAM等の揮発性メモリである。
【0038】
また、この例では、ノード11の筐体とは別の筐体に演算装置13を収容する。そのような演算装置13は独立筐体型の演算装置とも呼ばれる。なお、ノード11の筐体に収容されたノード内蔵型の演算装置13を用いてもよい。
【0039】
[機能構成]
図3は、本実施形態に係る情報処理装置10の機能構成図である。
図3に示すように、情報処理装置10は、複数の送信ノード21、受信ノード22、及び演算装置13を備える。
【0040】
この例では、複数のノード11(図2参照)のうちの一つを受信ノード22とし、残りのノード11を送信ノード21とする。また、送信ノード21の個数をN個とし、各送信ノード21をnode0~nodeN-1で表す。
【0041】
これらの送信ノード21の各々には、識別子id0~idN-1と識別符号idcode0~idcodeN-1が予め割り当てられる。
【0042】
このうち、識別子id0~idN-1は、各送信ノード21を一意に識別する数値である。以下では、idr=rとなるように、識別子id0~idN-1として0~N-1の整数値を各送信ノード21に割り当てる。
【0043】
また、識別符号idcode0~idcodeN-1は、識別子id0~idN-1の各々を符号化した値である。符号化の方法は特に限定されない。本実施形態では、idr=rの場合、rを冪指数とする2の冪乗「2r」を識別符号idcoderとする。
【0044】
更に、送信ノード21の各々には、N個の符号化ベクトルencdvec(node0)~encdvec(nodeN-1)が対応付けられる。符号化ベクトルencdvec(node0)~encdvec(nodeN-1)は、送信ノード21の送信データを符号化するためのベクトルであり、情報処理装置10の起動時や計算ジョブの開始時に各送信ノード21のメモリ15に格納される。
【0045】
ここでは、符号化ベクトルencdvec(node0)~encdvec(nodeN-1)の成分は整数とする。また、符号化ベクトルencdvec(nodei)(i=0, …, N-1)の次元数kは、送信ノード21の個数N以下である。
【0046】
以下では、N個の符号化ベクトルencdvec(nodei)(i=0, …, N-1)が張るベクトル空間をVとし、その基底ベクトルをe0、e2、…eN-1とする。
【0047】
ここで、N個の符号化ベクトルから任意のj(≦k)個を以下の式(3)のように選ぶ。
【0048】
【数3】
【0049】
また、以下の式(4)のようにj個の基底ベクトルが張るVの部分空間をUとする。
【0050】
【数4】
【0051】
任意のv ∈ VのUへの正射影をπとすると、式(3)の各符号化ベクトルのUへの正射影πは次のようになる。
【0052】
【数5】
【0053】
本実施形態では、式(5)のj個の符号化ベクトルの各々が一次独立となるようにN個の符号化ベクトルencdvec(nodei)(i=0, …, N-1)を予め定めておく。これにより、各符号化ベクトルの成分を要素とする行列について以下の性質が成り立つ。
【0054】
まず、N個の符号化ベクトルencdvec(nodei)(i=0, …, N-1)の各々を次の式(6)のように成分表示する。
【0055】
【数6】
【0056】
そして、各成分を要素とするN行k列の行列A0を次の式(7)で定義する。
【0057】
【数7】
【0058】
この行列A0を以下では符号化行列と呼ぶ。符号化行列A0のk個の列からj(≦k)個を任意に選択し、選択した列番号を式(5)に倣ってi0、i1、…ij-1とする。そして、以下の式(8)のように、αst(s= i0、i1、…ij-1, t= i0、i1、…ij-1)をs行t列の成分に持つj行j列の小行列をAとする。
【0059】
【数8】
【0060】
このとき、式(5)の各符号化ベクトルが一次独立であるから、j×jの正方行列である小行列Aは正則となる。よって、N個の符号化ベクトルencdvec(nodei)(i=0, …, N-1)を予め定めるということは、式(7)の符号化行列から任意に選んだ小行列Aが正則になるように、式(7)の符号化行列A0を定めることに他ならない。
【0061】
この条件が満たされる限り、符号化ベクトルencdvec(nodei)の決め方は特に限定されない。
【0062】
例えば、encdvec(noden) = (1, res(i), res(i2), …res(ik-1))(i = 0, …, N-1)となるように符号化ベクトルencdvec(nodei)を生成してもよい。なお、res(z)は、N以上の最小の素数pでzを割ったときの余りである。この場合、res(z)は、0≦res(z)≦p-1を満たす剰余でもよいし、絶対値最小剰余sであってもよい。絶対値最小剰余sは、-(p-1)/2≦s≦(p-1)/2を満たす剰余である。
【0063】
これらの剰余により得られるN個の符号化ベクトルのうちから任意のk個を選択し、その各成分を並べてk×kの正方行列を作成すると、その正方行列はVandermonde行列となる。よって、これにより得られた符号化ベクトルは、前述の式(7)、(8)で説明した条件を自動的に満たすことができる。
【0064】
なお、(1, res(i), res(i2), …res(ik-1))は、各成分を標数がpの有限体Fp(=Z/Zp)の要素と同一視すると、(1, i, i2, …、ik-1)と簡潔に表現することができる。
【0065】
また、素数pは、情報処理装置10の起動時や計算ジョブの開始時に各送信ノード21のメモリ15に格納しておけばよい。
再び図3を参照する。
【0066】
各々の送信ノード21は、実行部31、第1の算出部32、及び第1の送信部33を有する。これらの各部は、プロセッサ14とメモリ15が協働して本実施形態に係る情報処理プログラムを実行することにより実現される。
【0067】
このうち、実行部31は、各送信ノード21に割り振られた計算ジョブを実行する。また、nodei(i = 0, …, N-1)における実行部31は、自身に割り当てられた計算ジョブが異常により終了したかを示すエラーコードEiを出力する。そのような異常としてはハードウェアの障害やオーバーフロー等がある。
【0068】
この例ではエラーコードEiを整数値とする。そして、異常がある場合にはエラーコードEiを非ゼロの値とすると共に、異常の種別に応じてその値を変える。例えば、計算時にオーバーフローが生じた場合のエラーコードは「1」とし、ハードウェアの障害によって計算が終了した場合のエラーコードは「2」等とする。
一方、異常がない場合にはエラーコードEiをゼロにする。
【0069】
なお、実行部31は、自装置の計算負荷が閾値を超えたときにエラーコードEiを出力してもよい。この場合、実行部31は、計算負荷が閾値を超えていない場合にはエラーコードEiとしてゼロを出力し、計算負荷が閾値を超えた場合に非ゼロのエラーコードEiを出力すればよい。例えば、エラーコードEiとして、計算負荷が閾値を超えた時刻を実行部31が出力してもよい。
【0070】
また、i番目(i= 0, …, N-1)の送信ノード21の第1の算出部32は、複数の符号化ベクトルのうちで自身に対応する符号化ベクトルencdvec(nodei)に送信データDiをスカラ倍した第1のベクトルVi = Di・encdvec(nodei)を算出する。これにより、送信データDiが符号化されることになる。
【0071】
送信データDiは特に限定されないが、この例ではエラーコードEiを送信データDiとする。これにより、計算ジョブが正常に終了した送信ノード21の送信データDiはゼロとなり、計算ジョブが異常終了した送信ノード21の送信データDiは非ゼロとなる。
【0072】
そして、i番目(i= 0, …, N-1)の送信ノード21の第1の送信部33は、送信データDiがゼロでない場合には、識別符号idcodeiの「2i」と、第1のベクトルViとを演算装置13に送信する。なお、送信データDiゼロの場合には、第1の送信部33は、識別符号idcodeの「2i」に代えてゼロを演算装置13に送信する。
【0073】
一方、演算装置13は、第1の受信部35、第2の算出部36、及び第2の送信部37を有する。これらの各部は、プロセッサ17(図2参照)とメモリ18が協働して本実施形態に係る情報処理プログラムを実行することにより実現される。
【0074】
このうち、第1の受信部35は、N個の送信ノード21の各々から第1のベクトルVi(i = 0, …, N-1)を受信する。更に、第1の受信部35は、各々の送信ノード21から識別符号idcodeの「2i」を受信する。
【0075】
そして、第2の算出部36は、MPIの加法のリダクション操作により、N個の第1のベクトルVi同士を加算した第2のベクトルW(= V1+V2+ … + VN)を算出する。なお、前述のように、計算ジョブが正常に終了した送信ノード21においては第1のベクトルViはゼロベクトルとなる。よって、第2のベクトルWは、N個の送信ノード21のうちで計算ジョブが異常終了した一部の送信ノード21における第1のベクトルViの和となる。
【0076】
更に、第2の算出部36は、N個の送信ノード21が送信した識別符号idcodeiの「2i」の総和Sを算出する。計算ジョブが正常に終了した送信ノード21は「2i」に代えてゼロを送信するが、総和Sにゼロは寄与しない。よって、総和Sは、N個の送信ノード21のうちで計算ジョブが異常終了した一部の送信ノード21における識別符号idcodeiの「2i」の総和となる。
【0077】
そして、第2の送信部37は、第2のベクトルWと総和Sとを受信ノード22に送信する。
【0078】
その受信ノード22は、第2の受信部38と復号部39とを有する。これらの各部は、プロセッサ14(図2参照)とメモリ15が協働して本実施形態に係る情報処理プログラムを実行することにより実現される。
【0079】
また、受信ノード22のメモリ15には前述の符号化行列A0が予め格納される。メモリ15に符号化行列A0を格納するタイミングは特に限定されず、例えば情報処理装置10の起動時や計算ジョブの開始時にメモリ15に格納される。
【0080】
また、第2の受信部38は、演算装置13から第2のベクトルWを受信する。
【0081】
そして、復号部39は、第2のベクトルWを用いて送信データDiを以下のように復号する。
【0082】
まず、復号部39は、2進表記された総和Sを利用して、ゼロベクトルではない第1のベクトルViを送信した送信ノード21を以下のように特定する。
【0083】
例えば、識別子idiが1、3、5の送信ノード21における送信データDiが非ゼロであり、これらの送信ノード21がゼロベクトルではない第1のベクトルViを送信した場合を考える。なお、識別子idiが1、3、5以外の送信ノード21における送信データDiはゼロであり、これらの送信ノード21は2の冪乗に代えてゼロを送信したものとする。
【0084】
この場合、識別子idiが1、3、5以外の送信ノード21が送信したゼロは総和Sに寄与しないため、総和Sは21+23+25となる。これを2進表記すると101010となる。この2進表記において1が立っているビットの冪指数は1、3、5であり、これは識別子idiに等しい。これにより、復号部39は、非ゼロの送信データを送信した送信ノード21の識別子idiを総和Sから復号することができる。
【0085】
次に、復号部39は、このように復号した識別子idiと符号化行列A0とを利用して以下のように小行列Aを生成する。まず、復号部39は、符号化行列A0の各成分のうち、行番号と列番号が識別子idiに等しい小行列Aを生成する。例えば、上記のように識別子idiが1、3、5の場合は、αij(i= 1、3、5, j= 1、3、5)で作られる3×3の行列が小行列Aとなる。
【0086】
なお、その小行列Aの各成分は、識別子idiが1、3、5の各々の符号化ベクトルの成分に等しい。よって、復号部39は、識別子idiが1、3、5の各々に対応する符号化ベクトルの成分を用いて小行列Aを生成したことになる。
【0087】
そして、復号部39は、次の式(9)で表される連立一次方程式を解くことにより送信データDiを復号する。
【0088】
【数9】
【0089】
なお、式(9)において、w1, w2, …wkは、第2のベクトルWの各成分を表す。
【0090】
式(9)の解(x1, x2,…,xk)が送信データ(D1, D2,…,Dk)に等しいことは次のように理解される。
【0091】
まず、第2のベクトルWは、符号化ベクトルに送信データをスカラ倍してなる複数の第1のベクトルViを足し合わせて得られるため、次の式(10)が成り立つ。
【0092】
【数10】
これと式(9)を合わせると次の式(11)が得られる。
【0093】
【数11】
【0094】
前述のように小行列Aは正則であるから逆行列を持つ。その逆行列を式(11)の両辺に左からかけることにより、解(x1, x2,…,xk)が送信データ(D1, D2,…,Dk)に等しいことが分かる。よって、式(9)を解くことにより送信データ(D1, D2,…,Dk)が得られることになる。
【0095】
式(9)の解法は特に限定されず、例えばガウスの消去法等により復号部39が式(9)を解けばよい。
【0096】
以上説明した情報処理装置10によれば、受信ノード22の復号部39が式(9)の連立一次方程式を解くことにより送信データDiを復号する。連立一次方程式を解くのに要する計算量は、式(2)の代数方程式を解くのに要する計算量と比較して少ないため、受信ノード22が高速に送信データDiを復号することができる。
【0097】
また、送信データDiとして非ゼロとゼロのいずれかの値をとるデータを採用したため、送信データDiが非ゼロの送信ノード21に対応した符号化ベクトルの各成分のみで小行列Aが生成される。その小行列Aを係数行列とする連立一次方程式(9)を解くと非ゼロの送信データのみが復号される。よって、値がゼロの送信データDiを不必要に復号する必要がなくなり、計算量を更に低減することができる。
【0098】
更に、このように計算量が低減すると、送信データDiとしてエラーコードを採用した場合に、異常のある送信ノード21でどのようなエラーが発生したのかを受信ノード22が速やかに特定することができる。
【0099】
しかも、識別符号idcodeiとして2の冪乗「2i」を採用することにより、その総和Sから識別子idiを復号することができる。特に、送信データDiの値がゼロの場合に、送信ノード21が2の冪乗「2r」に代えてゼロを送信することにより、非ゼロの送信データDiを送信した送信ノード21の識別子idiを復号することができる。
【0100】
[具体例]
次に、本実施形態の具体例について説明する。
この例では各パラメータを以下の値とする。
・送信ノード21の個数N: 128個
・非ゼロのエラーコードを送信する送信ノード21の個数: 3個
・非ゼロのエラーコードを送信する送信ノード21の識別子id: 0、1、127
【0101】
また、符号化ベクトルencdvec(nodei)(i = 0, …, N-1)は、encdvec(nodei) = (1, res(i), res(i2), …res(ik-1))で定義する。なお、res(z)は、前述のようにN以上の最小の素数pでzを割ったときの余りである。この例ではN=128であるため、p=131となる。また、k=3とする。
この場合、各送信ノード21の符号化ベクトルは次のようになる。
【0102】
・encdvec(node0) = (1,res(0),res(02)) = (1, 0, 0)
・encdvec(node1) = (1,res(1),res(12)) = (1, 0×131 + 1, 0×131+1) = (1,1,1)
・encdvec(node127) = (1,res(127),res(1272)) = (1,res(0×131 + 127),res(123×131 + 16)) = (1,127,16)
【0103】
また、送信データDiは以下の通りとする。
・D0 = 15
・D1 = 18
・D127 = 3
【0104】
この場合、送信データDiを符号化した第1のベクトルVi = Di・encdvec(nodei)は次のようになる。
・V0 = D0・encdvec(node0) = 15・(1, 0, 0) = (15, 0, 0)
・V1 = D1・encdvec(node1) = 18・(1, 1, 1) = (18, 18, 18)
・V127 = D127・encdvec(node127) = 3・(1, 127, 16) = (3, 381, 48)
【0105】
図4は、各送信ノード21が演算装置13に送信するデータのフォーマットの一例を示す図である。
【0106】
図4に示すように、各送信ノード21が送信するデータは、識別符号部51と符号化ペイロード52とを有する。
【0107】
このうち、識別符号部51は、各送信ノード21の識別符号idcodeiを格納する領域である。なお、送信データDiの値がゼロの送信ノード21においては、識別符号idcodeiに代えてゼロが識別符号部51に格納される。例えば、計算が正常に終了してエラーコードEiがゼロとなった送信ノード21においてはゼロが識別符号部51に格納される。
【0108】
また、この例では、識別符号部51をword1とword2に分ける。なおword1とword2の長さはいずれも64bitである。そして、識別子idiが0~63の識別符号idcodeiをword1に格納する。
【0109】
一方、識別子idiが64~127の送信ノード21については、識別子idiから64を減じた値を冪指数とする2の冪乗を識別符号idcodeiとし、そのidcodeiをword2に格納する。例えば、識別子idが127の送信ノード21については、「263(=2127-64)」を当該ノードの識別符号idcode127としてword2に格納する。
【0110】
そして、符号化ペイロード52は、各送信ノード21の第1のベクトルViを格納する領域である。ここでは、符号化ペイロード52をword1~word3に分け、これらの各々に第1のベクトルViの第1成分、第2成分、及び第3成分を格納する。なお、word1~word3の長さはいずれも64bitである。
【0111】
また、送信データDiの値がゼロの送信ノード21においては第1のベクトルViはゼロベクトルとなるため、word1~word3の各々には「0」が格納される。
【0112】
演算装置13は、このようなデータを全ての送信ノード21から受信し、前述のような加法によるリダクション操作を行う。そのリダクション操作により、第2のベクトルWと総和Sとが算出されることになる。
【0113】
図5は、そのリダクション操作により得られたデータのフォーマットの一例を示す図である。
【0114】
このデータは、リダクション操作を終えた後に演算装置13のメモリ18(図2参照)に格納されるデータであり、識別符号部53と符号化ペイロード54とを有する。
【0115】
このうち、識別符号部53はword1とword2に分けられる。そして、word1に、識別子idiが0~63の送信ノード21の識別符号idcodeiの総和が格納される。また、word2には、識別子idiが64~127の送信ノード21の識別符号idcodeiの総和が格納される。
【0116】
一方、符号化ペイロード54はword1~word3に分けられる。word1は、第2のベクトルWの第1成分を格納する領域である。同様に、word2とword3は、それぞれ第2のベクトルWの第2成分と第3成分を格納する領域である。
【0117】
受信ノード22は、これらのデータを受信して、式(9)と同様に以下の式(12)の連立一次方程式を解く。
【0118】
【数12】
【0119】
なお、式(12)の左辺の係数行列は、encdvec(node0) = (1, 0, 0)、encdvec(node1) = (1,1,1)、encdvec(node127) = (1,127,16)の各符号化ベクトルを並べることにより受信ノード22が生成する。
【0120】
式(12)の解は、x1 = 15、x2 = 18、x3 = 3となる。以上により、各送信データD0(= 15)、D1(= 18)、D127 (= 3)を復号できたことになる。
[フローチャート]
【0121】
次に、本実施形態に係る情報処理方法についてフローチャートを参照しながら説明する。
【0122】
図6は、送信ノード21が行う処理について説明するためのフローチャートである。
【0123】
まず、ステップS1において、各送信ノード21の第1の算出部32が、送信すべき送信データDiがあるかどうかを判断する。例えば、識別子idiを有する送信ノード21においては、エラーコードEiがゼロのときに送信すべきデータはない(NO)と判断される。一方、エラーコードEiが非ゼロのときには、送信すべきデータはある(YES)と判断される。
ここでYESと判断された場合にはステップS2に移る。
【0124】
ステップS2においては、第1の算出部32が第1のベクトルViを算出することにより、送信データDiを符号化する。例えば、識別子idiを有する送信ノード21においては、第1の算出部32が符号化ベクトルencdvec(nodei)を送信データDiでスカラ倍することにより第1のベクトルViを算出する。
【0125】
次に、ステップS3に移り、第1の送信部33が、識別符号部51(図4参照)に識別符号idcodeiを格納する。例えば、識別子idiを有する送信ノード21においては、第1の送信部33が「2i」を識別符号部51に格納する。
【0126】
次いで、ステップS4に移り、識別子idiを有する送信ノード21の第1の送信部33が第1のベクトルViの各要素を符号化ペイロード52(図4参照)に格納する。
【0127】
一方、ステップS1においてNOと判断された場合にはステップS5に移る。
【0128】
ステップS5においては、識別子idiを有する送信ノード21の第1の送信部33が識別符号部51(図4参照)に「0」を格納する。
【0129】
次に、ステップS6に移り、識別子idiを有する送信ノード21の第1の送信部33が符号化ペイロード52(図4参照)に「0」を格納する。
【0130】
上記のようにしてステップS4やステップS6を行った後はステップS7に移る。
【0131】
ステップS7においては、全ての送信ノード21の各々が識別符号部51と符号化ペイロード52の各データを演算装置13に送信する。
以上により、送信ノード21の処理を終える。
【0132】
次に、これらのデータを受信した受信ノード22の処理について説明する。前述のように、受信ノード22が行う処理としては、識別符号idcodeiの総和Sに基づいて各送信ノード21の識別子idiを復号する処理と、第2のベクトルWに基づいて各送信データDiを復号する処理とがある。
まず、前者の処理について説明する。
【0133】
図7は、総和Sに基づいて各送信ノード21の識別子idiを復号する処理について説明するためのフローチャートである。
【0134】
まず、ステップS11において、復号部39が、識別符号部53(図5参照)のword1を変数idc_wordに代入する。変数idc_wordは、識別符号部53のword1とword2の各々において1が立っているビットを特定するための作業用の変数である。
【0135】
次に、ステップS12に移り、復号部39が、読み込んだword数を格納するための変数idc_word_countに1を代入する。
【0136】
続いて、ステップS13に移り、復号部39がidc_listに空リストを代入する。idc_listは、復号した識別子idiを格納するためのリストである。
【0137】
次いで、ステップS14に移り、復号部39が、変数idc_word内に1が立っているビットが存在するかどうかを判断する。
ここでYESと判断された場合にはステップS15に移る。
【0138】
ステップS15では、復号部39が、変数idc_word内において1が立っているビットを特定し、そのビットに対応する冪指数を識別子idiとしてidc_listに追加する。
【0139】
図5の例では、識別符号部53のword1が「3」であり、これを二進表記すると11となる。よって、0と1が識別子idiであると特定されることになる。
【0140】
次に、ステップS16に移り、復号部39が、識別符号部53のword2を変数idc_wordに代入する。なお、ステップS14においてNOと判断された場合にはステップS15をスキップしてステップS16を行う。
【0141】
次いで、ステップS17に移り、復号部39が、変数idc_word_countを1だけインクリメントする。
【0142】
続いて、ステップS18に移り、復号部39が、変数idc_wordが識別符号部53の最後のwordかどうかを判断する。例えば、復号部39は、変数idc_word_countの値が2のときに、変数idc_wordが識別符号部53の最後のwordである(YES)と判断する。そして、変数idc_word_countの値が2よりも小さいときは、復号部39は、変数idc_wordが識別符号部53の最後のwordではない(NO)と判断する。
【0143】
ここでNOと判断された場合にはステップS14に戻る。一方、YESと判断された場合には処理を終える。
【0144】
このように図7のフローチャートに従って処理を行うことにより、送信ノード21の識別子idiが格納されたidc_listが完成する。
【0145】
図8は、図5の例で得られるidc_listの内容を模式的に示す図である。この例では、id0 = 0、id1 = 1、id127 = 127の各識別子がidc_listに格納される。
【0146】
以上のように、本実施形態では、識別子idiを冪指数とする2のべき乗「2i」の総和Sを算出し、その総和Sにおいて1が立っているビットを特定することにより、識別子idiを簡単に復号することができる。
【0147】
次に、受信ノード22が第2のベクトルWに基づいて各送信データDiを復号する処理について説明する。
【0148】
図9は、受信ノード22が各送信データDiを復号する処理について説明するためのフローチャートである。
【0149】
まず、ステップS21において、受信ノード22の復号部39が、idc_listに格納されている各識別子idiを昇順に整列する。なお、昇順に代えて降順に各識別子idiを整列してもよい。
【0150】
次に、ステップS22に移り、復号部39が、各識別子idiに対応した符号化ベクトルを生成する。符号化ベクトルは、式(7)の符号化行列A0から生成することができる。例えば、idc_listに格納されている識別子idをi1、i2、…ijとする。また、符号化行列A0の要素をαijとする。このとき、αst(s= i1、i2、…ij, j= i1、i2、…ij)で作られるj×jの小行列Aの各列が、符号化ベクトルencdvec(nodei1)、encdvec(nodei2)、…encdvec(nodeij)となる。
【0151】
次いで、ステップS23に移り、復号部39が、符号化ベクトルencdvec(nodei1)、encdvec(nodei2)、…encdvec(nodeij)を並べることにより小行列Aを生成する。
【0152】
次に、ステップS24に移り、復号部39が、連立一次方程式ソルバの係数行列に小行列Aを代入する。連立一次方程式ソルバは、受信ノード22のプロセッサ14とメモリ15が協働して実行するプログラムであり、例えばガウスの消去法により連立一次方程式を解くプログラムである。
【0153】
その連立一次方程式は、式(9)に示したように、小行列Aを係数行列とし、かつ第2のベクトルWの各成分をw1, w2, …wkを定数項とする方程式である。
【0154】
次いで、ステップS25に移り、復号部39が、連立一次方程式ソルバの定数項に第2のベクトルWの各成分w1, w2, …wkを代入する。例えば、復号部39は、符号化ペイロード54(図5参照)のword1、word2、word3の各々に格納されている第2のベクトルWの各成分を連立一次方程式ソルバの定数項に代入する。
【0155】
そして、ステップS26に移り、復号部39が連立一次方程式ソルバを実行する。
【0156】
次いで、ステップS27に移り、復号部39が連立一次方程式を解いて得られた解を昇順に並べ、それらを送信データDiであると特定する。
以上により、送信データDiを復号する処理を終了する。
【0157】
上記した本実施形態によれば、ステップS26において、式(9)の連立一次方程式を解くことにより送信データを復号する。代数方程式と比較して連立方程式は少ない計算量で解けるため、高速に送信データを復号できる。
【0158】
更に、本実施形態では分解能kを大きくすることも可能となる。分解能kは、送信データDiを復号することが可能な送信ノード21の最大個数である。例えば、分解能kを超える個数の送信ノード21が送信データDiを送信した場合には送信データDiを復号することができない。
分解能kが大きくなることは以下のように理解できる。
【0159】
まず、符号化ベクトルを生成するための素数をp、送信データDiのビット数をaとする。このとき、符号化ペイロード52(図4参照)のword1~word3の各々に格納されるデータのビット数はa+log2pで抑えられる。また、符号化ペイロード54(図5参照)のword1~word3のビット数をLとすると、a+log2p+log2k≦Lであれば、リダクション操作中にオーバーフローが発生しないことが保証される。
【0160】
一方、図1の例でオーバーフローを発生させないためにはk≦L/aである必要がある。データ長としてa=16、L=64を想定すると、図1の例ではk≦4となってしまう。
【0161】
これに対し、本実施形態ではk≦248/pであり、p≦246の範囲であれば図1の例よりも分解能kを大きくすることができる。
【0162】
これにより、本実施形態では復号可能な送信データDiの個数を図1の例よりも多くすることができ、多くの送信ノード21が送信データDiを送信した場合でもそれらを復号することが可能となる。
【0163】
以上説明した各実施形態に関し、更に以下の付記を開示する。
【0164】
(付記1) 複数の送信ノード、演算装置、及び受信ノードを備えた情報処理装置であって、
前記送信ノードは、
複数の前記送信ノードの各々に対応付けられた複数の符号化ベクトルのうち、自身に対応する前記符号化ベクトルを送信データでスカラ倍することにより、前記送信データを符号化した第1のベクトルを算出する第1の算出部と、
前記第1のベクトルを前記演算装置に送信する第1の送信部とを有し、
前記演算装置は、
複数の前記送信ノードの各々が送信した前記第1のベクトル同士を加算した第2のベクトルを算出する第2の算出部と、
前記第2のベクトルを前記受信ノードに送信する第2の送信部とを有し、
前記受信ノードは、
前記送信ノードの各々に対応する前記符号化ベクトルの各成分を係数とする連立一次方程式であって、前記第2のベクトルの各成分を定数項とする連立一次方程式を解くことにより前記送信データを復号する復号部を有する、
ことを特徴とする情報処理装置。
(付記2) 前記送信データは、ゼロと非ゼロのいずれかを示すデータであることを特徴とする付記1に記載の情報処理装置。
(付記3) 複数の前記送信ノードの各々は、計算ジョブを並列実行する実行部を更に有し、
前記実行部は、前記計算ジョブが異常終了したときに非ゼロを示す前記送信データを出力し、前記計算ジョブが正常に終了したときにゼロを示す前記送信データを出力することを特徴とする付記2に記載の情報処理装置。
(付記4) 前記第1の送信部は、自身を識別する整数値を冪指数とする2の冪乗を前記演算装置に送信し、
前記第2の算出部は、前記送信ノードの各々が送信した前記2の冪乗の総和を算出し、
前記第2の送信部は、前記総和を前記受信ノードに送信し、
前記復号部は、前記総和を2進表記したときに1が立っているビットに対応する冪指数を前記整数値と特定することにより、前記総和から前記整数値を復号することを特徴とする付記1に記載の情報処理装置。
(付記5) 前記第1の送信部は、前記送信データがゼロを示すデータである場合には、前記2の冪乗に代えてゼロを送信することを特徴とする付記4に記載の情報処理装置。
(付記6) 前記復号部は、特定した前記整数値が割り当てられた前記送信ノードに対応する前記符号化ベクトルの成分を用いて前記連立一次方程式の前記係数を生成することを特徴とする付記4に記載の情報処理装置。
(付記7) 複数の前記符号化ベクトルの成分を並べた行列の要素のうち、任意の複数の列番号と、複数の前記列番号に等しい複数の行番号とで特定される複数の要素を備えた正方行列は正則であることを特徴とする付記1に記載の情報処理装置。
(付記8) 複数の前記送信ノードの全ての個数をN、前記N以下の整数をk、複数の前記送信ノードの各々を識別する整数値をi、前記N以上の最小の素数をp、前記pで前記iを割ったときの余りをres(i)としたときに、前記符号化ベクトルは(1, res(i), res(i2), …res(ik-1))であることを特徴とする付記1に記載の情報処理装置。
【符号の説明】
【0165】
1…並列計算機、2…送信ノード、3…リダクション装置、4…受信ノード、10…情報処理装置、11…ノード、12…中継装置、13…演算装置、14…プロセッサ、15…メモリ、16…ネットワークインターフェース、17…プロセッサ、18…メモリ、21…送信ノード、22…受信ノード、31…実行部、32…第1の算出部、33…第1の送信部、35…第1の受信部、36…第2の算出部、37…第2の送信部、38…第2の受信部、39…復号部、51…識別符号部、52…符号化ペイロード、53…識別符号部、54…符号化ペイロード。
図1
図2
図3
図4
図5
図6
図7
図8
図9