JP2007317179A - 帯域幅要件が軽減された行列乗算 - Google Patents

帯域幅要件が軽減された行列乗算 Download PDF

Info

Publication number
JP2007317179A
JP2007317179A JP2007123710A JP2007123710A JP2007317179A JP 2007317179 A JP2007317179 A JP 2007317179A JP 2007123710 A JP2007123710 A JP 2007123710A JP 2007123710 A JP2007123710 A JP 2007123710A JP 2007317179 A JP2007317179 A JP 2007317179A
Authority
JP
Japan
Prior art keywords
matrix
operand
broadcast
operations
column
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.)
Pending
Application number
JP2007123710A
Other languages
English (en)
Inventor
Norbert Juffa
ジュッファ ノーバート
John R Nickolls
アール. ニッコールズ ジョン
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of JP2007317179A publication Critical patent/JP2007317179A/ja
Pending legal-status Critical Current

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
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead

Abstract

【課題】行列乗算演算への入力を読み出すために必要とされる帯域幅を削減し、システム性能を改善する。
【解決手段】第1の入力行列の行と第2の入力行列の列を読み出して積行列の列を生成するのではなく、第1の入力行列の列と第2の入力行列の単一の成分を読み出して積行列の部分内積の列を生成する。したがって、各積行列成分を生成するために読み出される入力行列成分の個数は、Nが積行列の列中の成分の個数であるとすると、2NからN+1に削減される。
【選択図】図1C

Description

発明の背景
<発明の分野>
[0001]本発明の実施の形態は、広く、マルチスレッド処理又はベクトル処理を使用する行列乗算の実行に関するものであり、より詳細には、メモリ帯域幅の削減に関するものである。
<関連技術の説明>
[0002]行列と行列の乗算は、高性能コンピューティング分野における多数の計算のための重要な基本要素である。行列と行列の乗算を実行するために使用される各積和演算は、メモリ内の二つのソースオペランドへのアクセスを必要とする。したがって、T個のスレッドを同時に実行し、各スレッドが積和演算を実行するマルチスレッド型プロセッサにおいては、2T個のメモリオペランドが演算の乗算部分のオペランドを供給するために必要とされる。同様に、Tレーンの単一命令多重データ(SIMD)ベクトルプロセッサ2TのようなT個のデータレーンを並列に実行するベクトルプロセッサでは、2T個のメモリオペランドがベクトル積和算毎に必要とされる。一般に、2T個の同時アクセス用のメモリ帯域幅を提供することは、Tが増加するにつれ難しくなり、従って、行列乗算は十分に大きなTに対してメモリ帯域幅制限付きになる。これによって、行列乗算に対する処理装置の全体的な計算性能が制限される。
[0003]したがって、積和演算用のオペランドを供給するために必要とされるメモリ帯域幅を削減して、行列乗算の計算性能を改善することが望まれている。
発明の概要
[0004]本発明は、マルチスレッド型プロセッサを使用する行列乗算のメモリ帯域幅要件を軽減する新しいシステム及び方法に関するものである。メモリ帯域幅要件は、行列乗算の所定のステップにおいて、T個の実行スレッド又はT個のベクトルレーンのグループが、二つのソースオペランドのうちの一つそれぞれの積和演算に共用するように、二つの行列の乗算を実行することによって、軽減される。これは、マルチスレッド処理装置内でのオペランドブロードキャストメカニズムの導入によって利用される。このブロードキャストメカニズムによって、あるメモリ記憶域の内容を、スレッドのグループ内のT個のスレッドの全て、又は、ベクトルのT個のレーンの全てへブロードキャストすることが可能となり、その値を、積和演算を構成する一以上の命令を含む実行中命令へのソースオペランドとして使用することができる。このメカニズムは、このブロードキャスト転送を制御するソフトウェア手段を提供する。ブロードキャストメカニズムが使用されると、積和算のような演算を実行するために必要とされるメモリ帯域幅要件が軽減される。
[0005]同時に実行される積和演算の各々について、スレッドのグループ内のT個の実行スレッドは、従来の行列乗算を実行する方法が使用されるときの2T個のメモリ記憶域ではなく、T+1個のメモリ記憶域だけにアクセスする。行列乗算演算のオペランドを獲得するために必要とされるメモリ帯域幅を削減することによって、メモリ帯域幅が制限されている場合に、行列乗算性能を改善することができる。さらに、その他のメモリ帯域幅制限付き演算の性能を改善することができる。
[0006]スレッドのグループ内の多重スレッド用のプログラム命令を実行する本発明の方法の種々の実施の形態は、プログラム命令に含まれるブロードキャストオペランドによって指定される第1の値を獲得するステップと、プログラム命令に含まれるパラレルオペランドによって指定される第2の値のセットを獲得するステップとを含み、第2の値の各々は、スレッドのグループ内の多重スレッドのうちの一つと対応する。第1の値は、複数のプログラム命令実行ユニットへ供給され、第2の値は、複数のプログラム命令実行ユニットへ供給され、プログラム命令は、スレッドのグループ内の多重スレッドのうちの各々について実行される。
[0007]第1の行列と第2の行列の第1の列とを乗算して、積行列の第1の列を生成するための本発明の方法の種々の実施の形態は、第1の行列の第1の列の各成分と第2の行列の第1の列の第1の成分とを乗算して積行列の第1の列に対応する第1のグループの成分を生成するステップと、積行列の列に対応する第1のグループの成分をレジスタのセットに格納するステップと、第1の行列の第2の列の各成分と第2の行列の第1の列の第2の成分とを乗算して積行列の第1の列に対応する第2のグループの成分を生成するステップと、格納されたグループの成分と第2のグループの成分のうちの対応の成分とを加算して、積行列の第1の列内の積成分のグループを生成するステップと、積成分のグループをレジスタのセットに格納するステップと、を含む。
[0008]本発明の上記の特徴が詳細に理解され得るよう、上に簡単に要約した本発明のより詳しい説明を、実施の形態を参照して行う。実施の形態のうちの一部を、添付の図面に示す。しかし、添付の図面は、本発明の典型的な実施の形態だけを示しており、本発明はその他の同等に効果的な実施の形態を含み得るので、添付図面は発明の範囲を制限するものと見なされるべきでないことに注意すべきである。
詳細な説明
[0013]以下の説明では、多数の具体的な詳細を、本発明をより完全に理解するために記載する。しかしながら、本発明はこれらの具体的な詳細を用いることなく実施し得ることが当業者には明らかであろう。他の例では、よく知られている特徴については、本発明を不明確にすることを避けるために説明していない。
[0014]図1Aは、本発明の一以上の態様に従って行列C 103を生成するために乗算される行列A 101及び行列B 102の概念図を示している。従来は、内積は、行列C 103の列の成分を生成するために、行列A 101の行中の成分と行列B 102の列中の成分を使用して計算される。例えば、行列A 101の行107中の成分と、行列B 102の列105中の成分、例えば、131、132及び146とが使用されて、行列C 103の列104中の成分152が生成される。多重実行スレッドが行列C 103を生成するために従来型システムにおいて使用され、各スレッドが行列Cの成分を生成する場合には、各スレッドは、行列A 101から成分を読み出し、行列B 102から成分を読み出して、行列C 103の列(又は行)を生成する順次の積和演算を実行する。上述したように、従来型システムでは、T個のスレッドが並列に処理される場合に、2T個の成分が積和演算の各々についてに読み出される。
[0015]本発明では、複数の成分を行列A 101から読み出し、複数の成分を行列B 102から読み出して、行列C 103の列を生成するのではなく、行列A 101の列と行列B 102の単一の成分とを読み出して、行列C 103の部分内積の列を生成する。例えば、列106と列105の成分131とを読み出し、乗算して積の列を形成する。積の列(即ち、成分111と成分131の積、成分112と成分131の積、成分113と成分131の積、成分114と成分131の積、以下同様に続く)を、次に、列104と加算して列104の部分内積を更新する。積の更なる列は、行列A 101の列と行列B 102の列105の成分とを使用して計算される。積の更なる列は、部分内積の列が完成するまで、部分内積の列と順次に累算される。したがって、各スレッドは、行列A 101の1列から成分を読み出し、行列B 102の1行から単一の成分を読み出してスレッドの全部によって共用して、積和算を実行する。行列C 103の各部分内積列を生成するために読み出された入力行列成分の個数は2TからT+1まで削減される。行列B 102から読み出された各成分は、T個のスレッドへブロードキャストされて、行列A 101の列の成分と乗算される。
[0016]図1Bは、本発明の一以上の態様に従って行列Cを生成するために行列Aと行列Bを乗算する典型的な方法のフローチャートを示している。ステップ170において、行列C 103の成分を格納するレジスタ又はメモリ記憶域が初期化される。例えば、各成分は値0に初期化される。ステップ171において、行列A 101の第1の列中の各成分が行列B 102の列の一つの成分と乗算される。例えば、第1のスレッドが、成分111を成分131と乗算し、第2のスレッドが、成分112を成分131と乗算する等して、積成分の列を生成する。ステップ172において、ステップ171で生成された各積成分が、行列C 103の列中の対応する成分と加算される。例えば、成分111及び131の積が成分151と加算され、部分内積が累算される。
[0017]ステップ173において、この方法は、別の成分が行列B 102の列中に存在しているか否かを判定する。例えば、成分131が行列C 103の列104の部分内積を累算するために使用された後、成分132が使用され、列中の最後の成分、即ち、成分146が使用されるまで、以下同様に続く。ステップ173において、この方法は、行列B 102の列中の成分の全部が使用されたと判定する場合に、ステップ175へ進む。そうでなければ、ステップ174において、この方法は、行列B 102の列中の次の成分を獲得し、行列A 174の次の列を獲得し、別の積を行列C 103の列104の各部分内積に累算するために、ステップ171、172及び173を繰り返す。行列B 102の列中の成分は、各成分が行列A 101の対応する列との積を生成するために使用される限りは、特定の順序で使用される必要はない。
[0018]ステップ175において、この方法は、別の列が行列B 102に存在するか否かを判定し、存在しない場合には、ステップ177へ進み、行列乗算演算を完了する。そうでなければ、ステップ176において、この方法は、行列B 102の未だ使用されていない列を獲得し、行列A 101の第1の列を獲得する。そして、ステップ171、172、173及び174が、行列C 103の別の列を生成するために繰り返される。
[0019]図1Cは、本発明の一以上の態様に従って各々がブロードキャストオペランドを受け取る複数のプログラム命令実行ユニットの概念的なブロック図を示している。複数のプログラム命令実行ユニットは、ソースオペランド、即ち、行列A 101の成分及び行列B 102を獲得し、行列C 103を生成するために必要とされる帯域幅を削減するように構成されている。各プログラム命令実行ユニット、即ち、実行ユニット180、181、182、183、184、185、186及び187は、行列C 103の少なくとも一つの成分を生成するように構成されている。実行ユニット180、181、182、183、184、185、186及び187は、プログラム命令を並列に実行するように構成されていてもよい。例えば、実行ユニットの各々は、マルチスレッド型プロセッサにおけるように、多重スレッド用のプログラム命令を並列に実行するために、多重スレッドのグループ内のあるスレッドを処理する。別の実施例では、実行ユニットの各々は、単一命令多重データ(SIMD)ベクトルプロセッサにおけるように、多重レーンのためのプログラム命令を並列に実行するために多重レーンのグループ内のあるレーンを処理する。
[0020]各命令ユニットはパラレルオペランド190から1個の固有のパラレルオペランドを受け取る。行列A 101の成分はパラレルオペランドであってもよい。各実行ユニットはまた、ブロードキャストオペランド191から1個のブロードキャストオペランドを受信する。同じブロードキャストオペランドが、ブロードキャストオペランド191によって各命令ユニットへ出力される。行列B 102の成分はブロードキャストオペランドであってもよい。本発明の他の実施の形態では、行列A 101及び行列B 102が入れ換えられ、行列A 101がブロードキャストオペランドを供給し、行列B 102がパラレルオペランドを供給する。
[0021]同時に実行される積和演算の各々について、T個の実行ユニットは、T+1個のメモリ記憶域だけをアクセスする。一方、従来の行列乗算を実行する方法が使用される場合には、2T個のメモリ記憶域がアクセスされる。ブロードキャストメカニズムが使用される場合には、積和算のような演算を実行するために必要とされるメモリ帯域幅要件が軽減される。その結果、処理性能がメモリ帯域幅によって制限されている場合に、性能がブロードキャストメカニズムを使用することによって潜在的には約2倍に改善される。ブロードキャストメカニズムを行列と行列の乗算、特に、積和演算に関して説明しているが、このブロードキャストメカニズムはマルチスレッド処理中にその他の演算を実行するためにも使用し得る。その他の演算の例としては、最小、最大、加算、減算、絶対差の和、平方差の和、乗算、及び除算が挙げられる。
[0022]従来の処理システムは、演算をおそらくは数個のレベルに分割し、例えば、スループット、待ち時間等の性能が異なるメモリ装置によって構成される多重レベルのメモリ階層構造を効率的に利用することによって、行列と行列の乗算を実行する。この分割の結果として、大規模行列の行列乗算は、タイルと呼ばれる完全な行列の部分の行列乗算に分解される。速度が異なる少なくとも二つのレベルのメモリ階層構造に結合された処理装置では、行列乗算は、タイルを低速レベルのメモリ階層構造に格納された両ソース行列から高速レベルのメモリ階層構造へコピーし、タイルを演算結果タイルに乗算し、演算結果タイルを低速レベルのメモリ階層構造に格納された演算結果行列の適切な部分へコピーして戻すことによって、高速化される。
[0023]行列乗算を実行するためのタイル化技術は当業者に知られたものである。本発明のシステム及び方法は、積行列の各タイル内の成分を計算することに適用してもよい。特に、ブロードキャストメカニズムを、行列A 101、行列B 102及び行列C 103はそれぞれが大規模行列のタイルである場合に、タイルの成分を計算するために使用してもよい。同様に、行列ベクトル乗算は、一方の次元が単一である行列の特殊なケースとして包含される。
[0024]図2は、本発明の一以上の態様に従ってブロードキャストオペランドを含む命令を実行する典型的な方法のフローチャートを示している。ステップ200において、この方法は、マルチスレッド処理のための一以上のオペランドを含む命令を受け取る。ステップ205において、この方法は、第1のオペランドがブロードキャストオペランドであるか否かを判定する。特定のオペランドがブロードキャストオペランドであることを指定する多種多様の技術がある。かかる技術の一つは、命令フォーマットによってブロードキャストオペランドとして指定されるオペランドを含む命令を定義することである。例えば、一方がパラレルオペランドを含み、他方がブロードキャストオペランドを含む2種類のロード命令を定義することができる。
[0025]表1に示したコードは、行列と行列の乗算のためのT回の積和演算を実行するために使用される、図1Cに示されているようなマルチスレッド型プロセッサ又はベクトルプロセッサのT台の並列実行ユニット用の演算又は命令のセットを表している。

<表1>

LDA,M[A1+offsetA] //行列AのT個の成分をロード
LDBB,M[A2+offsetB] //行列Bの一つの成分をロード及びブロードキャスト
FMADC,A,B,C //CのT個の成分につて、C=A*B+C

LD命令は、T個のスレッド又はT個のベクトルレーン用の、各スレッド又はレーンのメモリアドレスを指定するパラレルオペランドであるA1+offsetAを含んでおり、ここで、A1は行列タイル、行列、列等のベースアドレスであり、offsetAは特定の列又は列の特定の部分についてのオフセットである。offsetAは省略されることがある。実効アドレスは各スレッド又はレーンに伴って変化し、例えば、T台のアドレスレジスタA1は、スレッド又はレーン毎に一つずつあり、スレッド又はレーン毎に異なるアドレスを用いて初期化される。T個のアドレスA1+offsetAによって指定されたT個のメモリ記憶域に格納されたT個の成分は、各実行ユニットのレジスタAにロードされる。異なるメモリ記憶域が、スレッド又はレーンを処理する各実行ユニットによって読み出される。したがって、アドレスA1+offsetAは、各スレッド又はレーン用の異なるメモリ記憶域を指定するために、固有のスレッド又はレーン識別子に伴って変化する。例えば、各スレッド又はレーン内のアドレスレジスタA1は、スレッド又はレーン識別子に伴って変化する異なるアドレスを用いて初期化される。
[0026]LDB命令は、メモリアドレス、即ち、A2+offsetBを指定するブロードキャストオペランドを含んでおり、ここで、A2は、行列タイル、行列、列等のベースアドレスであり、offsetBは特定の列又は列の特定の部分についてのオフセットである。A2+offsetBによって指定されたメモリ記憶域に格納された成分は、各実行ユニットのレジスタBにロードされる。A1+offsetAがスレッド又はレーン毎に異なる値を有するLD命令とは異なって、A2+offsetBは、スレッドのグループ中のスレッドの全て又はベクトル内のレーンの全てに対して同じ値を有する。最後に、FMAD(浮動小数点乗算・累算)命令が、レジスタA、B及びCを使用して積和関数を実行するために各命令ユニットによって実行される。本発明の他の実施の形態では、IMAD(整数乗算・累算)命令が、積和関数を実行するために使用される。本発明の更に別の実施の形態では、別の計算、例えば、加算、減算等が、ブロードキャストオペランドに基づいて演算結果を生成するために命令によって示される。
[0027]本発明の一部の実施の形態では、表1に示した演算のセットによって提供される機能は、より少数の命令を使用して実現し得る。例えば、LD命令及びLDB命令は、2命令同時発行方式で並列実行用のFMAD命令を備える単一の命令に組み合わせることができる。別の実施例では、LD命令、LDB命令及びFMAD命令を組み合わせて、並列実行用の複数の実行ユニットへ供給される複合ワイド命令を形成することができる
[0028]特定のオペランドがブロードキャストオペランドであることを指定するために使用される別の技術は、ブロードキャストメモリ領域内にある特定のメモリアドレスを定義することである。例えば、表1において、LDB命令をLD命令によって置き換えてもよい。ここで、A2+offsetBはブロードキャストメモリ領域内のメモリアドレスと対応する。ブロードキャストメモリ領域内のアドレスが指定される場合、一つのメモリ記憶域だけが読み出され、その一つのメモリ記憶域に格納されたデータが宛先(B)の各フィールドにブロードキャストされる。
[0029]特定のオペランドがブロードキャストオペランドであることを指定するために使用される更に別の技術は、各実行ユニットへブロードキャストされる特定のレジスタを定義することである。例えば、表1において、LDB命令は、A2+offsetBによって指定されたメモリ記憶域に格納された成分を各命令ユニットへブロードキャストするのではなく、単一のレジスタ、例えば、レジスタBにロードする。レジスタBはブロードキャストレジスタとして指定され、レジスタBが、表1のFMAD命令のような命令のためのオペランドとして指定される場合に、レジスタBに格納された値が命令を実行するために各実行ユニットへブロードキャストされる。
[0030]ステップ205において、この方法は、第1のオペランドがブロードキャストオペランドであると判定すると、次に、ステップ210において、この方法は、オペランドによって指定された単一の値を読み出す。ステップ215において、単一の値が、各実行ユニットへブロードキャストされる。一以上のブロードキャストレジスタを指定する本発明の実施の形態において、単一の値がブロードキャストレジスタにロードされ、次に、実行ユニットへブロードキャストされる。ステップ205において、この方法は、第1のオペランドはブロードキャストオペランドではないと判定すると、即ち、第1のオペランドがパラレルオペランドであるならば、ステップ220において、この方法は、オペランドによって指定された値を読み出す。異なる値が各スレッド又はレーンのための各実行ユニットによって読み出される。即ち、値の個数は、実行中のスレッド又はレーンの数と一致する。ステップ225において、読み出された値は実行ユニットへ(並列に)出力される。
[0031]ステップ230において、この方法は、別のオペランドが命令に対して指定されたか否かを判定し、指定されている場合には、ステップ205へ戻る。そうでなければ、この方法は、命令を実行し続け、実行ユニットへ供給されたパラレル値及び/又はブロードキャスト値を使用して演算結果を生成する。命令はロード又は計算のような単一の演算を表してもよく、或いは、命令は、多重ロード及び/又は計算のような演算の組み合わせを表してもよいことに留意されたい。
[0032]当業者は、図1B又は2の方法ステップ、若しくは、それらと同等なステップを実行するように構成されたシステムが本発明の範囲に入ることを理解するであろう。メモリ帯域幅要件は、行列乗算の所定のステップにおいて、T個の実行スレッド又はレーンのグループが、2個のソースオペランドのうちの一つを、それぞれの積和演算に共用するように、2個の行列の乗算を実行することによって軽減される。これは、オペランドブロードキャストメカニズムを、マルチスレッド型プロセッサ又はSIMDベクトルプロセッサのような並列処理装置内に採り入れることによって利用される。
[0033]このブロードキャストメカニズムによって、あるメモリ記憶域の内容を、スレッドのグループ内のT個のスレッド全て(又は、SIMDベクトルプロセッサ内のT個のレーン全て)にブロードキャストすることが可能となり、その値を、行列演算を実行する一つ又は複数の命令を含む実行命令へのソースオペランドとして使用することができる。ソフトウェアは、ブロードキャストメモリ領域と、一以上のブロードキャストオペランドを含むプログラム命令とを指定することによって、このブロードキャスト転送を制御することが可能である。ブロードキャストメカニズムを使用する場合には、積和算のような演算を実行するために必要とされるメモリ帯域幅要件を軽減することができ、それによって、メモリ帯域幅が制限されている場合の性能を改善することができる。
[0034]以上の説明は本発明の実施の形態を対象にしているが、本発明のその他の実施の形態及び更なる実施の形態は、本発明の基本的な範囲を逸脱することなく考案することができるものであり、本発明の範囲は特許請求の範囲によって決定されるものである。したがって、上記の説明及び図面は、限定的な意味ではなく、例示的な意味で見られるべきである。方法の請求項中のステップの列挙は、請求項中で特に断らない限り、ステップを特定の順序で実行することを意味しない。
[0035]全ての商標はそれぞれの所有者の財産である。
本発明の一以上の態様に従って積行列Cを生成するために乗算される行列A及び行列Bの概念図である。 本発明の一以上の態様に従って積行列Cを生成するために行列Aと行列Bを乗算する典型的な方法のフローチャートである。 本発明の一以上の態様に従ってパラレルオペランド及びブロードキャストオペランドを受け取る複数の実行ユニットの概念図である。 本発明の一以上の態様に従ってブロードキャストオペランドを含む命令を実行する典型的な方法のフローチャートである。
符号の説明
180〜187…実行ユニット、190…パラレルオペランド、191…ブロードキャストオペランド。

