JP4942095B2 - マルチコア・プロセッサにより演算を行う技術 - Google Patents

マルチコア・プロセッサにより演算を行う技術 Download PDF

Info

Publication number
JP4942095B2
JP4942095B2 JP2007014943A JP2007014943A JP4942095B2 JP 4942095 B2 JP4942095 B2 JP 4942095B2 JP 2007014943 A JP2007014943 A JP 2007014943A JP 2007014943 A JP2007014943 A JP 2007014943A JP 4942095 B2 JP4942095 B2 JP 4942095B2
Authority
JP
Japan
Prior art keywords
matrix
elements
read
vector
storage area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007014943A
Other languages
English (en)
Other versions
JP2008181386A (ja
Inventor
拓 井上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2007014943A priority Critical patent/JP4942095B2/ja
Priority to US11/945,328 priority patent/US8200735B2/en
Publication of JP2008181386A publication Critical patent/JP2008181386A/ja
Application granted granted Critical
Publication of JP4942095B2 publication Critical patent/JP4942095B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Description

本発明は、マルチコア・プロセッサに関する。特に、本発明は、マルチコア・プロセッサにより行列演算を行う技術に関する。
流体解析や構造解析などの多くの科学技術計算において、疎行列とベクトルの積を求める演算は頻繁に行われる。たとえば、共役勾配法(conjugate gradient method:CG法)においては、多次元連立一次方程式の解が反復解法により算出される(非特許文献1を参照。)。そしてこの反復解法において、疎行列とベクトルの積は解が収束するまで繰返し算出される。このような演算の効率化を目的として幾つかの技術が提案されている。例えばある技術では、CPUのキャッシュメモリにベクトルデータの一部しか格納できない場合に、当該ベクトルデータの一部が連続してアクセスされるように行列の行または列を予め並べ替えて、キャッシュミスを低減している。また、他の技術では、疎行列の非ゼロ要素を1つずつメモリやハードディスクから読み出すのではなく、2要素×2要素のブロックとして同時に4要素を読み出すことで、読み出し時間を節約している。
共役勾配法についての記事。ホームページURL「http://en.wikipedia.org/wiki/Conjugate_gradient_method」、2007年1月25日検索
近年、マルチコア・プロセッサが普及してきている。マルチコア・プロセッサは複数のプロセッサ・エレメントを単一のプロセッサ・チップ上に成形したものであり、各プロセッサ・エレメントは他のプロセッサ・エレメントとは独立にかつ並列に動作する。また、マルチコア・プロセッサは各プロセッサ・エレメント内にキャッシュメモリを有する。プロセッサからキャッシュメモリには高速にアクセスできるので、同時期に用いるデータをキャッシュメモリに予め格納することができれば、演算処理は高速化される。但し、キャッシュメモリとシステムメモリとの間や、あるキャッシュメモリと他のキャッシュメモリとの間でデータの一貫性を保つ処理の実現は容易でなく、多くのハードウェア資源を必要としてマルチコア・プロセッサの構造を複雑化してしまう場合がある。
このため、データの一貫性をソフトウェアにより管理させてプロセッサの構造を簡略化するべく、一貫性保持の機能を省いたマルチコア・プロセッサが開発されている。例えば、出願人らによって開発されたCellプロセッサ(Cell Broadband Engine(登録商標))は、キャッシュメモリに代えて、一貫性保持の機能を有しない局所メモリを当該プロセッサの内部に備えている。これにより、プロセッサ内部のハードウェア構造を簡略化することができ、他の機能を設けたり、プロセッサの動作速度を向上させることができる。但し、一貫性を維持しようとすればソフトウェアによる制御が必要となる。また、このような構造のプロセッサはこれまでにない全く新しいものなので、従来から研究されてきたソフトウェアの技術をそのまま適用することはできない。これは行列演算にも該当する。
例えば、Cellプロセッサはキャッシュメモリを有しないので、キャッシュミスを低減する技術はそのまま適用できない。また、Cellプロセッサを従来のマルチプロセッサ型の並列計算機と対比し、並列計算機に関する従来技術を応用できるとも考えられるが妥当ではない。第1に、局所メモリは並列計算機のメモリなどと比較すると極めてデータサイズが小さく、同じ技術を適用すれば局所メモリが頻繁に更新される場合がある。第2に、Cellプロセッサにおいて局所メモリ間の通信はシステムメモリへのアクセスよりも極めて高速であるのに対し、並列計算機においてノード間の通信速度はメモリアクセスと同程度かそれより遅い場合もある。このため、並列計算機ではノード間の通信量の削減が有効であるのに対し、Cellプロセッサでは通信をむしろ積極的に利用することが好ましい。
そこで本発明は、上記の課題を解決することのできるシステム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、一側面においては、システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムであって、システムメモリは、入力した行列の非ゼロ要素を配列した要素行列、および、入力した行列の非ゼロ要素の位置を示す配置行列を記憶しており、第1のプロセッシング・エレメントに含まれる第1の局所メモリは、入力したベクトルの一部である第1部分ベクトルを記憶しており、第2のプロセッシング・エレメントに含まれる第2の局所メモリは、入力したベクトルの他の一部である第2部分ベクトルを記憶しており、システムメモリに記憶された要素行列および配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて第1の局所メモリに格納する第1読出部と、第1読出部により行列要素の一部が読み出される毎に、第1部分ベクトルのうち、配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列から読み出された各非ゼロ要素に乗じる演算を、第1のプロセッシング・エレメントに含まれる第1プロセッサの動作により行う第1演算部と、第1演算部により演算が行われる毎に、第1の局所メモリから要素行列および配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて第2の局所メモリに格納する第2読出部と、第2読出部により行列要素の一部が読み出される毎に、第2部分ベクトルのうち、配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列から読み出された各非ゼロ要素に乗じる演算を、第2のプロセッシング・エレメントに含まれる第2プロセッサの動作により行う第2演算部と、第2プロセッサの動作により、第1演算部および第2演算部による演算結果に基づいて、入力した行列およびベクトルの積を示すベクトルの各要素を生成してシステムメモリに格納する出力部とを備えるシステムを提供する。また、当該システムにより行列演算を行う方法、および、当該システムとして情報処理装置を機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、演算システム10の全体構成を示す。演算システム10は、システムメモリ20と、マルチコア・プロセッサ40とを備え、疎行列である行列22およびベクトルを入力し、マルチコア・プロセッサ40が有する並列計算の機能を活用して、それらの積を効率的に算出することを目的とする。システムメモリ20は、いわゆる主記憶メモリであり、マルチコア・プロセッサ40の外部に接続され、後述のホストコントローラ1082を介してマルチコア・プロセッサ40やその他の入出力デバイスからアクセスされる。システムメモリ20は、演算処理に必要なデータやプログラムを記憶するものであり、具体的には、入力した行列22を示す要素行列24および配置行列26と、入力したベクトル28と、マルチコア・プロセッサ40を制御する演算プログラム30とを記憶している。
マルチコア・プロセッサ40は、制御用エレメント400と、複数のプロセッシング・エレメント(即ちプロセッシング・エレメント410−1〜N)と、これらのエレメントおよびシステムメモリ20を接続するオンチップ・バス45とを備え、これらは単一のマイクロプロセッサ・チップ上に一体に形成されている。制御用エレメント400は、演算処理を支援するために設けられ、例えばオペレーティングシステムを動作させたり、演算の事前処理や事後処理を行ったりする。例えば制御用エレメント400は、プロセッシング・エレメント410−1〜Nのそれぞれに予めプログラムやデータを供給して、演算の前処理を行ってもよい。具体的な構成として制御用エレメント400はプロセッサ450とキャッシュメモリ460とを有する。一例として、マルチコア・プロセッサ40がCellプロセッサの場合は制御用エレメント400はPowerPC(登録商標)プロセッサであり、PowerPCの命令セットを用いて記述された既存のプログラムを実行することができる。
プロセッシング・エレメント410−1〜Nは、相互に独立かつ並列に動作する。プロセッシング・エレメント410−1〜Nのそれぞれは、システムメモリ20又は他のプロセッシング・エレメント410からデータを受け取って、そのデータを用いて演算処理を行い、システムメモリ20又は他のプロセッシング・エレメント410に対し演算結果を出力する。そのうちの1つである第1のプロセッシング・エレメント(以降プロセッシング・エレメント410−1と呼ぶ)は、第1プロセッサ(以降プロセッサ420−1と呼ぶ)と、第1の局所メモリ(以降局所メモリ430−1と呼ぶ)と、第1のDMAコントローラ(以降DMAコントローラ440−1と呼ぶ)とを有する。プロセッサ420−1は、演算ユニットおよびレジスタを有しており、局所メモリ430−1にアクセスして演算処理を行う。局所メモリ430−1は、システムメモリ20と比較してプロセッサ420−1から極めて高速にアクセスされるメモリである。但し、局所メモリ430−1の記憶容量はシステムメモリ20と比較して極めて小さく、Cellプロセッサの場合で256KB程度である。
DMAコントローラ440−1は、システムメモリ20と局所メモリ430−1との間、および、当該局所メモリ430−1と他のプロセッシング・エレメント410に含まれる他の局所メモリ430との間で命令コード又はデータを転送する。したがって、プロセッサ420−1は、DMAコントローラ440−1に指示してシステムメモリ20から局所メモリ430−1にデータやプログラムを読み込んでもよいし、他のプロセッシング・エレメント410の局所メモリ430からデータやプログラムを読み込んでもよい。この読み込み処理は、マルチコア・プロセッサ40という一体に整形されたプロセッサ・チップ上で完結する処理なので、システムメモリ20にアクセスする処理と比較して極めて高速である。
第2から第Nのプロセッシング・エレメントであるプロセッシング・エレメント410−2〜Nについても、プロセッシング・エレメント410−1と同様、第2から第Nプロセッサ420−2〜N、第2から第Nの局所メモリ430−2〜Nおよび第2から第NのDMAコントローラ440−2〜Nをそれぞれ有し、プロセッサ420−1、局所メモリ430−1およびDMAコントローラ440−1と略同一であるから説明を省略する。
図2は、行列22、要素行列24および配置行列26の具体例を示す。図2を参照して、行列22と、システムメモリ20に記憶している要素行列24および配置行列26との関係を説明する。行列22は、半数以上の要素を0とする疎行列であり、ここでは例えば6行×6列の正方行列である。要素行列24は、行列22の非ゼロ要素を配列した行列である。要素行列24は、行列22のそれぞれの行について、当該行に含まれる非ゼロ要素のそれぞれを要素とする行ベクトルを生成して配列したものである。この図では要素行列24は6行×3列の行列valであり、各行に行列22におけるそれと同一の行の非ゼロ要素を配列している。例えば2行目について、行列22には3、4および5の3つの非ゼロ要素が配列されているので、要素行列24も3、4および5の3つの非ゼロ要素を配列している。
また、4行目について、行列22には8および9の2つの非ゼロ要素がそれぞれ3列目・4列目に配列されているが、要素行列24においてはこのような列位置に関わらず8および9の2つの非ゼロ要素を1列目・2列目に配列している。さらに、この4行目において行列22では非ゼロ要素が2つであって要素行列24の列数3より少ないので、要素行列24では2つの非ゼロ要素の他にゼロを配列している。このように、要素行列24は行列22の非ゼロ要素を漏れなく含めばよく、非ゼロ要素の他にゼロを含んでいてもよい。なお、以降の説明において、要素行列24の行数を変数Mにより示し、要素行列24の列数を変数NZにより示す。即ちここではM=6およびNZ=3である。
配置行列26は、行列22の非ゼロ要素の位置を示す行列であり、具体的には、行列22のそれぞれの行について、当該行におけるそれぞれの非ゼロ要素の位置を示す値を要素とする行ベクトルを生成して配列したものである。要素行列24は、この図では6行×3列の行列colであり、各行に行列22におけるそれと同一の行の非ゼロ要素の列位置を配列している。例えば3行目について、行列22は非ゼロ要素6および7のそれぞれを2列目・4列目に配列しているので、要素行列24は列位置を示す2および4をこの順に配列する。同様に、6行目において、行列22は非ゼロ要素2および3のそれぞれを3列目・6列目に配列しているので、要素行列24は列位置を示す3および6をこの順に配列する。
このように、疎行列である行列22を要素行列24および配置行列26により表せば、本来ゼロ要素を格納するために必要な記憶領域を削減することができ、また、ゼロ要素を対象とした不要な演算処理を省略することができる。この例では6行×6列の行列を例示したが、実際の科学技術計算では数万行×数万列の疎行列が用いられる場合もあり、ゼロ要素を省略することによる節約の効果は非常に大きい。なお、図2に行列22として示したように、非ゼロ要素はある一定の箇所に集中しているとは限らず、様々な行位置・列位置に万遍なく分布している場合がある。このような行列とベクトルの積を、ゼロ要素についての演算を省略して効率的に算出しようとすると、ベクトル中の各要素はランダムにアクセスされ得る。図3にそのようなアクセスを行うプログラムの一例を示す。
図3は、演算プログラム30の具体例を示す。(a)に、プロセッサ420−1において動作するプログラムを示し、(b)に、プロセッサ420−2において動作するプログラムを示す。これらのプログラムは、疎行列である行列22にベクトル28を右から乗じた積を算出することを目的とする。(a)の1行目および7行目に示すように、2から6行目のプログラムは行数Mと同一の回数繰り返され、繰返しの回数は誘導変数iに格納される。2行目において、配列変数yが0に初期化される。この変数yは、演算結果のベクトルの各要素に対応して、その要素の演算の途中経過を格納する。3行目において、行列22および要素行列24のi行目がシステムメモリ20から局所メモリ430−1に読み出される。
4行目から6行目において、5行目に示す演算が、列数NZと同一の回数繰り返される。5行目において、まず、配置行列26のi行j列の要素が局所メモリ430−1から読み出される。そして、読み出したその要素が示す番号を添え字として、ベクトル28を示す配列変数xからベクトル要素が読み出される。読み出された要素は、要素行列24のi行j列の要素と乗じられて、変数yのi要素に加えられる。なお、(b)についても(a)とほぼ同一であるが、詳しくは、具体的な処理の説明において後に参照する。
なお、3行目に示すように、ここでは行列22等の要素が行単位で1行ずつ読み出されるが、読み出しは一部の行列要素ずつ行われれば他の例でもよく、たとえば列単位で所定数の列ずつ読み出されてもよいし、行単位ではなく行をさらに分割した単位で読み出されてもよい。このような読み出し単位の変更は、LOADの対象となる要素やLOAD処理のタイミングを変更することによって実現される。タイミングの変更は、たとえば、図3(a)の1行目から開始するループ処理をさらに小さい単位の多重ループ処理に分割して、外側ループ処理の度にLOAD命令を発行することにより実現される。また、図3(a)の3行目から開始するループ処理の一部をループ展開することにより実現される。
(a)のプログラムの5行目において、配列変数xは、配置行列26から順次読み出される要素の番号に応じてランダムにアクセスされる。即ち例えば、配置行列26の6行目について、要素3および6が順次読み出された結果、配列変数xの3番目および6番目の要素が順次アクセスされる。このように、疎行列とベクトルとの掛け算において、ゼロ要素に関する演算を省略しようとすると、ベクトルの要素はランダムにアクセスされる。このため、ベクトルの要素の数が多くて局所メモリ430に格納しきれない場合には、局所メモリ430に記憶する要素を入替える処理が頻繁に必要となる。この処理のためにはシステムメモリ20にアクセスしなければならず、処理効率が悪い。また、アクセスのタイミングも配置行列26を読み出してみないと分からない。
これに対し、本実施形態に係る演算システム10によれば、アクセス位置の予測が困難なベクトルを予め分割して、その一部ずつを複数の局所メモリ430に記憶しておく。そして、逐次的にアクセスされる行列についてはシステムメモリ20からストリーム的に読み出すことで、局所メモリ430の必要容量を削減しつつも演算処理を効率化できる。以下、具体的に説明してゆく。
図4は、本実施形態に係るマルチコア・プロセッサ40の機能構成を示す。本図ではマルチコア・プロセッサ40が備える制御用エレメント400、プロセッシング・エレメント410およびプロセッサ420に注目して行列演算の処理機能を説明する。マルチコア・プロセッサ40は、プロセッサ450の制御によって動作する初期化処理部455を有する。この初期化処理部455は、演算プログラム30またはオペレーティングシステム・プログラムの指令に基づき動作する。初期化処理部455は、後述のホストコントローラ1082、ハードディスクドライブ1040または通信インターフェイス1030などと協働して、演算処理を支援するための各種の処理を行う。たとえば、初期化処理部455は、行列22を外部から入力したり、ハードディスクドライブ1040から要素行列24または配置行列26を読み出してもよい。また、局所メモリ430−1〜Nのそれぞれに、演算処理に必要なデータやプログラムを提供してもよい。
マルチコア・プロセッサ40は、プロセッサ420−1の制御によって演算プログラム30の指令に基づき動作する第1読出部422−1および第1演算部424−1を有する。また、局所メモリ430−1は、第1記憶領域432−1と、第2記憶領域434−1と、第3記憶領域436−1と、ベクトル記憶領域438−1とを有する。マルチコア・プロセッサ40は、プロセッサ420−2の制御によって演算プログラム30の指令に基づき動作する第2読出部425−2、第2演算部426−2および出力部428−2を有する。また、局所メモリ430−2は、第1記憶領域432−2と、第2記憶領域434−2と、第3記憶領域436−2と、ベクトル記憶領域438−2とを有する。
局所メモリ430−1は、ベクトル記憶領域438−1に、ベクトル28の一部である第1部分ベクトルを記憶している。例えば局所メモリ430−1と局所メモリ430−2とでベクトル28全体を記憶するべく、局所メモリ430−1は、ベクトル28を2分割した先頭側の要素を記憶してもよい。そして局所メモリ430−2は、ベクトル28の他の一部である第2部分ベクトルを記憶している。第2部分ベクトルは、ベクトル28を分割した後半側の要素から構成されるベクトルであってもよい。
第1読出部422−1は、システムメモリ20に記憶された要素行列24および配置行列26のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて局所メモリ430−1に格納する。ハードウェアの側面から見ると、この処理は、第1読出部422−1がDMAコントローラ440−1に読み出し・格納を指示することにより実現される。ソフトウェアの側面から見ると、この処理は図3(a)の3行目に相当し、このLOAD命令は例えばシステムメモリ20の記憶領域に割り当てられたアドレスに対し発行される。
また、第1記憶領域432−1は、読み出した行列要素を記憶するために設けられ、第2記憶領域434−1は、演算に用いている行列要素を記憶するために設けられ、第3記憶領域436−1は、既に演算に用いられた行列要素を記憶するために設けられる。即ち、読み出された行列要素は、まず第1記憶領域432−1に格納されて、演算処理の前に第2記憶領域434−1にコピーされ、演算処理の後にさらに第3記憶領域436−1にコピーされる。なお、第1−3記憶領域は並列処理の効率化のために設けられたものであり、局所メモリ430−1〜2のそれぞれはベクトル記憶領域のほかは単一の記憶領域、あるいは2つの記憶領域を有していてもよい。
第1演算部424−1は、第1読出部422−1により行列要素の一部が読み出される毎に、第1部分ベクトルのうち、配置行列26から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列24から読み出された各非ゼロ要素に乗じる演算を行う。例えば配置行列26から行列要素3が読み出されると、第1部分ベクトルの第3要素が対応する要素として、要素行列24の行列要素と乗算される。演算結果は合計されて、局所メモリ430−1の第2記憶領域434−1に格納される。この処理は図3(a)の4−6行目の処理に相当する。ここで、配列変数xが第1部分ベクトル中の要素数を超える添え字でアクセスされた場合には、そのアクセスの結果はゼロが読み出されるように予め設定しておくことが望ましい。
第2読出部425−2は、第1演算部424−1により演算が行われる毎に、局所メモリ430−1から要素行列24および配置行列26の一部の行列要素を読み出して、既に読み出した行列要素に代えて局所メモリ430−2に格納する。ハードウェアの側面から見ると、この処理は、第2読出部425−2がDMAコントローラ440−1〜2に読み出し・格納を指示することにより実現される。ソフトウェアの側面から見ると、この処理は図3(b)の3行目に相当し、このLOAD命令は例えば局所メモリ430−1の記憶領域に割り当てられたアドレスに対し発行される。さらに、第2読出部425−2は、プロセッサ420−1による演算結果を局所メモリ430−1から読み出して局所メモリ430−2に格納する。この処理は図3(b)の2行目の処理に相当する。
なお、第2読出部425−2による読み出し処理は、局所メモリ430−1から局所メモリ430−2へのデータ転送を意味するものであり、直接的な転送か間接的な転送かを問わない。即ち、局所メモリ430−1から読み出した行列要素が一旦他のプロセッシング・ユニットの局所メモリ(たとえば局所メモリ430−Mとする)に格納され、それを第2読出部425−2が読み出して局所メモリ430−2に格納してもよい。また、第2読出部425−2はプロセッサ420−2に代えてプロセッサ420−1に設けられ、第2読出部425−2は行列要素を局所メモリ430−1から読み出したうえで、局所メモリ430−2に対するその要素をデータとする書込み命令を発行してこのデータ転送を実現してもよい。
局所メモリ430−1の場合と同様に、読み出された行列要素は、まず第1記憶領域432−2に格納されて、演算処理の前に第2記憶領域434−2にコピーされ、演算処理の後にさらに第3記憶領域436−2にコピーされてもよい。
第2演算部426−2は、第2読出部425−2により行列要素の一部が読み出される毎に、第2部分ベクトルのうち、配置行列26から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列24から読み出された各非ゼロ要素に乗じる演算を行う。例えば配置行列26から行列要素5が読み出されると、第2部分ベクトルの第2要素(5から第1部分ベクトルの要素数3を減じたもの)が対応する要素として要素行列24の要素と乗じられる。この結果はそれぞれプロセッサ420−1の演算結果に加算されて局所メモリ430−2に格納される。この処理は、図3(b)の4−6行目の処理に対応する。出力部428−2は、第1演算部424−1および第2演算部426−2による演算結果に基づいて、行列22およびベクトル28の積を示すベクトルの各要素を生成して、システムメモリ20に格納する。この図の例では演算結果は順次加算されてきているので、出力部428−2はその加算された演算結果を単にシステムメモリ20に出力すればよい。図3(b)の7行目は、この処理を行毎に行う例を示している。
図5は、本実施形態に係るマルチコア・プロセッサ40による行列演算処理の流れを示す。マルチコア・プロセッサ40は、ベクトル28の一部である第1部分ベクトルをシステムメモリ20から読み出して、ベクトル記憶領域438−1に予め格納する(S500)。また、マルチコア・プロセッサ40は、ベクトル28の他の一部である第2部分ベクトルをシステムメモリ20から読み出して、ベクトル記憶領域438−2に予め格納する。第1読出部422−1は、要素行列24の行列要素の一部ずつをシステムメモリ20から順次読み出して、既に第1記憶領域432−1に記憶された行列要素(即ち、前回要素行列24から読み出した行列要素)に代えて第1記憶領域432−1に格納する(S510)。また、第1読出部422−1は、配置行列26の行列要素の一部ずつをシステムメモリ20から順次読み出して、既に第1記憶領域432−1に記憶された行列要素(即ち前回配置行列26から読み出した行列要素)に代えて第1記憶領域432−1に格納する(S515)。
第1演算部424−1は、第1記憶領域432−1から行列要素を読み出して第2記憶領域434−1に格納する(S520)。そして、第1演算部424−1は、第1読出部422−1が次の演算のために行列要素の他の一部を第1記憶領域432−1に読み出す処理と並列に、第2記憶領域434−1に格納した行列要素を用いて演算を行う(S530、S535)。演算結果は第2記憶領域434−1に格納される。即ち、第1部分ベクトルの要素と要素行列24の各非ゼロ要素の積の合計値yが第2記憶領域434−1に格納される。演算の完了を条件に、第1演算部424−1は、第2記憶領域434−1から行列要素および演算結果を読み出して第3記憶領域436−1に格納する(S540)。
第2読出部425−2は、第1演算部424−1による次の演算処理と並列に、局所メモリ430−1の第3記憶領域436−1から一部の行列要素を読み出して、既に局所メモリ430−2の第1記憶領域432−2に記憶された行列要素(即ち、前回第3記憶領域436−1から読み出された行列要素)に代えて当該第1記憶領域432−2に格納する(S550)。また、第2読出部425−1は、局所メモリ430−1の第3記憶領域436−1からさらに合計値yを読み出して、既に局所メモリ430−2の第1記憶領域432−2に記憶された合計値に代えて当該第1記憶領域432−2に格納する。
第2演算部426−2は、第1記憶領域432−2から行列要素および合計値yを読み出して第2記憶領域434−2に格納する(S560)。そして、第2演算部426−2は、第2読出部425−2が次の演算のために行列要素を第1記憶領域432−2に読み出す処理と並列に、第2記憶領域434−2に格納した行列要素を用いて演算を行う(S570、S575)。演算によって第2部分ベクトルの要素と要素行列24の各非ゼロ要素との積が算出される。そして、その積は合計されて、局所メモリ430−1から読み出した合計値yに加算され、第2記憶領域434−2に格納される。第2演算部426−2は、演算の完了を条件に、合計値yを第2記憶領域434−2から読み出して第3記憶領域436−2に格納する(S580)。出力部428−2は、第3記憶領域436−2から合計値yを読み出して、行列22およびベクトル28の積を示すベクトルの各要素としてシステムメモリ20に格納する(S590)。
以上、図5を参照して説明したように、演算システム10は、予めアクセス位置が予想できないベクトルデータについては予め分割して複数の局所メモリ430に読み込んでおき、逐次的に端からアクセスされる行列データについてはストリーム的に読み出す。これにより、演算処理の途中で演算を中断してシステムメモリ20にアクセスする必要が無いので、各プロセッサ420の演算能力を有効活用して処理を効率化できる。また、各演算部は並列に動作する。具体的には、第2演算部426−2は、第1演算部424−1による第1の部分ベクトルの要素と要素行列24の一部の要素とを乗じる演算と並行に、第2の部分ベクトルの要素と要素行列24の他の一部の要素とを乗じる演算を行う。これにより、本来処理するべき行列演算の一部ずつを複数のプロセッサ420が同時並行に行うことができ、単一のプロセッサにより処理する場合と比較して処理効率を極めて高くすることができる。
次に、図6から図10を参照して、マルチコア・プロセッサ40の処理能力をさらに有効に活用する手法を変形例として示す。
図6は、本実施形態の変形例に係るマルチコア・プロセッサ40の機能構成を示す。マルチコア・プロセッサ40は、図4の構成に加えて、さらに、プロセッサ450の制御によって動作する分類部458と、プロセッサ420−1の制御によって動作する出力部428−1とを有する。分類部458は、システムメモリ20に記憶された配置行列26を走査して、行列22の各行を、第1から第3分類に分類する。第1分類は、第1部分ベクトルおよび第2部分ベクトルの何れに含まれる要素との間でも乗算するべき非ゼロ要素を含む行を示す。第2分類は、第1分類以外の行のうち、第1部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む行を示す。第3分類は、第1分類以外の行のうち、第2部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む行を示す。そして、分類部458は、分類毎に行が連続するように行の配列順序をシステムメモリ20において並べ替える。
第1読出部422−1は、図4において説明した第1読出部422−1と同様に、システムメモリ20に記憶された要素行列24および配置行列26のうち、予め定められた行数の行ごと(たとえば1行ごと)に順次行列要素を読み出す。但し、読み出されるのは要素行列24および配置行列26のうち第1分類又は第2分類の行に対応する行に限られる。第3分類の行に対応する行は読み出しの対象から除外される。分類部458が各行を第2分類、第1分類および第3分類の順に並べ替えていれば、第1読出部422−1は先頭の行から順に読み出して第1分類が完了した時点で読み出しを終了すればよい。第1演算部424−1は、第1読出部422−1によって行列要素が読み出される毎に演算処理を行う。この演算処理は、図4および図5に示したものと同様である。
第2読出部425−2は、図4と同様に、第1演算部424−1により演算が行われる毎に、局所メモリ430−1に記憶された行列要素を読み出す。但し、読み出されるのは要素行列24および配置行列26のうち第1分類の行に対応する行に限られ、第2分類の行に対応する行は含まれない。さらに、第2読出部425−2は、要素行列24および配置行列26のうち第3分類の行に対応する行の行列要素をシステムメモリ20から順次読み出す。第2演算部426−2は、第2読出部425−2によって行列要素が読み出される毎に演算処理を行う。この演算処理は図4および図5に示したものと同様である。
出力部428−1〜2は、協働して、本発明に係る出力部として機能する。そして、出力部428−2は、第1分類の行について第1演算部424−1および第2演算部426−2により演算された演算結果、および、第3分類の行について第2演算部426−2により演算された演算結果について、積を示すベクトルの各要素を生成してシステムメモリ20に格納させる。また、出力部428−1は、第2分類の行について第1演算部424−1により演算された演算結果をシステムメモリ20に格納する。
図7は、本実施形態の変形例に係るマルチコア・プロセッサ40による行列演算処理の流れを示す。分類部458は、行列22の各行を第1から第3分類に分類する(S700)。好ましくは、分類部458は、第2分類、第1分類および第3分類の順に、分類した各行をシステムメモリ20において並べ替える。次に、プロセッシング・エレメント410−1〜2は相互に並列に動作し、行列22の右からベクトル28を乗じる演算を行う(S710)。その後、好ましくは、出力部428−2は、演算結果であるベクトルの各要素を、分類部458による並べ替えの逆の処理によって元の順序に並べ替える(S720)。
図8は、図7のS700における処理の具体例を示す。分類部458は、変数iの記憶領域をシステムメモリ20などに確保してその値を0に初期化する(S800)。次に、分類部458は、行列22の行数Mを要素数とする配列変数Fの記憶領域を確保してその各要素を0に初期化し、変数jの記憶領域を確保してその値を0に初期化する(S810)。次に、分類部458は、第i行を分類するべくS820およびS830の処理を繰り返す。具体的には、まず、分類部458は、配置行列26のi行j列の要素を読み出して定数Bで割り算する(S820)。この定数Bは、ベクトル28の全要素を格納するために充分なプロセッシング・エレメント410の数を示し、本実施形態では2である。端数は切り捨てられて整数に丸められる。そして、分類部458は、割り算の結果の数値に応じて2進定数の1を左にビットシフトする。
この結果、ベクトル28を2分割した先頭側の要素と乗じられるべき非ゼロ要素については、2進定数01が算出される。一方ベクトル28を2分割した末尾側の要素と乗じられるべき非ゼロ要素については、2進定数10が算出される。算出結果はF(i)の値と論理和演算されて、そのF(i)に代入される。さらにその後、変数jはインクリメントされる。分類部458は、以上の処理を変数jが要素行列24の列数NZに達するまで繰り返す(S830)。続いて、分類部458は変数iをインクリメントし、変数iの値が行数Mに達したかどうかを判断する(S850)。Mに達していなければ(S850:YES)、分類部458はS810に処理を戻す。一方Mに達していれば(S850:NO)、分類部458は、行列22の各行を配列変数Fの値で分類する(S860)。即ち例えば、F(i)は2進数の11、01または10の何れかであり、11に対応する行が第1分類に、01に対応する行が第2分類に、10に対応する行が第3分類にそれぞれ分類される。
図9は、S700の分類およびそれに基づくS710の処理を示す概念図である。(b)に、分類部458による分類に基づく演算処理を示し、(a)に、図1から図5に示す実施形態における演算処理をこれと対比して示す。各図には、疎行列である行列22を、その各要素についての演算を行うプロセッサ420に重ねて示している。図の斜線部分は非ゼロ要素であり、この疎行列は対角要素や副対角要素に非ゼロ要素を有している。
(a)に示すように、行列22の各行はその先頭側と後尾側に分割されて、そのそれぞれがプロセッサ420−1およびプロセッサ420−2のそれぞれにより演算される。行方向に見れば各要素がプロセッサ420−1およびプロセッサ420−2により並列に計算されるが、列方向に見ると複数の行については第1読出部422−1により逐次的に読み出されて第1演算部424−1によって逐次的に計算される。このため、行の数に応じた計算時間がかかる。これを短縮するため、行列22を行単位で2分割して、プロセッサ420−3〜4が末尾側の行についてプロセッサ420−1〜2と同様の演算を行えば、プロセッサ420−1〜2を含むグループとプロセッサ420−3〜4を含むグループは並行動作するので処理は効率的に完了する。しかしながら、プロセッサ420−2〜3に注目すると、処理の内容は行列要素の受渡が殆どであり、実質的な乗算処理が少なくて効率的ではない。
これに対し、(b)に示すように、本変形例では、2分割した先頭側にのみ非ゼロ要素を有する第2分類の行についてはプロセッサ420−1のみにより演算を行う。また、2分割した後尾側にのみ非ゼロ要素を有する第3分類の行についてはプロセッサ420−4のみにより演算を行う。また、先頭側および後尾側の何れにも非ゼロ要素を有する第1分類の行についてはプロセッサ420−2〜3のそれぞれによって演算を行う。そして、これらの各分類の処理は相互に並列動作する。このように、本変形例によれば、演算全体の所要時間を短縮することができると共に、必要な計算資源、たとえば、各プロセッサ420の使用時間を合計したもの(図ではcore0−3と書かれた部分の面積。)を節約することができる。
以上に示したように、本変形例においては第1−3分類についてそれぞれ異なる処理を行うことで処理を効率化している。このうち第1分類の処理の流れについては、図1から図5を参照して示したものと同様である。一方、第2−3分類についての処理の流れは、プロセッサ420を1つしか必要としないので図1から図5の処理とは異なる。続いて図10を参照して、第2−3分類を代表して第2分類についての処理を示す。
図10は、第2分類の行ベクトルに関する行列演算の処理の流れを示す。マルチコア・プロセッサ40は、ベクトル28の一部である第1部分ベクトルをシステムメモリ20から読み出して、ベクトル記憶領域438−1に予め格納する(S1000)。第1読出部422−1は、配置行列26のうち第2分類の行列要素の一部ずつをシステムメモリ20から順次読み出して、既に第1記憶領域432−1に記憶された行列要素(即ち前回配置行列26から読み出した行列要素)に代えて第1記憶領域432−1に格納する(S1010、S1015)。
第1演算部424−1は、第1記憶領域432−1から行列要素を読み出して第2記憶領域434−1に格納する(S1020)。そして、第1演算部424−1は、第1読出部422−1が次の演算のために行列要素の他の一部を第1記憶領域432−1に読み出す処理と並列に、第2記憶領域434−1に格納した行列要素を用いて演算を行う(S1030、S1035)。演算結果は第2記憶領域434−1に格納される。即ち、第1部分ベクトルの要素と要素行列24の各非ゼロ要素の積の合計値yが第2記憶領域434−1に格納される。演算の完了を条件に、第1演算部424−1は、第2記憶領域434−1から行列要素および演算結果を読み出して第3記憶領域436−1に格納する(S1040)。合計値yは出力部428−1等の指示に基づきシステムメモリ20に出力される(S1050)。
なお、第3分類についての演算処理もこれと同様であり、上記記載の読み替えにより説明される。具体的には、第2分類を第3分類と、ベクトル記憶領域438−1をベクトル記憶領域438−2と、第1記憶領域432−1を第1記憶領域432−2と、第2記憶領域434−1を第2記憶領域434−2と、第3記憶領域436−1を第3記憶領域436−2と、第1読出部422−1を第2読出部425−2と、第1読出部422−1を第1読出部422−2と、第1演算部424−1を第1演算部424−2と、出力部428−1を出力部428−2とそれぞれ読み替えることにより説明される。これにより、ベクトル28の先頭側半分又は後尾側半分の何れにかしか非ゼロ要素を有しない行については単一のプロセッサ420で演算を完結させて、計算機資源を有効活用できる。
図11は、本実施形態又はその変形例に係る演算システム10として機能する情報処理装置1100のハードウェア構成の一例を示す。情報処理装置1100は、ホストコントローラ1082により相互に接続されるマルチコア・プロセッサ40、システムメモリ20、及びグラフィックコントローラ1075を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、システムメモリ20と、高い転送レートでシステムメモリ20をアクセスするマルチコア・プロセッサ40及びグラフィックコントローラ1075とを接続する。マルチコア・プロセッサ40は、ROM1010及びシステムメモリ20に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、マルチコア・プロセッサ40等がシステムメモリ20内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、マルチコア・プロセッサ40等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、情報処理装置1100が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、システムメモリ20又はハードディスクドライブ1040に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、情報処理装置1100の起動時にマルチコア・プロセッサ40が実行するブートプログラムや、情報処理装置1100のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してシステムメモリ20またはハードディスクドライブ1040に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
情報処理装置1100に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出され情報処理装置1100にインストールされて実行される。プログラムが情報処理装置1100等に働きかけて行わせる動作は、図1から図10において説明した演算システム10における動作と同一であるから、説明を省略する。
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置1100に提供してもよい。
このように、本実施形態およびその変形例に係る演算システム10は、ランダムアクセスされるベクトルデータをマイクロプロセッサ・チップ内の局所メモリに格納し、アクセス順序が予め判明している行列データをストリーム的に読み出す。これにより、必要なデータを演算開始までに局所メモリに読み込むことができ、データ読み出しにより演算を中止しなくて済むようにすることができる。また、複数のプロセッシング・ユニットを並列に動作させることで、演算処理のスピードを大幅に向上できる。本願発明者の実験によれば、5つのプロセッシング・ユニットを用いた計算は1つのプロセッシング・ユニットを用いた場合と比較して4倍以上に効率化した。また、データの一貫性制御を行うマルチコア・プロセッサや、ソフトウェアによりデータの一貫性制御を行う手法と比較しても、本手法が極めて効率的であることが確かめられた。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。例えば、ベクトル28が2つの局所メモリ430をもってしても格納しきれないほど大きいデータサイズの場合は、ベクトル28を3以上に分割して、そのそれぞれを局所メモリ430のそれぞれに格納してもよい。また、要素行列24および配置行列26は図2に示したものに限られない。たとえば、要素行列24は、行列22の非ゼロ要素を列ごとに配列したものであって、配置行列26は、非ゼロ要素の行位置を示す情報を列ごとに配列したものであってよい。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
図1は、演算システム10の全体構成を示す。 図2は、行列22、要素行列24および配置行列26の具体例を示す。 図3は、演算プログラム30の具体例を示す。 図4は、本実施形態に係るマルチコア・プロセッサ40の機能構成を示す。 図5は、本実施形態に係るマルチコア・プロセッサ40による行列演算処理の流れを示す。 図6は、本実施形態の変形例に係るマルチコア・プロセッサ40の機能構成を示す。 図7は、本実施形態の変形例に係るマルチコア・プロセッサ40による行列演算処理の流れを示す。 図8は、図7のS700における処理の具体例を示す。 図9は、S700の分類およびそれに基づくS710の処理を示す概念図である。 図10は、第2分類の行ベクトルに関する行列演算の処理の流れを示す。 図11は、本実施形態又はその変形例に係る演算システム10として機能する情報処理装置1100のハードウェア構成の一例を示す。
符号の説明
10 演算システム
20 システムメモリ
22 行列
24 要素行列
26 配置行列
28 ベクトル
30 演算プログラム
40 マルチコア・プロセッサ
45 オンチップ・バス
400 制御用エレメント
410 プロセッシング・エレメント
420 プロセッサ
422 第1読出部
424 第1演算部
425 第2読出部
426 第2演算部
428 出力部
430 局所メモリ
432 第1記憶領域
434 第2記憶領域
436 第3記憶領域
438 ベクトル記憶領域
440 DMAコントローラ
450 プロセッサ
455 初期化処理部
458 分類部
460 キャッシュメモリ
1100 情報処理装置

Claims (8)

  1. システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムであって、
    前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
    第1の前記プロセッシング・エレメントに含まれる第1の局所メモリは、入力した前記ベクトルの一部である第1部分ベクトルを記憶しており、
    第2の前記プロセッシング・エレメントに含まれる第2の局所メモリは、入力した前記ベクトルの他の一部である第2部分ベクトルを記憶しており、
    前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第1の局所メモリに格納する第1読出部と、
    前記第1読出部により行列要素の一部が読み出される毎に、前記第1部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第1のプロセッシング・エレメントに含まれる第1プロセッサの動作により行う第1演算部と、
    前記第1演算部により演算が行われる毎に、前記第1の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第2の局所メモリに格納する第2読出部と、
    前記第2読出部により行列要素の一部が読み出される毎に、前記第2部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第2のプロセッシング・エレメントに含まれる第2プロセッサの動作により行う第2演算部と、
    前記第2プロセッサの動作により、前記第1演算部および前記第2演算部による演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力部と
    を備えるシステム。
  2. 前記第1の局所メモリおよび前記第2の局所メモリのそれぞれは、読み出した行列要素を記憶するための第1記憶領域と、演算に用いている行列要素を記憶するための第2記憶領域と、既に演算に用いられた行列要素を記憶するための第3記憶領域とを有し、
    前記第1読出部は、行列要素の一部ずつを前記システムメモリから順次読み出して、既に前記第1記憶領域に記憶された行列要素に代えて前記第1記憶領域に記憶し、
    前記第1演算部は、前記第1記憶領域から行列要素を読み出して前記第2記憶領域に格納して、前記第1読出部が次の演算のために行列要素の他の一部を前記第1記憶領域に読み出す処理と並列に、前記第2記憶領域に格納した行列要素を用いて演算を行い、演算の完了を条件に、前記第2記憶領域から行列要素を読み出して第3記憶領域に格納し、
    前記第2読出部は、前記第1演算部による次の演算処理と並列に、前記第1の局所メモリの前記第3記憶領域から一部の行列要素を読み出して、既に前記第2の局所メモリの前記第1記憶領域に記憶された行列要素に代えて当該第1記憶領域に格納し、
    前記第2演算部は、前記第2の局所メモリの前記第1記憶領域から行列要素を読み出して前記第2記憶領域に格納して、前記第2読出部が次の演算のために行列要素を読み出す処理と並列に、当該第2記憶領域に格納した行列要素を用いて演算を行う
    請求項1に記載のシステム。
  3. 前記第1演算部は、前記第1部分ベクトルの要素と前記要素行列の各非ゼロ要素との積の合計値をさらに算出し、算出した当該合計値をさらに前記第3記憶領域に格納し、
    前記第2読出部は、前記第1の局所メモリの前記第3記憶領域からさらに当該合計値を読み出して、既に前記第2の局所メモリの前記第1記憶領域に記憶された合計値に代えて当該第1記憶領域に格納し、
    前記第2演算部は、前記第2の局所メモリの前記第1記憶領域に記憶された当該合計値を読み出して前記第2の記憶領域に格納し、前記第2の部分ベクトルの要素と前記要素行列の各非ゼロ要素との積の合計値をさらに算出し、算出した当該合計値を、当該第2記憶領域に格納した合計値に加算して、前記第2の局所メモリの前記第3記憶領域に格納し、
    前記出力部は、前記第2の局所メモリの前記第3記憶領域から合計値を読み出して、入力した前記行列および前記ベクトルの積を示すベクトルの各要素として前記システムメモリに格納する
    請求項2に記載のシステム。
  4. 前記第2演算部は、前記第1演算部による前記第1の部分ベクトルの要素と前記要素行列の一部の要素とを乗じる演算と並行に、前記第2の部分ベクトルの要素と前記要素行列の他の一部の要素とを乗じる演算を行う
    請求項1に記載のシステム。
  5. 当該システムは、入力した前記行列に入力した前記ベクトルを右から乗じた積を算出するシステムであり、
    前記要素行列は、入力した前記行列のそれぞれの行について、当該行に含まれる非ゼロ要素のそれぞれを要素とする行ベクトルを生成して配列したものであり、
    前記配置行列は、入力した前記行列のそれぞれの行について、当該行におけるそれぞれの非ゼロ要素の位置を示す値を要素とする行ベクトルを生成して配列したものであり、
    前記システムメモリに記憶された前記配置行列を走査して、入力した前記行列の各行を、前記第1部分ベクトルおよび前記第2部分ベクトルの何れに含まれる要素との間で乗算するべき非ゼロ要素を含む第1分類、前記第1部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む第2分類、および、前記第2部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む第3分類に分類する分類部と、
    前記第1読出部は、前記システムメモリに記憶された前記要素行列および前記配置行列のうち前記第1分類又は前記第2分類の行に対応する行の中から、予め定められた行数の行ごとに順次行列要素を読み出し、
    前記第2読出部は、前記第1の局所メモリから前記要素行列および前記配置行列のうち前記第1分類の行に対応する行の行列要素を読み出し、さらに、前記システムメモリに記憶された前記要素行列および前記配置行列のうち前記第3分類の行に対応する行の行列要素を読み出し、
    前記出力部は、前記第1分類の行について前記第1および第2演算部により演算された演算結果、前記第2分類の行について前記第1演算部により演算された演算結果、および、前記第3分類の行について前記第2演算部により演算された演算結果に基づいて、積を示すベクトルの各要素を生成して前記システムメモリに格納する
    請求項1に記載のシステム。
  6. 各々の前記プロセッシング・エレメントは、
    前記プロセッサと、
    前記プロセッサに接続され、前記システムメモリと比較して当該プロセッサから高速にアクセスされる前記局所メモリと、
    マルチコア・プロセッサの外部に接続される前記システムメモリと前記局所メモリとの間、および、当該局所メモリと他のプロセッシング・エレメントに含まれる他の局所メモリとの間で命令コード又はデータを転送するDMAコントローラと
    を有し、
    前記第1読出部は、前記第1のプロセッシング・エレメントに含まれる第1の前記DMAコントローラに指示して、前記システムメモリから行列要素を読み出して前記第1の局所メモリに格納し、
    前記第1演算部は、プログラムの制御を受けた前記第1プロセッサの動作により、前記第1の局所メモリに記憶された行列要素を用いて演算を行い、
    前記第2読出部は、前記第1のDMAコントローラ、および、前記第2のプロセッサ・エレメントに含まれる第2の前記DMAコントローラに指示して、前記第1の局所メモリから行列要素を読み出して前記第2の局所メモリに格納し、
    前記第2演算部は、プログラムの制御を受けた前記第2プロセッサの動作により、前記第2の局所メモリに記憶された行列要素を用いて演算を行う
    請求項1に記載のシステム。
  7. システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備えたシステムによって、入力した行列およびベクトルの積を算出する方法であって、
    前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
    第1の前記プロセッシング・エレメントに含まれる第1の局所メモリは、入力した前記ベクトルの一部である第1部分ベクトルを記憶しており、
    第2の前記プロセッシング・エレメントに含まれる第2の局所メモリは、入力した前記ベクトルの他の一部である第2部分ベクトルを記憶しており、
    前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第1の局所メモリに格納する第1読出段階と、
    前記第1読出段階において行列要素の一部が読み出される毎に、前記第1部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第1のプロセッシング・エレメントに含まれる第1プロセッサの動作により行う第1演算段階と、
    前記第1演算段階において演算が行われる毎に、前記第1の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第2の局所メモリに格納する第2読出段階と、
    前記第2読出段階において行列要素の一部が読み出される毎に、前記第2部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第2のプロセッシング・エレメントに含まれる第2プロセッサの動作により行う第2演算段階と、
    前記第2プロセッサの動作により、前記第1演算段階および前記第2演算段階における演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力段階と
    を備える方法。
  8. システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムとして、情報処理装置を機能させるプログラムであって、
    前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
    第1の前記プロセッシング・エレメントに含まれる第1の局所メモリは、入力した前記ベクトルの一部である第1部分ベクトルを記憶しており、
    第2の前記プロセッシング・エレメントに含まれる第2の局所メモリは、入力した前記ベクトルの他の一部である第2部分ベクトルを記憶しており、
    前記情報処理装置を、
    前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第1の局所メモリに格納する第1読出部と、
    前記第1読出部により行列要素の一部が読み出される毎に、前記第1部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第1のプロセッシング・エレメントに含まれる第1プロセッサの動作により行う第1演算部と、
    前記第1演算部により演算が行われる毎に、前記第1の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第2の局所メモリに格納する第2読出部と、
    前記第2読出部により行列要素の一部が読み出される毎に、前記第2部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第2のプロセッシング・エレメントに含まれる第2プロセッサの動作により行う第2演算部と、
    前記第2プロセッサの動作により、前記第1演算部および前記第2演算部による演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力部と
    して機能させるプログラム。
JP2007014943A 2007-01-25 2007-01-25 マルチコア・プロセッサにより演算を行う技術 Expired - Fee Related JP4942095B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007014943A JP4942095B2 (ja) 2007-01-25 2007-01-25 マルチコア・プロセッサにより演算を行う技術
US11/945,328 US8200735B2 (en) 2007-01-25 2007-11-27 Multi-core processor for performing matrix operations

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007014943A JP4942095B2 (ja) 2007-01-25 2007-01-25 マルチコア・プロセッサにより演算を行う技術

Publications (2)

Publication Number Publication Date
JP2008181386A JP2008181386A (ja) 2008-08-07
JP4942095B2 true JP4942095B2 (ja) 2012-05-30

Family

ID=39669162

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007014943A Expired - Fee Related JP4942095B2 (ja) 2007-01-25 2007-01-25 マルチコア・プロセッサにより演算を行う技術

Country Status (2)

Country Link
US (1) US8200735B2 (ja)
JP (1) JP4942095B2 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008105494A1 (ja) * 2007-02-28 2008-09-04 Nec Corporation Dma転送装置及び方法
US8102884B2 (en) * 2008-10-15 2012-01-24 International Business Machines Corporation Direct inter-thread communication buffer that supports software controlled arbitrary vector operand selection in a densely threaded network on a chip
JP2010108204A (ja) * 2008-10-30 2010-05-13 Hitachi Ltd マルチチッププロセッサ
JP2010122850A (ja) * 2008-11-19 2010-06-03 Muroran Institute Of Technology 行列方程式計算装置および行列方程式計算方法
US8577949B2 (en) * 2009-07-07 2013-11-05 L-3 Communications Integrated Systems, L.P. System for conjugate gradient linear iterative solvers
CN102446159B (zh) * 2010-10-12 2013-09-18 无锡江南计算技术研究所 多核处理器的数据管理方法及装置
CN102541814B (zh) * 2010-12-27 2015-10-14 北京国睿中数科技股份有限公司 用于数据通信处理器的矩阵计算装置和方法
US20130227243A1 (en) * 2012-02-23 2013-08-29 Freescale Semiconductor, Inc Inter-partition communication in multi-core processor
JP2014002484A (ja) * 2012-06-15 2014-01-09 Nippon Telegr & Teleph Corp <Ntt> ベクトル演算装置及び方法及びプログラム
JP6083300B2 (ja) * 2013-03-29 2017-02-22 富士通株式会社 プログラム、並列演算方法および情報処理装置
US11249759B2 (en) * 2013-07-15 2022-02-15 Texas Instruments Incorporated Two-dimensional zero padding in a stream of matrix elements
US11256508B2 (en) * 2013-07-15 2022-02-22 Texas Instruments Incorporated Inserting null vectors into a stream of vectors
US11231929B2 (en) * 2013-07-15 2022-01-25 Texas Instruments Incorporated One-dimensional zero padding in a stream of matrix elements
JP2015176245A (ja) 2014-03-13 2015-10-05 株式会社東芝 情報処理装置及びデータ構造
JP2016057763A (ja) 2014-09-08 2016-04-21 株式会社東芝 キャッシュ装置、及びプロセッサ
US9684602B2 (en) 2015-03-11 2017-06-20 Kabushiki Kaisha Toshiba Memory access control device, cache memory and semiconductor device
US10310826B2 (en) 2015-11-19 2019-06-04 Intel Corporation Technologies for automatic reordering of sparse matrices
JP6534492B2 (ja) * 2016-03-24 2019-06-26 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
JP6786948B2 (ja) 2016-08-12 2020-11-18 富士通株式会社 演算処理装置及び演算処理装置の制御方法
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
EP3651031A1 (en) * 2017-08-31 2020-05-13 Cambricon Technologies Corporation Limited Chip device and related products
JP6869360B2 (ja) 2017-09-15 2021-05-12 富士フイルムビジネスイノベーション株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
US11379556B2 (en) * 2019-05-21 2022-07-05 Arm Limited Apparatus and method for matrix operations

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5136538A (en) * 1987-09-04 1992-08-04 At&T Bell Laboratories Preconditioned conjugate gradient system
US5267185A (en) * 1989-04-14 1993-11-30 Sharp Kabushiki Kaisha Apparatus for calculating matrices
US5206822A (en) * 1991-11-15 1993-04-27 Regents Of The University Of California Method and apparatus for optimized processing of sparse matrices
US5905666A (en) * 1995-01-03 1999-05-18 International Business Machines Corporation Processing system and method for performing sparse matrix multiplication by reordering vector blocks
JP3391262B2 (ja) * 1998-05-11 2003-03-31 日本電気株式会社 記号計算システム及び方法、並びに並列回路シミュレーションシステム
US6243734B1 (en) * 1998-10-30 2001-06-05 Intel Corporation Computer product and method for sparse matrices
JP2006085619A (ja) * 2004-09-17 2006-03-30 Fujitsu Ltd 帯係数行列を持つ連立1次方程式の解法プログラム

Also Published As

Publication number Publication date
US20080183792A1 (en) 2008-07-31
JP2008181386A (ja) 2008-08-07
US8200735B2 (en) 2012-06-12

Similar Documents

Publication Publication Date Title
JP4942095B2 (ja) マルチコア・プロセッサにより演算を行う技術
KR102659997B1 (ko) 저전력 컨볼루션 신경망 추론 애플리케이션을 위한 메모리 대역폭 감소 기술
Ji et al. ReCom: An efficient resistive accelerator for compressed deep neural networks
Zhang et al. BoostGCN: A framework for optimizing GCN inference on FPGA
US20190220731A1 (en) Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
US8400458B2 (en) Method and system for blocking data on a GPU
US11900253B2 (en) Tiling format for convolutional neural networks
US11640444B2 (en) Device and method for accelerating matrix multiply operations
WO2022007265A1 (zh) 一种膨胀卷积加速计算方法及装置
KR20220038579A (ko) 데이터 처리
CN109522127B (zh) 一种基于gpu的流体机械仿真程序异构加速方法
JP2023519565A (ja) 機械学習ジョブ中の改善されたメモリ圧縮転送のためのスパース性に基づく特徴の再順序付け
CN113469354A (zh) 受存储器限制的神经网络训练
Nakano Optimal parallel algorithms for computing the sum, the prefix-sums, and the summed area table on the memory machine models
CN100377118C (zh) 基于sram的嵌入式文件系统的实现方法
CN116401502A (zh) 一种基于NUMA系统特性优化Winograd卷积的方法及装置
Kim et al. Reducing tail latency of DNN-based recommender systems using in-storage processing
JP2023519564A (ja) 機械学習ジョブ中にメモリ圧縮転送を改善するための類似性に基づく特徴の並べ替え
US20230004385A1 (en) Accelerated processing device and method of sharing data for machine learning
Feng et al. Accelerating Smith-Waterman alignment of species-based protein sequences on GPU
US12124531B2 (en) Device and method for accelerating matrix multiply operations
Kim et al. Towards scalable analytics with inference-enabled solid-state drives
CN111652346A (zh) 一种基于分层优化范式的大规模图深度学习计算框架
US20230244608A1 (en) Computer-readable recording medium having stored therein cross validation program, method for cross validation, and information processing apparatus
US12033275B2 (en) System and methods for efficient execution of a collaborative task in a shader system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091030

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120207

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120224

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150309

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees