JP6907700B2 - 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム - Google Patents

情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム Download PDF

Info

Publication number
JP6907700B2
JP6907700B2 JP2017101556A JP2017101556A JP6907700B2 JP 6907700 B2 JP6907700 B2 JP 6907700B2 JP 2017101556 A JP2017101556 A JP 2017101556A JP 2017101556 A JP2017101556 A JP 2017101556A JP 6907700 B2 JP6907700 B2 JP 6907700B2
Authority
JP
Japan
Prior art keywords
matrix
submatrix
predetermined number
information processing
thread
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.)
Active
Application number
JP2017101556A
Other languages
English (en)
Other versions
JP2018197906A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017101556A priority Critical patent/JP6907700B2/ja
Priority to US15/978,761 priority patent/US10528384B2/en
Publication of JP2018197906A publication Critical patent/JP2018197906A/ja
Application granted granted Critical
Publication of JP6907700B2 publication Critical patent/JP6907700B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Landscapes

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

Description

本発明は、情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラムに関する。
従来、所定行列の各要素の値を生成する行列演算を複数のスレッドで並列に実行する技術がある。例えば、所定行列の各要素の値を生成する行列演算と等価である、所定行列を行方向または列方向に同程度の大きさに分割した複数の部分行列の各要素の値を生成する複数の行列演算を、複数のスレッドで並列して実行することがある。
先行技術としては、例えば、行列の行を分割した部分行ベクトルと、別の行列の列を分割した部分列ベクトルとの乗算を並列に実行し、乗算結果を加算し、部分積和演算結果を出力するものがある。また、例えば、LU分解のサイズから残りのLU分解を高速にベクトル演算出来る様にブロック段数を調整する技術がある。
特開2009−245381号公報 特開平6−75988号公報
しかしながら、従来技術では、スレッドが実行する行列演算にかかる時間の増大化を招いてしまう。例えば、複数の行列演算のいずれかの行列演算の実行効率が悪いと、複数のスレッドが実行する複数の行列演算全体にかかる時間の増大化を招いてしまう。
1つの側面では、本発明は、行列演算にかかる時間の低減化を図ることができる情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラムを提供することを目的とする。
1つの実施態様によれば、行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラムが提案される。
本発明の一態様によれば、行列演算にかかる時間の低減化を図ることができるという効果を奏する。
図1は、実施の形態にかかるマルチスレッド行列演算方法の一実施例を示す説明図である。 図2は、情報処理装置100のハードウェア構成例を示すブロック図である。 図3は、情報処理装置100の機能的構成例を示すブロック図である。 図4は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図(その1)である。 図5は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図(その2)である。 図6は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図(その3)である。 図7は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図(その4)である。 図8は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図(その5)である。 図9は、情報処理装置100の複数のスレッドを用いた行列演算の実施例を示す説明図(その1)である。 図10は、情報処理装置100の複数のスレッドを用いた行列演算の実施例を示す説明図(その2)である。 図11は、情報処理装置100の複数のスレッドを用いた行列演算の実施例を示す説明図(その3)である。 図12は、行列演算処理手順の一例を示すフローチャートである。
以下に、図面を参照して、本発明にかかる情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラムの実施の形態を詳細に説明する。
(実施の形態にかかるマルチスレッド行列演算方法の一実施例)
図1は、実施の形態にかかるマルチスレッド行列演算方法の一実施例を示す説明図である。情報処理装置100は、所定数の行列演算を所定数のスレッドで並列に実行するコンピュータである。情報処理装置100は、例えば、サーバ、PC(Personal Computer)、ノートPC、タブレット端末、スマートフォン、ウェアラブル端末などである。
ここで、数値計算において行列演算が実行されることがある。例えば、密行列の連立一次方程式を解くための、ブロック化したLU分解において、行列演算が実行されることがある。密行列は、非零要素が比較的多い行列である。これに対し、数値計算にかかる時間は膨大化する傾向があるため、数値計算にかかる時間の低減化を図るために、数値計算における行列演算にかかる時間の低減化を図ることが求められる。
例えば、所定行列の各要素の値を生成する行列演算を、複数のスレッドを用いて効率よく実現することが考えられる。具体的には、行列Aと行列Bとの内積演算により行列Cの各要素の値を生成する行列演算と等価な、行列Cを行方向または列方向に同程度の大きさに分割した複数の部分行列の各要素の値を生成する複数の行列演算を、複数のスレッドで並列して実行することがある。行列Aは、M×K行列であり、行列Bは、K×N行列であり、行列Cは、M×N行列である。ここで、a×bは、a行b列であることを示す。
また、行列演算を実現する処理のうち、行列演算に用いるデータをメモリから読み出すロード処理と、行列演算を実行する演算処理とでは、ロード処理にかかる時間の方が大きくなる傾向がある。このため、メモリから読み出してキャッシュ、または、レジスタに保持したデータを、複数の演算処理に活用することができるように、行列演算に用いられる行列Aや行列Bを所定ブロックサイズ単位で扱うことが好ましい。行方向の所定ブロックサイズと、列方向の所定ブロックサイズとは異なってもよい。
そこで、複数のスレッドのそれぞれのスレッドが実行する行列演算を効率化するために、複数のスレッドのそれぞれのスレッドに対してキャッシュブロッキングの技術、および、レジスタブロッキングの技術が適用される場合がある。キャッシュブロッキングの技術、および、レジスタブロッキングの技術は、行列演算に用いられる行列Aや行列Bを所定ブロックサイズ単位で扱うための技術である。キャッシュブロッキングの技術、および、レジスタブロッキングの技術については、下記参考文献1を参照することができる。
参考文献1:Whaley, R. Clint, Antoine Petitet, and Jack J. Dongarra. “Automated empirical optimizations of software and the ATLAS project.” Parallel Computing 27.1 (2001): 3−35.
しかしながら、この場合であっても、いずれかの行列演算の実行効率が悪いことがあるため、いずれかの行列演算がボトルネックになってしまい、複数のスレッドで並列して実行する複数の行列演算全体にかかる時間の増大化を招いてしまうことがある。例えば、行列Cから分割された部分行列の行方向または列方向の大きさが、レジスタブロッキングの所定ブロックサイズ単位のサイズで割り切れる大きさではない場合に、その部分行列の各要素を生成する行列演算の実行効率が悪くなってしまう。
そこで、本実施の形態では、所定数のスレッドのそれぞれのスレッドに割り当てた行列演算にかかる時間の均一化を図ることにより、ボトルネックをなくして、所定数の行列演算全体にかかる時間の低減化を図るマルチスレッド行列演算方法について説明する。
図1において、情報処理装置100は、所定数のスレッドを生成する。情報処理装置100は、例えば、4個のスレッドT1〜T4を生成する。スレッドは、プログラムの実行単位である。スレッドは、割り当てられた行列演算を実行する。
(1−1)情報処理装置100は、所定行列を、所定数の第1部分行列と、所定数の第1部分行列とは異なる所定数の第2部分行列とに分割する。所定行列は、行列演算により各要素の値が生成される行列である。所定行列は、例えば、内積演算により得られる行列である。図1の例では、所定行列は、行列Aと行列Bとの内積演算により得られる行列Cである。
第1部分行列は、行方向と列方向との少なくともいずれかの方向の大きさが行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる部分行列である。レジスタ数に対応するブロックサイズは、レジスタブロッキングの技術が適用され、行列を所定ブロックサイズ単位で扱う場合の、所定ブロックサイズである。第1部分行列は、所定数存在する。第2部分行列は、所定数存在する。
情報処理装置100は、例えば、行列Cを、行方向の先頭から、行方向にブロックサイズの倍数単位で4個に分割し、4個の第1部分行列C11,C12,C13,C14を特定する。また、情報処理装置100は、例えば、行列Cのうち4個の第1部分行列C11,C12,C13,C14以外の領域を4個に分割し、4個の第2部分行列C21,C22,C23,C24を特定する。また、情報処理装置100は、4個の第2部分行列C21,C22,C23,C24を特定してから、4個の第1部分行列C11,C12,C13,C14を特定してもよい。
(1−2)情報処理装置100は、所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、所定数の第2部分行列のそれぞれの第2部分行列の各要素の値とを生成する行列演算を、所定数のスレッドのそれぞれのスレッドに割り当てる。
情報処理装置100は、例えば、第1部分行列C11の各要素の値を生成する行列演算と、第2部分行列C21の各要素の値を生成する行列演算とを、スレッドT1に割り当てる。情報処理装置100は、例えば、第1部分行列C12の各要素の値を生成する行列演算と、第2部分行列C22の各要素の値を生成する行列演算とを、スレッドT2に割り当てる。情報処理装置100は、例えば、第1部分行列C13の各要素の値を生成する行列演算と、第2部分行列C23の各要素の値を生成する行列演算とを、スレッドT3に割り当てる。情報処理装置100は、例えば、第1部分行列C14の各要素の値を生成する行列演算と、第2部分行列C24の各要素の値を生成する行列演算とを、スレッドT4に割り当てる。
これにより、情報処理装置100は、所定数のスレッドによって、所定行列の各要素の値を生成する行列演算と等価になる複数の行列演算を実行し、所定行列の各要素の値を生成することを可能にすることができる。情報処理装置100は、それぞれのスレッドに割り当てた行列演算にかかる時間の均一化を図り、いずれかの行列演算がボトルネックになりづらくし、所定数の行列演算全体にかかる時間の低減化を図ることができる。
例えば、従来、所定行列を行方向に同程度の大きさに分割する場合、等分割することができない余りの列の各要素を生成する行列演算が、いずれかのスレッドに纏めて割り当てられ、ボトルネックになることがある。これに対し、情報処理装置100は、所定行列のうち、第1部分行列とは異なる領域を、さらに第2部分行列に分割するため、それぞれのスレッドに割り当てた行列演算にかかる時間が均一化され、ボトルネックをなくすことができる。
ここでは、情報処理装置100が、第1部分行列に、行方向と列方向との少なくともいずれかの方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いる場合について説明したが、これに限らない。例えば、情報処理装置100が、所定行列の形状が、行方向にブロックサイズの倍数分の大きさにならない形状である傾向がある場合、第1部分行列に、行方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いるようにしてもよい。
また、例えば、情報処理装置100が、所定行列の形状が、列方向にブロックサイズの倍数分の大きさにならない形状である傾向がある場合、第1部分行列に、列方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いるようにしてもよい。また、例えば、情報処理装置100が、所定行列の形状に応じて、第1部分行列として、行方向の大きさがブロックサイズの倍数分の大きさになる部分行列と、列方向の大きさがブロックサイズの倍数分の大きさになる部分行列とを使い分ける場合があってもよい。
ここでは、情報処理装置100が、第1部分行列の右側に第2部分行列が存在するように所定行列を分割する場合について説明したが、これに限らない。例えば、情報処理装置100が、第2部分行列の右側に第1部分行列が存在するように所定行列を分割する場合があってもよい。また、情報処理装置100が、第1部分行列の上側または下側に第2部分行列が存在するように所定行列を分割する場合があってもよい。
(情報処理装置100のハードウェア構成例)
次に、図2を用いて、図1に示した情報処理装置100のハードウェア構成例について説明する。
図2は、情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、複数のコア201と、メモリ202と、ネットワークI/F(Interface)203と、記録媒体I/F204と、記録媒体205とを有する。また、各構成部は、バス200によってそれぞれ接続される。
ここで、いずれかのコア201は、情報処理装置100の全体の制御を司る。それぞれのコア201は、演算装置211と、キャッシュ212と、レジスタ213とを有する。演算装置211は、所定処理を実行する。演算装置211は、例えば、行列演算を割り当てられたスレッドを実行する。キャッシュ212は、演算装置211が利用するデータを一時的に記憶する。レジスタ213は、演算装置211が読み出したデータを一時的に記憶する。
メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがコア201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、コア201にロードされることで、コーディングされている処理をコア201に実行させる。
ネットワークI/F203は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F203は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F203には、例えば、モデムやLANアダプタなどを採用することができる。
記録媒体I/F204は、コア201の制御に従って記録媒体205に対するデータのリード/ライトを制御する。記録媒体I/F204は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体205は、記録媒体I/F204の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体205は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体205は、情報処理装置100から着脱可能であってもよい。
情報処理装置100は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、プリンタ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F204や記録媒体205を有していなくてもよい。
(情報処理装置100の機能的構成例)
次に、図3を用いて、情報処理装置100の機能的構成例について説明する。
図3は、情報処理装置100の機能的構成例を示すブロック図である。図3に示すように、情報処理装置100は、記憶部300と、取得部301と、分割部302と、実行部303と、生成部304と、出力部305とを含む。
記憶部300は、例えば、図2に示したメモリ202や記録媒体205などの記憶領域によって実現される。取得部301〜出力部305は、制御部となる機能である。取得部301〜出力部305は、具体的には、例えば、図2に示したメモリ202や記録媒体205などの記憶領域に記憶されたプログラムをコア201に実行させることにより、または、ネットワークI/F203により、その機能を実現する。各機能部の処理結果は、例えば、図2に示したメモリ202や記録媒体205などの記憶領域に記憶される。
記憶部300は、分割部302が所定行列を分割する1以上の分割方法を記憶する。所定行列は、行列演算により各要素の値が生成される行列である。所定行列は、例えば、いくつかの行列を用いた行列演算により生成される。所定行列は、具体的には、第1行列と第2行列との内積演算により生成される。これにより、記憶部300は、分割部302に1以上の分割方法を参照させることができ、分割部302に1以上の分割方法を使い分けさせることができる。
取得部301は、所定行列の各要素の値を生成する行列演算に用いる入力行列を取得する。取得部301は、例えば、所定行列の各要素の値を生成する内積演算に用いる第1行列と第2行列とを取得する。これにより、取得部301は、実行部303に入力行列を参照させ、実行部303に所定行列の各要素の値を生成させることができる。
分割部302は、所定行列を、所定数の第1部分行列と、所定数の第1部分行列とは異なる所定数の第2部分行列とに分割する。第1部分行列は、行方向と列方向との少なくともいずれかの方向の大きさが行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる部分行列である。ブロックサイズは、例えば、レジスタブロッキングの技術における所定ブロックサイズである。第1部分行列は、所定数存在する。第2部分行列は、所定数存在する。
分割部302は、例えば、所定行列を、行方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割する。これにより、分割部302は、所定行列の行方向の大きさがブロックサイズで割り切れない場合、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
分割部302は、例えば、所定行列を、列方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割する。これにより、分割部302は、所定行列の列方向の大きさがブロックサイズで割り切れない場合、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
分割部302は、例えば、所定行列の行方向の大きさをブロックサイズで除算した第1剰余と、所定行列の列方向の大きさをブロックサイズで除算した第2剰余とを比較する。ここで、分割部302は、比較した結果、第1剰余が第2剰余より小さい場合、所定行列を、行方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割する。
一方で、分割部302は、比較した結果、第1剰余が第2剰余より大きい場合、所定行列を、列方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割する。これにより、分割部302は、所定行列を分割する分割方法を使い分け、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
実行部303は、所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、所定数のスレッドのそれぞれのスレッドに割り当てる。実行部303は、例えば、n個の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、n個の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、n個のスレッドのそれぞれのスレッドに割り当てる。これにより、実行部303は、それぞれのスレッドに割り当てた行列演算にかかる時間の均一化を図り、所定数の行列演算全体にかかる時間の低減化を図ることができる。
生成部304は、それぞれのスレッドから、それぞれの第1部分行列の各要素の値と、それぞれの第2部分行列の各要素の値とを取得する。そして、生成部304は、取得したそれぞれの第1部分行列の各要素の値と、取得したそれぞれの第2部分行列の各要素の値とを組み合わせて、所定行列の各要素の値を生成する。これにより、生成部304は、所定行列の各要素の値を生成する行列演算を実質的に実行完了することができる。
出力部305は、生成部304が生成した所定行列を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F203による外部装置への送信、または、メモリ202や記録媒体205などの記憶領域への記憶である。出力部305は、各機能部の処理結果を出力してもよい。これにより、出力部305は、情報処理装置100の利用者に、生成部304が生成した所定行列、または各機能部の処理結果などを利用させることができる。また、出力部305は、他のプログラムに、生成部304が生成した所定行列、または各機能部の処理結果などを利用させることができる。
(情報処理装置100の複数のスレッドを用いた行列演算の流れ)
次に、図4〜図8を用いて、情報処理装置100の複数のスレッドを用いた行列演算の流れについて説明する。
図4〜図8は、情報処理装置100の複数のスレッドを用いた行列演算の流れを示す説明図である。図4において、情報処理装置100は、行列Aと行列Bとの内積演算によって各要素が生成される行列Cを、部分行列C1と部分行列C2とに分割する。
ここで、部分行列C1は、行方向のi1列目を先頭にして、行方向の大きさn1が、(nth×nrb)の倍数分の大きさになる部分行列である。i1は、1である。nthは、スレッド数である。nrbは、ブロックサイズである。n1は、例えば、N−MOD(N,nth×nrb)によって算出することができる。MOD(a,b)は、剰余を算出する関数であり、aをbで除算した場合の余りを示す。
部分行列C2は、行方向のi2列目を先頭にして、行方向の大きさn2が、Nを(nth×nrb)で除算した余りの分の大きさになる部分行列である。i2は、N−MOD(N,nth×nrb)+1である。n2は、例えば、MOD(N,nth×nrb)によって算出することができる。ここで、図5の説明に移行する。
図5において、情報処理装置100は、部分行列C1を行方向にスレッド数nthで分割し、行方向の大きさがブロックサイズnrbの倍数分の大きさである部分行列C11,C12,C13,C14を特定する。部分行列C11,C12,C13,C14の行方向の大きさは、(N−MOD(N,nth×nrb))/nthである。情報処理装置100は、部分行列C11,C12,C13,C14の各要素の値を生成する行列演算を、nth個のスレッドのそれぞれのスレッドに割り当てる。ここで、図6の説明に移行する。
図6において、情報処理装置100は、部分行列C2を列方向にスレッド数nthで分割し、列方向の大きさが同程度の大きさである部分行列C21,C22,C23,C24を特定する。部分行列C21,C22,C23,C24の行方向の大きさは、MOD(N,nth×nrb)である。情報処理装置100は、部分行列C21,C22,C23,C24の各要素の値を生成する行列演算を、nth個のスレッドのそれぞれのスレッドに割り当てる。
図6の例では、斜線部分は、行方向にブロックサイズ単位で割った場合に、割り切ることができない余りの列であり、斜線部分の各要素の値を生成する行列演算の効率は、他の部分の各要素を生成する行列演算に比べて悪い傾向がある。これに対し、情報処理装置100は、斜線部分にかかる行列演算をnth個のスレッドで分担することができ、それぞれのスレッドにかかる処理負荷の均一化を図ることができる。ここで、図7の説明に移行する。
図7において、情報処理装置100は、キャッシュブロッキングの技術、および、レジスタブロッキングの技術とを用いて、nth個のスレッドのそれぞれのスレッドによって、それぞれのスレッドに割り当てられた行列演算を実行する。ここで、1つのスレッドは、例えば、1つのコアにおいて実現される。
スレッドは、例えば、部分行列C11の各要素の値を生成する行列演算が割り当てられた場合、行列Cと部分行列C11との関係に基づいて、行列Bを行方向に分割した部分行列B11を特定する。部分行列B11は、例えば、部分行列C11と行方向の先頭になる列が同一であり、部分行列C11と行方向の大きさが同一である。そして、スレッドは、行列Aと部分行列B11の内積演算を実行し、部分行列C11の各要素の値を生成する。
スレッドは、同様に、部分行列C12の各要素の値を生成する行列演算が割り当てられた場合、行列Aと部分行列B12の内積演算を実行し、部分行列C12の各要素の値を生成する。また、スレッドは、同様に、部分行列C13の各要素の値を生成する行列演算が割り当てられると、行列Aと部分行列B13の内積演算を実行し、部分行列C13の各要素の値を生成する。
また、スレッドは、同様に、部分行列C14の各要素の値を生成する行列演算が割り当てられると、行列Aと部分行列B14の内積演算を実行し、部分行列C14の各要素の値を生成する。これにより、情報処理装置100は、nth個のスレッドによって、ブロックサイズ単位で、効率よく部分行列C1の各要素の値を生成することができる。ここで、図8の説明に移行する。
図8において、スレッドは、例えば、部分行列C21の各要素の値を生成する行列演算が割り当てられた場合、行列Cと部分行列C21との関係に基づいて、行列Aを列方向に分割した部分行列A1を特定する。部分行列A1は、例えば、部分行列C21と列方向の先頭になる行が同一であり、部分行列C21と列方向の大きさが同一である。
また、スレッドは、行列Cと部分行列C21との関係に基づいて、行列Bを行方向に分割した部分行列B2を特定する。部分行列B2は、例えば、部分行列C21と行方向の先頭になる列が同一であり、部分行列C21と行方向の大きさが同一である。部分行列B2は、行方向にブロックサイズ単位で割った場合に、割り切ることができない余りの列に対応する部分行列B3を含む。そして、スレッドは、行列A1と部分行列B2の内積演算を実行し、部分行列C21の各要素の値を生成する。
スレッドは、同様に、部分行列C22の各要素の値を生成する行列演算が割り当てられた場合、行列A2と部分行列B2の内積演算を実行し、部分行列C22の各要素の値を生成する。また、スレッドは、同様に、部分行列C23の各要素の値を生成する行列演算が割り当てられた場合、行列A3と部分行列B2の内積演算を実行し、部分行列C23の各要素の値を生成する。
また、スレッドは、同様に、部分行列C24の各要素の値を生成する行列演算が割り当てられた場合、行列A4と部分行列B2の内積演算を実行し、部分行列C24の各要素の値を生成する。これにより、情報処理装置100は、それぞれのスレッドに割り当てられた行列演算にかかる時間の均一化を図ることができ、nth個のスレッドに割り当てられた行列演算全体にかかる時間の低減化を図ることができる。
例えば、部分行列B3を用いた行列演算は、ブロックサイズ単位で割り切れず、効率よく各要素の値を生成することが難しい。このため、nth個のスレッドのいずれかのスレッドだけが、部分行列B3を用いた行列演算を担当する場合では、そのスレッドがボトルネックになってしまい、nth個のスレッドに割り当てられた行列演算全体にかかる時間の増大化を招いてしまう。これに対し、情報処理装置100は、部分行列B3を用いた行列演算を、nth個のスレッドで分担し、それぞれのスレッドにかかる負荷の均一化を図ることができる。
(情報処理装置100の複数のスレッドを用いた行列演算の実施例)
次に、図9〜図11を用いて、行列Aと行列Bと行列Cとの大きさに具体的な値を設定して、情報処理装置100の複数のスレッドを用いた行列演算の実施例について説明する。
図9〜図11は、情報処理装置100の複数のスレッドを用いた行列演算の実施例を示す説明図である。情報処理装置100は、nth個のスレッドのそれぞれのスレッドを、nth個のコアのそれぞれのコアにおいて生成する。nthは、16であるとする。それぞれのスレッドの通し番号をithとする。ithは、0〜nth−1の整数である。
以下では、情報処理装置100が、生成した16個のスレッドによって、320×100の行列Aと、100×150の行列Bとの内積演算を実行することにより、320×150の行列Cの各要素の値を生成する場合について説明する。行方向のブロックサイズnrbは、4であるとする。列方向のブロックサイズmrbは、4であるとする。それぞれのスレッドは、図10および図11のように演算処理を実行する。ここで、図10の説明に移行する。
図10において、スレッドは、行列Cを、行方向に分割し、ブロックサイズ4で割り切ることができる320×128の部分行列C1と、ブロックサイズ4で割り切ることができない320×22の部分行列C2を特定する。
スレッドは、例えば、部分行列C1の行方向の先頭になる列の番号i1=1と設定し、部分行列C1の行方向の大きさn1=N−MOD(N,nth×nrb)を算出することにより、部分行列C1を特定する。
また、スレッドは、部分行列C2の行方向の先頭になる列の番号i2=N−MOD(N,nth×nrb)+1を算出し、部分行列C2の行方向の大きさn2=MOD(N,nth×nrb)を算出することにより、部分行列C2を特定する。
スレッドは、具体的には、部分行列C1の行方向の先頭になる列の番号i1=1と設定する。また、スレッドは、部分行列C1の行方向の大きさn1=N−MOD(N,nth×nrb)=150−MOD(150,16×4)=128を算出する。これにより、スレッドは、部分行列C1を特定する。
また、スレッドは、部分行列C2の行方向の先頭になる列の番号i2=N−MOD(N,nth×nrb)+1=150−MOD(150,16×4)+1=129を算出する。また、スレッドは、部分行列C2の行方向の大きさn2=MOD(N,nth×nrb)=MOD(150,16×4)=22を算出する。これにより、スレッドは、部分行列C2を特定する。ここで、図11の説明に移行する。
図11において、スレッドは、部分行列C1を行方向にスレッド数16で分割し、行方向の大きさがブロックサイズ4の倍数8の大きさである、16個の部分行列を特定する。部分行列の行方向の大きさは、(N−MOD(N,nth×nrb))/nthである。
次に、スレッドは、16個の部分行列のいずれかの部分行列の各要素の値を生成する行列演算を、自スレッドに割り当てる。スレッドは、例えば、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、行方向の大きさnn=n1/nthと、行方向の先頭になる列の番号in=1+nn×ithとを算出する。
通し番号0のスレッドth0は、具体的には、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、行方向の大きさnn=n1/nth=128/16=8と、行方向の先頭になる列の番号in=1+nn×ith=1+8×0とを算出する。これにより、通し番号0のスレッドth0は、自スレッドに割り当てる部分行列を特定する。
そして、スレッドは、自スレッドに割り当てた部分行列の各要素の値を生成する行列演算を実行する。スレッドは、例えば、A(1:M,1:K)×B(1:K,in:in+nn−1)→C(1:M, in:in+nn−1)によって、行列演算を実行する。
ここで、A(a:b,c:d)は、行列Aのa〜b行かつc〜d列の要素の値を示す。B(a:b,c:d)は、行列Bのa〜b行かつc〜d列の要素の値を示す。C(a:b,c:d)は、行列Cのa〜b行かつc〜d列の要素の値を示す。「→」は、行列Aと行列Bとの要素の値を用いた内積演算の結果を、行列Cの要素の値に設定することを示す。
スレッドは、部分行列C2を列方向にスレッド数16で分割し、列方向の大きさが20の大きさである、16個の部分行列を特定する。スレッドは、部分行列C2の列方向の大きさがスレッド数16で割り切れない場合、割り切れない余りの分の行をそれぞれの部分行列に振り分け、または、末尾の部分行列に振り分ける。
次に、スレッドは、16個の部分行列のいずれかの部分行列の各要素の値を生成する行列演算を、自スレッドに割り当てる。スレッドは、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、列方向の先頭になる行の番号im=1+mw×ith+MIN(MOD(M,nth),ith)を算出する。mw=M/nthである。MIN(a,b)は、aとbとのうち小さい方を示す。また、スレッドは、例えば、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、列方向の大きさmm=1+mw×(ith+1)+MIN(MOD(M,nth),ith+1)−imを算出する。
通し番号0のスレッドth0は、具体的には、mw=M/nth=20を算出する。通し番号0のスレッドth0は、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、列方向の先頭になる行の番号im=1+mw×ith+MIN(MOD(M,nth),ith)=1を算出する。通し番号0のスレッドth0は、自スレッドに各要素の値を生成する行列演算を割り当てられる部分行列の、列方向の大きさmm=1+nw×(ith+1)+MIN(MOD(M,nth),ith+1)−im=20を算出する。これにより、通し番号0のスレッドth0は、自スレッドに割り当てる部分行列を特定する。
そして、スレッドは、自スレッドに割り当てた部分行列の各要素の値を生成する行列演算を実行する。スレッドは、例えば、A(im:im+mm−1,1:K)×B(1:K,i2:i2+n2−1)→C(im:im+mm−1,i2:i2+n2−1)によって、行列演算を実行する。情報処理装置100は、16個のスレッドが行列演算を終了すると、16個のスレッドを終了する。これにより、情報処理装置100は、行列Cの各要素の値を生成することができる。
ここで、従来のように、行列Cを、行方向に16個に同程度の大きさに分割して、16個のスレッドで分担する場合が考えられる。例えば、320×150の行列Cを分割する場合、スレッドth0〜th5に320×10の部分行列にかかる行列演算が割り当てられ、スレッドth6〜th15に320×9の部分行列にかかる行列演算が割り当てられる。この場合、320×10の部分行列にかかる行列演算も、320×9の部分行列にかかる行列演算も、ブロックサイズ4で割り切ることができないため、演算効率が悪い。例えば、320×10の部分行列にかかる行列演算も、320×9の部分行列にかかる行列演算も、ブロックサイズ4で割り切ることができる320×12の部分行列にかかる行列演算と同様の演算効率になってしまう。
結果として、それぞれのスレッドが、320×12の部分行列にかかる行列演算を実行した場合と同等の時間がかかってしまう。具体的には、1スレッドあたりの計算時間は、320×(ceiling(10/nrb)×nrb)×100=432000回の積和演算を実行する時間に等しくなってしまう。ceilingは、値の小数点以下を切り上げることを示す。
これに対し、情報処理装置100は、行列Cを、行方向にブロックサイズで割り切ることができる部分行列C1と、行方向にブロックサイズで割り切ることができない余りの部分を含む部分行列C2とに分割する。これにより、情報処理装置100は、行方向にブロックサイズで割り切ることができる部分行列C1にかかる行列演算については、効率よく実行することができる。
そして、情報処理装置100は、部分行列C2を16個のスレッドで分担し、それぞれのスレッドが20×22の部分行列にかかる行列演算を実行するようにする。これにより、情報処理装置100は、20×22の部分行列のうち、20×20の部分行列については、効率よく実行することができる。また、情報処理装置100は、それぞれのスレッドに20×2の部分行列にかかる行列演算を実行させ、それぞれのスレッドにかかる負荷の均一化を図ることができる。
このように、情報処理装置100は、16個のスレッドが実行する行列演算全体にかかる時間の低減化を図ることができる。具体的には、1スレッドあたりの計算時間は、320×(ceiling(8/nrb)×nrb)×100 + 20×(ceiling(22/nrb)×nrb)×100=336000回の積和演算を実行する時間に等しくなる。
したがって、情報処理装置100は、16個のスレッドが実行する行列演算全体にかかる時間を、従来と比べて約20%低減化することができる。また、情報処理装置100は、数値計算に行列演算が含まれる場合に、数値計算全体にかかる時間を低減化することができる。
ここでは、情報処理装置100が、第1部分行列に、行方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いる場合について説明した。これにより、情報処理装置100は、所定行列の形状が、行方向の大きさがブロックサイズで割り切れない形状である傾向がある場合に対して、複数のスレッドが実行する行列演算全体にかかる時間の低減化を図ることができる。
一方で、情報処理装置100は、第1部分行列に、列方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いる場合があってもよい。これにより、情報処理装置100は、所定行列の形状が、列方向の大きさがブロックサイズで割り切れない形状である傾向がある場合に対して、複数のスレッドが実行する行列演算全体にかかる時間の低減化を図ることができる。
ここで、所定行列の形状が、行方向の大きさがブロックサイズで割り切れず、かつ、列方向の大きさがブロックサイズで割り切れない形状である場合がある。この場合、行方向および列方向のうち、ブロックサイズで割った剰余が小さいほど、ブロックサイズ単位で扱った場合に、行列演算にかかる時間の増大化を招きやすい。
具体的には、行方向にブロックサイズで割った余りの列が1列である場合、余りの1列を扱うためには、ブロックサイズ分の列、例えば、4列を扱う場合と同様の時間がかかる傾向がある。一方で、列方向にブロックサイズで割った余りの行が3行である場合、余りの3行を扱うためには、ブロックサイズ分の行、例えば、4行を扱う場合と同様の時間がかかる傾向がある。
この具体例では、情報処理装置100が、第1部分行列に、行方向の大きさがブロックサイズの倍数分の大きさになる部分行列を用いる方が、複数のスレッドが実行する行列演算全体にかかる時間の低減化を図りやすい可能性がある。
そこで、情報処理装置100は、所定行列の形状に応じて、第1部分行列として、行方向の大きさがブロックサイズの倍数分の大きさになる部分行列と、列方向の大きさがブロックサイズの倍数分の大きさになる部分行列とを使い分ける場合があってもよい。これにより、情報処理装置100は、所定行列を分割する分割方法を使い分け、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
ここでは、複数のスレッドが、自スレッドが担当する行列演算を特定し、特定した行列演算を実行する場合について説明したが、これに限らない。例えば、情報処理装置100が、それぞれのスレッドに割り当てる行列演算を管理し、それぞれのスレッドに行列演算を実行させてもよい。
(行列演算処理手順の一例)
次に、図12を用いて、行列演算処理手順の一例について説明する。
図12は、行列演算処理手順の一例を示すフローチャートである。図12において、情報処理装置100は、行列演算に用いられる行列Aと、行列演算に用いられる行列Bと、行列演算により各要素の値が生成される行列Cと、行列A,B,Cの大きさを規定する変数M,N,Kとの入力を受け付ける(ステップS1201)。行列Cは、例えば、各要素の値が初期化されており、行列演算によって更新される。
次に、情報処理装置100は、行列演算を割り当てる、nth個のスレッドを生成する(ステップS1202)。nth個のスレッドは、それぞれ、通し番号ithが割り振られる。ithは、例えば、0〜nth−1の整数である。
そして、情報処理装置100は、それぞれのスレッドによって、行列Cを、i1番目の列を先頭にして行方向の大きさがn1である部分行列C1と、i2番目の列を先頭にして行方向の大きさがn2である部分行列C2とに分割する(ステップS1203)。i1は、例えば、1である。n1は、例えば、N−MOD(N,nth×nrb)である。i2は、例えば、N−MOD(N,nth×nrb)+1である。n2は、例えば、MOD(N,nth×nrb)である。
次に、情報処理装置100は、それぞれのスレッドによって、部分行列C1を行方向に等分割して、in番目の列を先頭にして行方向の大きさがnnである部分行列を、当該スレッドが担当する部分行列に決定する(ステップS1204)。通し番号ithのスレッドは、部分行列C1を等分割した部分行列のうち、行方向の先頭からith+1番目の部分行列を、自スレッドが担当する部分行列に決定する。
そして、情報処理装置100は、それぞれのスレッドによって、キャッシュブロッキングの技術、および、レジスタブロッキングの技術を適用して、当該スレッドが担当する部分行列の各要素の値を生成する(ステップS1205)。スレッドが担当する部分行列の各要素の値C(1:M,in:in+nn−1)は、例えば、行列Aの各要素の値A(1:M,1:K)×行列Bの各要素の値B(1:K,in:in+nn−1)である。
次に、情報処理装置100は、それぞれのスレッドによって、部分行列C2を列方向にnth個に分割して、im番目の行を先頭にして列方向の大きさがmmである部分行列を、当該スレッドが担当する部分行列に決定する(ステップS1206)。通し番号ithのスレッドは、部分行列C2を等分割した部分行列のうち、列方向の先頭からith+1番目の部分行列を、自スレッドが担当する部分行列に決定する。
そして、情報処理装置100は、それぞれのスレッドによって、キャッシュブロッキングの技術、および、レジスタブロッキングの技術を適用して、当該スレッドが担当する部分行列の各要素の値を生成する(ステップS1207)。スレッドが担当する部分行列の各要素の値C(im:im+mm−1,2:i2+n2−1)は、例えば、行列Aの各要素の値A(im:im+mm−1,1:K)×行列Bの各要素の値B(1:K,i2:i2+n2−1)である。
次に、情報処理装置100は、複数のスレッドから行列演算の演算結果を取得すると、複数のスレッドを終了する(ステップS1208)。そして、情報処理装置100は、取得した演算結果に基づいて、行列Cの各要素の値を設定して、行列Cを出力する(ステップS1209)。これにより、情報処理装置100は、行列Cの各要素の値を効率よく生成することができる。
以上説明したように、情報処理装置100によれば、所定行列を、行方向と列方向との少なくともいずれかの方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割することができる。情報処理装置100によれば、それぞれの第1部分行列の各要素の値を生成する行列演算と、それぞれの第2部分行列の各要素の値を生成する行列演算とを、所定数のスレッドのそれぞれのスレッドに割り当てることができる。これにより、情報処理装置100は、それぞれのスレッドに割り当てた行列演算にかかる時間の均一化を図り、所定数の行列演算全体にかかる時間の低減化を図ることができる。
情報処理装置100によれば、所定行列を、行方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割することができる。これにより、情報処理装置100は、所定行列の行方向の大きさがブロックサイズで割り切れない場合、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
情報処理装置100によれば、所定行列を、列方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割することができる。これにより、情報処理装置100は、所定行列の列方向の大きさがブロックサイズで割り切れない場合、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
情報処理装置100によれば、所定行列の行方向の大きさをブロックサイズで除算した第1剰余と、所定行列の列方向の大きさをブロックサイズで除算した第2剰余とを比較することができる。情報処理装置100によれば、比較した結果、第1剰余が第2剰余より小さい場合、所定行列を、行方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割することができる。情報処理装置100によれば、比較した結果、第1剰余が第2剰余より大きい場合、所定行列を、列方向の大きさがブロックサイズの倍数分の大きさになる所定数の第1部分行列と、所定数の第2部分行列とに分割することができる。これにより、情報処理装置100は、所定行列を分割する分割方法を使い分け、所定数のスレッドに割り当てる行列演算全体にかかる時間を効率よく低減化することができる。
情報処理装置100によれば、それぞれのスレッドから、それぞれの第1部分行列の各要素の値と、それぞれの第2部分行列の各要素の値とを取得することができる。情報処理装置100によれば、取得したそれぞれの第1部分行列の各要素の値と、取得したそれぞれの第2部分行列の各要素の値とを組み合わせて、所定行列の各要素の値を生成することができる。これにより、情報処理装置100は、所定行列の各要素の値を出力し、所定行列を活用可能にすることができる。
なお、本実施の形態で説明したマルチスレッド行列演算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明したマルチスレッド行列演算プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明したマルチスレッド行列演算プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
制御部を有することを特徴とする情報処理装置。
(付記2)前記制御部は、
前記所定行列を、行方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割する、ことを特徴とする付記1に記載の情報処理装置。
(付記3)前記制御部は、
前記所定行列を、列方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割する、ことを特徴とする付記1または2に記載の情報処理装置。
(付記4)前記制御部は、
前記所定行列の行方向の大きさを前記ブロックサイズで除算した第1剰余と、前記所定行列の列方向の大きさを前記ブロックサイズで除算した第2剰余とを比較し、
比較した結果、前記第1剰余が前記第2剰余より小さい場合、前記所定行列を、行方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割し、
比較した結果、前記第1剰余が前記第2剰余より大きい場合、前記所定行列を、列方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割する、ことを特徴とする付記1〜3のいずれか一つに記載の情報処理装置。
(付記5)前記制御部は、
前記それぞれのスレッドから、前記それぞれの第1部分行列の各要素の値と、前記それぞれの第2部分行列の各要素の値とを取得し、
取得した前記それぞれの第1部分行列の各要素の値と、取得した前記それぞれの第2部分行列の各要素の値とを組み合わせて、前記所定行列の各要素の値を生成する、ことを特徴とする付記1〜4のいずれか一つに記載の情報処理装置。
(付記6)前記所定数のスレッドは、それぞれ、前記所定数の演算装置によって実現される、ことを特徴とする付記1〜5のいずれか一つに記載の情報処理装置。
(付記7)コンピュータが、
行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
処理を実行することを特徴とするマルチスレッド行列演算方法。
(付記8)コンピュータに、
行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
処理を実行させることを特徴とするマルチスレッド行列演算プログラム。
100 情報処理装置
200 バス
201 コア
202 メモリ
203 ネットワークI/F
204 記録媒体I/F
205 記録媒体
210 ネットワーク
300 記憶部
301 取得部
302 分割部
303 実行部
304 生成部
305 出力部