Claims (12)

  1. 多重スレッド又はレーン用のためのブロードキャストオペランドを含む演算のセットを実行する方法であって、
    前記演算のセットに含まれている前記ブロードキャストオペランドによって指定された第1の値を獲得するステップと、
    前記第1の値を複数のプログラム命令実行ユニットへ供給するステップと、
    前記演算のセットに含まれているパラレルオペランドによって指定される第2の値のセットを獲得するステップであって、該第2の値の各々が前記多重スレッド又はレーンのうちの一つに対応する、該ステップと、
    前記第2の値のセットのうちの一つの第2の値を前記複数のプログラム命令実行ユニットのうちの各々に供給するステップと、
    前記多重スレッド又はレーンの各々ついて前記演算のセットを実行するステップと、
    を含む方法。
  2. 前記演算のセットに含まれているメモリオペランドが前記ブロードキャストオペランドであることを、前記演算のセットに対して指定されたフォーマットに基づいて判定するステップを更に含む、請求項1に記載の方法。
  3. 前記演算のセットに含まれているメモリオペランドが前記ブロードキャストオペランドであることを、前記メモリオペランドに対して指定されたアドレスに基づいて判定するステップを更に含む、請求項1に記載の方法。
  4. 前記演算のセットに含まれているソースオペランドが前記ブロードキャストオペランドであることを、前記ソースオペランドに対して指定されたレジスタに基づいて判定するステップを更に含む、請求項1に記載の方法。
  5. 前記第1の値及び前記第2の値が、固定小数点データフォーマットで表される、請求項1に記載の方法。
  6. 前記第1の値及び前記第2の値が、浮動小数点データフォーマットで表される、請求項1に記載の方法。
  7. 前記演算のセットが、積和演算を含む、請求項1に記載の方法。
  8. 前記演算のセットが、前記ブロードキャストオペランド、前記パラレルオペランド、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を含む単一のプログラム命令として表される、請求項1に記載の方法。
  9. 前記演算のセットが、前記ブロードキャストオペランドと前記パラレルオペランドとを含む第1のロードプログラム命令、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を指定する第2のプログラム命令として表される、請求項1に記載の方法。
  10. 前記演算のセットが、前記ブロードキャストオペランドを含む第1のロードプログラム命令、前記パラレルオペランドを含む第2のロードプログラム命令、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を指定する第3のプログラム命令として表される、請求項1に記載の方法。
  11. 前記ブロードキャストオペランドが、前記多重スレッドの各々について単一の値を有するアドレスを指定する、請求項1に記載の方法。
  12. 前記パラレルオペランドが、前記多重スレッドの各々について異なる値を有するアドレスを指定する、請求項1に記載の方法。