Claims (5)

  1. 行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
    分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
    制御部を有することを特徴とする情報処理装置。
  2. 前記制御部は、
    前記所定行列を、行方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割する、ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記制御部は、
    前記所定行列を、列方向の大きさが前記ブロックサイズの倍数分の大きさになる前記所定数の第1部分行列と、前記所定数の第2部分行列とに分割する、ことを特徴とする請求項1または2に記載の情報処理装置。
  4. コンピュータが、
    行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
    分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
    処理を実行することを特徴とするマルチスレッド行列演算方法。
  5. コンピュータに、
    行列演算により各要素の値が生成される所定行列を、行方向と列方向との少なくともいずれかの方向の大きさが前記行列演算に用いられるレジスタ数に対応するブロックサイズの倍数分の大きさになる所定数の第1部分行列と、前記所定数の第1部分行列とは異なる前記所定数の第2部分行列とに分割し、
    分割した前記所定数の第1部分行列のそれぞれの第1部分行列の各要素の値を生成する行列演算と、分割した前記所定数の第2部分行列のそれぞれの第2部分行列の各要素の値を生成する行列演算とを、前記所定数のスレッドのそれぞれのスレッドに割り当てる、
    処理を実行させることを特徴とするマルチスレッド行列演算プログラム。
JP2017101556A 2017-05-23 2017-05-23 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム Active JP6907700B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017101556A JP6907700B2 (ja) 2017-05-23 2017-05-23 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム
US15/978,761 US10528384B2 (en) 2017-05-23 2018-05-14 Information processing apparatus, multithread matrix operation method, and multithread matrix operation program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017101556A JP6907700B2 (ja) 2017-05-23 2017-05-23 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム

Publications (2)

Publication Number Publication Date
JP2018197906A JP2018197906A (ja) 2018-12-13
JP6907700B2 true JP6907700B2 (ja) 2021-07-21

Family

ID=64401244

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017101556A Active JP6907700B2 (ja) 2017-05-23 2017-05-23 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム

Country Status (2)

Country Link
US (1) US10528384B2 (ja)
JP (1) JP6907700B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019126030A1 (en) 2017-12-18 2019-06-27 Mythic, Inc. Systems and methods for mapping matrix calculations to a matrix multiply accelerator
CN111859273A (zh) * 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
CN109684602B (zh) * 2018-12-29 2023-06-06 上海商汤智能科技有限公司 一种批处理方法和装置及计算机可读存储介质
CN111753253B (zh) * 2020-06-28 2024-05-28 地平线(上海)人工智能技术有限公司 数据处理方法和装置
CN117724856B (zh) * 2024-02-08 2024-04-19 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及存储介质

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0782482B2 (ja) * 1989-05-19 1995-09-06 シャープ株式会社 ニューロコンピュータの負荷配分方法
JPH0675988A (ja) 1992-08-24 1994-03-18 Nec Corp Lu分解関数実現方式
US6675187B1 (en) * 1999-06-10 2004-01-06 Agere Systems Inc. Pipelined linear array of processor elements for performing matrix computations
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7003542B2 (en) * 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
WO2003060748A2 (en) * 2002-01-10 2003-07-24 Massively Parallel Technologies, Inc. Parallel processing systems and method
US7469266B2 (en) * 2003-09-29 2008-12-23 International Business Machines Corporation Method and structure for producing high performance linear algebra routines using register block data format routines
JP5110081B2 (ja) * 2007-04-19 2012-12-26 富士通株式会社 共有メモリ型スカラ並列計算機向け、実対称行列の三重対角化の並列処理方法
US8380778B1 (en) * 2007-10-25 2013-02-19 Nvidia Corporation System, method, and computer program product for assigning elements of a matrix to processing threads with increased contiguousness
CN101533386A (zh) * 2008-03-14 2009-09-16 国际商业机器公司 在多处理器***上对矩阵进行qr分解的方法和装置
JP2009245381A (ja) 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
CN102138146A (zh) * 2008-09-30 2011-07-27 埃克森美孚上游研究公司 使用并行多级不完全因式分解求解储层模拟矩阵方程的方法
JP5485069B2 (ja) * 2010-08-06 2014-05-07 パナソニック株式会社 誤り訂正復号装置及び誤り訂正復号方法
US9489176B2 (en) * 2011-09-15 2016-11-08 Exxonmobil Upstream Research Company Optimized matrix and vector operations in instruction limited algorithms that perform EOS calculations
JP5840994B2 (ja) * 2012-03-27 2016-01-06 富士通株式会社 行列演算装置
US9317482B2 (en) * 2012-10-14 2016-04-19 Microsoft Technology Licensing, Llc Universal FPGA/ASIC matrix-vector multiplication architecture
JP5884756B2 (ja) * 2013-03-21 2016-03-15 カシオ計算機株式会社 行列計算装置、行列計算方法、行列計算処理プログラム
JP6083300B2 (ja) * 2013-03-29 2017-02-22 富士通株式会社 プログラム、並列演算方法および情報処理装置
US20160177674A1 (en) * 2013-08-27 2016-06-23 Halliburton Energy Services, Inc. Simulating Fluid Leak-Off and Flow-Back in a Fractured Subterranean Region
GB2519761A (en) * 2013-10-29 2015-05-06 Ibm A method and a system for distributed processing of data records
US9886418B2 (en) * 2015-04-28 2018-02-06 Intel Corporation Matrix operands for linear algebra operations
JP6503902B2 (ja) * 2015-06-02 2019-04-24 富士通株式会社 並列計算機システム、並列計算方法及びプログラム
US10496855B2 (en) * 2016-01-21 2019-12-03 Hewlett Packard Enterprise Development Lp Analog sub-matrix computing from input matrixes
US10073815B2 (en) * 2016-05-31 2018-09-11 Palo Alto Research Cener Incorporated System and method for speeding up general matrix-matrix multiplication on the GPU
US10067910B2 (en) * 2016-07-01 2018-09-04 Palo Alto Research Center Incorporated System and method for GPU maximum register count optimization applied to general matrix-matrix multiplication
US10241971B2 (en) * 2016-12-15 2019-03-26 Hewlett Packard Enterprise Development Lp Hierarchical computations on sparse matrix rows via a memristor array
US10909447B2 (en) * 2017-03-09 2021-02-02 Google Llc Transposing neural network matrices in hardware
US10338919B2 (en) * 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
US10671349B2 (en) * 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine

Also Published As

Publication number Publication date
JP2018197906A (ja) 2018-12-13
US20180341517A1 (en) 2018-11-29
US10528384B2 (en) 2020-01-07

Similar Documents

Publication Publication Date Title
JP6907700B2 (ja) 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム
JP6726246B2 (ja) 畳み込みニューラルネットワークにおいて演算を実行する方法および装置並びに非一時的な記憶媒体
CN110678840B (zh) 张量寄存器文件
CN110678841B (zh) 张量处理器指令集架构
KR20180109619A (ko) 컨볼루션 신경망 처리 방법 및 장치
KR20180073118A (ko) 컨볼루션 신경망 처리 방법 및 장치
US20170206089A1 (en) Information processing apparatus and computational method
JP2009116854A (ja) スキャン演算を遂行するシステム、方法、及びコンピュータ・プログラムプロダクト
CN109885407B (zh) 数据处理方法和装置、电子设备、存储介质
US9904976B2 (en) High performance portable convulational neural network library on GP-GPUs
US9740493B2 (en) System and method of loop vectorization by compressing indexes and data elements from iterations based on a control mask
TW201942808A (zh) 深度學習加速器及加快深度學習操作的方法
Green Efficient scalable median filtering using histogram-based operations
JP5059928B2 (ja) Gpuを用いた乱数生成処理の並列化
JP6380952B2 (ja) 多数の要素からなる配列をソートする装置、方法およびプログラム
US9830731B2 (en) Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus
WO2019093451A1 (ja) データ処理装置、ループ制御装置、データ処理方法、ループ制御方法および記録媒体
US11907681B2 (en) Semiconductor device and method of controlling the semiconductor device
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
KR102574449B1 (ko) 데이터 처리 방법 및 장치
CN111507456A (zh) 具有卷积神经网络处理的方法和装置
KR101770122B1 (ko) Simd 프로세서를 이용하는 갈로아 필드 이진 다항식 제산 장치 및 방법
KR20210089247A (ko) 그래픽 처리 장치에서 행렬 곱셈의 파이프라인 처리
WO2020031281A1 (ja) 情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体
JP2020123125A (ja) 演算処理装置、演算処理方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210316

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210426

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: 20210601

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210614

R150 Certificate of patent or registration of utility model

Ref document number: 6907700

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150