JP2007123710A 2006-05-08 2007-05-08 帯域幅要件が軽減された行列乗算 Pending JP2007317179A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/430,324 US20070271325A1 (en) 2006-05-08 2006-05-08 Matrix multiply with reduced bandwidth requirements

Publications (1)

Publication Number Publication Date
JP2007317179A true JP2007317179A (ja) 2007-12-06

Family

ID=38713207

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007123710A Pending JP2007317179A (ja) 2006-05-08 2007-05-08 帯域幅要件が軽減された行列乗算

Country Status (5)

Country Link
US (1) US20070271325A1 (ja)
JP (1) JP2007317179A (ja)
KR (1) KR100909510B1 (ja)
CN (1) CN100495326C (ja)
TW (1) TWI349226B (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018206128A (ja) * 2017-06-06 2018-12-27 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
JP2020508512A (ja) * 2017-02-23 2020-03-19 エイアールエム リミテッド データ処理装置における乗累算
JP2021064378A (ja) * 2020-12-07 2021-04-22 インテル・コーポレーション ヘテロジニアスコンピューティングのためのシステム、方法及び装置
US11693691B2 (en) 2016-12-31 2023-07-04 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US7836118B1 (en) * 2006-06-16 2010-11-16 Nvidia Corporation Hardware/software-based mapping of CTAs to matrix tiles for efficient matrix multiplication
US8533251B2 (en) * 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8626815B1 (en) * 2008-07-14 2014-01-07 Altera Corporation Configuring a programmable integrated circuit device to perform matrix multiplication
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8577950B2 (en) * 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US9600281B2 (en) 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
JP6972547B2 (ja) * 2016-12-27 2021-11-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
WO2018174934A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatus for matrix move
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
US10521225B2 (en) * 2017-06-29 2019-12-31 Oracle International Corporation Matrix multiplication at memory bandwidth
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
JP6958027B2 (ja) * 2017-07-03 2021-11-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20190079903A1 (en) * 2017-09-14 2019-03-14 Qualcomm Incorporated Providing matrix multiplication using vector registers in processor-based devices
CN109871236A (zh) * 2017-12-01 2019-06-11 超威半导体公司 具有低功率并行矩阵乘法流水线的流处理器
KR20190106010A (ko) * 2018-03-07 2019-09-18 삼성전자주식회사 전자 장치 및 머신 러닝 수행 방법
KR102142943B1 (ko) 2018-06-25 2020-08-10 국민대학교산학협력단 클라우드 기반의 인공지능 연산 서비스 방법 및 이를 수행하는 장치
KR102158051B1 (ko) 2018-06-27 2020-09-21 국민대학교산학협력단 컴퓨터 수행 가능한 클라우드 기반의 인공지능 연산 서비스 방법
KR102063791B1 (ko) 2018-07-05 2020-01-08 국민대학교산학협력단 클라우드 기반의 인공지능 연산 서비스 방법 및 장치
US10776110B2 (en) * 2018-09-29 2020-09-15 Intel Corporation Apparatus and method for adaptable and efficient lane-wise tensor processing
CN109886398A (zh) * 2019-01-03 2019-06-14 曾集伟 神经网络矩阵乘法运算方法及相关产品
KR102327234B1 (ko) 2019-10-02 2021-11-15 고려대학교 산학협력단 행렬 연산시 메모리 데이터 변환 방법 및 컴퓨터
US11714875B2 (en) * 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
KR102452206B1 (ko) 2020-12-31 2022-10-07 국민대학교산학협력단 빅데이터 분석을 위한 인공지능 기반의 클라우드 최적화 장치 및 방법
KR102434949B1 (ko) 2021-01-13 2022-08-26 건국대학교 산학협력단 무인이동체를 위한 인공지능 기반의 경로 재계획 방법 및 장치
CN114090956A (zh) * 2021-11-18 2022-02-25 深圳市比昂芯科技有限公司 一种矩阵数据处理方法、装置、设备及存储介质
CN114579929B (zh) * 2022-03-14 2023-08-08 海飞科(南京)信息技术有限公司 加速器执行的方法和电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01204177A (ja) * 1988-02-08 1989-08-16 Nec Corp 行列演算回路
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
JPH05242053A (ja) * 1992-03-03 1993-09-21 Mitsubishi Electric Corp 並列データ処理装置
JPH0619863A (ja) * 1992-05-12 1994-01-28 Internatl Business Mach Corp <Ibm> 超並列対角線折畳みツリー・アレイ・プロセッサ
JP2006039790A (ja) * 2004-07-26 2006-02-09 Institute Of Physical & Chemical Research ブロードキャスト型並列処理のための演算処理装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9509983D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Replication of data
JP2001256218A (ja) * 2001-02-05 2001-09-21 Sony Corp 行列データ乗算装置
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7054895B2 (en) * 2001-06-21 2006-05-30 Ligos Corporation System and method for parallel computing multiple packed-sum absolute differences (PSAD) in response to a single instruction
US7177891B2 (en) * 2002-10-09 2007-02-13 Analog Devices, Inc. Compact Galois field multiplier engine
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7631171B2 (en) * 2005-12-19 2009-12-08 Sun Microsystems, Inc. Method and apparatus for supporting vector operations on a multi-threaded microprocessor
US7792895B1 (en) * 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
JPH01204177A (ja) * 1988-02-08 1989-08-16 Nec Corp 行列演算回路
JPH05242053A (ja) * 1992-03-03 1993-09-21 Mitsubishi Electric Corp 並列データ処理装置
JPH0619863A (ja) * 1992-05-12 1994-01-28 Internatl Business Mach Corp <Ibm> 超並列対角線折畳みツリー・アレイ・プロセッサ
JP2006039790A (ja) * 2004-07-26 2006-02-09 Institute Of Physical & Chemical Research ブロードキャスト型並列処理のための演算処理装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11693691B2 (en) 2016-12-31 2023-07-04 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
JP2020508512A (ja) * 2017-02-23 2020-03-19 エイアールエム リミテッド データ処理装置における乗累算
US11513796B2 (en) 2017-02-23 2022-11-29 Arm Limited Multiply-accumulation in a data processing apparatus
JP7253492B2 (ja) 2017-02-23 2023-04-06 アーム・リミテッド データ処理装置における乗累算
JP2018206128A (ja) * 2017-06-06 2018-12-27 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
JP2021064378A (ja) * 2020-12-07 2021-04-22 インテル・コーポレーション ヘテロジニアスコンピューティングのためのシステム、方法及び装置
JP7164267B2 (ja) 2020-12-07 2022-11-01 インテル・コーポレーション ヘテロジニアスコンピューティングのためのシステム、方法及び装置

Also Published As

Publication number Publication date
KR100909510B1 (ko) 2009-07-27
TW200821915A (en) 2008-05-16
CN101075185A (zh) 2007-11-21
KR20070108827A (ko) 2007-11-13
US20070271325A1 (en) 2007-11-22
TWI349226B (en) 2011-09-21
CN100495326C (zh) 2009-06-03

Similar Documents

Publication Publication Date Title
JP2007317179A (ja) 帯域幅要件が軽減された行列乗算
EP3513281B1 (en) Vector multiply-add instruction
KR101120398B1 (ko) 스레드 최적화된 멀티프로세서 구조
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
US5261113A (en) Apparatus and method for single operand register array for vector and scalar data processing operations
EP2521968B1 (en) Hardware for performing arithmetic operations
CN111381880B (zh) 一种处理器、介质和处理器的操作方法
US9355061B2 (en) Data processing apparatus and method for performing scan operations
CN111381939B (zh) 多线程处理器中的寄存器文件
US5036454A (en) Horizontal computer having register multiconnect for execution of a loop with overlapped code
US10908916B2 (en) Apparatus and method for executing a plurality of threads
US7512771B2 (en) Mapping circuitry and method comprising first and second candidate output value producing units, an in-range value determining unit, and an output value selection unit
US5226128A (en) Horizontal computer having register multiconnect for execution of a loop with a branch
US10754652B2 (en) Processor and control method of processor for address generating and address displacement
JP2021108104A (ja) 部分的読み取り/書き込みが可能な再構成可能なシストリックアレイのシステム及び方法
US8055883B2 (en) Pipe scheduling for pipelines based on destination register number
US20180349097A1 (en) Processor with efficient arithmetic units
US20080229063A1 (en) Processor Array with Separate Serial Module
US6981130B2 (en) Forwarding the results of operations to dependent instructions more quickly via multiplexers working in parallel
Del Barrio et al. A slack-based approach to efficiently deploy radix 8 booth multipliers
EP0136218A2 (en) Multiple port pipelined processor
GB2523805A (en) Data processing apparatus and method for performing vector scan operation
JP2806262B2 (ja) マルチプロセッサシステムのプロセス割当方法
JP2009059187A (ja) マイクロプロセッサおよびデータ処理方法
Soliman et al. Exploiting ILP, DLP, TLP, and MPI to accelerate matrix multiplication on Xeon processors

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090611

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090611

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100406