(57)【要約】      （修正有）【課題】行列乗算演算への入力を読み出すために必要とされる帯域幅を削減し、システム性能を改善する。【解決手段】第１の入力行列の行と第２の入力行列の列を読み出して積行列の列を生成するのではなく、第１の入力行列の列と第２の入力行列の単一の成分を読み出して積行列の部分内積の列を生成する。したがって、各積行列成分を生成するために読み出される入力行列成分の個数は、Ｎが積行列の列中の成分の個数であるとすると、２ＮからＮ＋１に削減される。【選択図】図１Ｃ
2007317179.tif 000002
【特許請求の範囲】
【請求項１】
多重スレッド又はレーン用のためのブロードキャストオペランドを含む演算のセットを実行する方法であって、
前記演算のセットに含まれている前記ブロードキャストオペランドによって指定された第１の値を獲得するステップと、
前記第１の値を複数のプログラム命令実行ユニットへ供給するステップと、
前記演算のセットに含まれているパラレルオペランドによって指定される第２の値のセットを獲得するステップであって、該第２の値の各々が前記多重スレッド又はレーンのうちの一つに対応する、該ステップと、
前記第２の値のセットのうちの一つの第２の値を前記複数のプログラム命令実行ユニットのうちの各々に供給するステップと、
前記多重スレッド又はレーンの各々ついて前記演算のセットを実行するステップと、
を含む方法。
【請求項２】
前記演算のセットに含まれているメモリオペランドが前記ブロードキャストオペランドであることを、前記演算のセットに対して指定されたフォーマットに基づいて判定するステップを更に含む、請求項１に記載の方法。
【請求項３】
前記演算のセットに含まれているメモリオペランドが前記ブロードキャストオペランドであることを、前記メモリオペランドに対して指定されたアドレスに基づいて判定するステップを更に含む、請求項１に記載の方法。
【請求項４】
前記演算のセットに含まれているソースオペランドが前記ブロードキャストオペランドであることを、前記ソースオペランドに対して指定されたレジスタに基づいて判定するステップを更に含む、請求項１に記載の方法。
【請求項５】
前記第１の値及び前記第２の値が、固定小数点データフォーマットで表される、請求項１に記載の方法。
【請求項６】
前記第１の値及び前記第２の値が、浮動小数点データフォーマットで表される、請求項１に記載の方法。
【請求項７】
前記演算のセットが、積和演算を含む、請求項１に記載の方法。
【請求項８】
前記演算のセットが、前記ブロードキャストオペランド、前記パラレルオペランド、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を含む単一のプログラム命令として表される、請求項１に記載の方法。
【請求項９】
前記演算のセットが、前記ブロードキャストオペランドと前記パラレルオペランドとを含む第１のロードプログラム命令、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を指定する第２のプログラム命令として表される、請求項１に記載の方法。
【請求項１０】
前記演算のセットが、前記ブロードキャストオペランドを含む第１のロードプログラム命令、前記パラレルオペランドを含む第２のロードプログラム命令、及び、前記ブロードキャストオペランドに基づいて結果を生成するために使用される計算を指定する第３のプログラム命令として表される、請求項１に記載の方法。
【請求項１１】
前記ブロードキャストオペランドが、前記多重スレッドの各々について単一の値を有するアドレスを指定する、請求項１に記載の方法。
【請求項１２】
前記パラレルオペランドが、前記多重スレッドの各々について異なる値を有するアドレスを指定する、請求項１に記載の方法。
【発明の詳細な説明】
【発明の背景】
【０００１】
＜発明の分野＞
[0001]本発明の実施の形態は、広く、マルチスレッド処理又はベクトル処理を使用する行列乗算の実行に関するものであり、より詳細には、メモリ帯域幅の削減に関するものである。
【０００２】
＜関連技術の説明＞
[0002]行列と行列の乗算は、高性能コンピューティング分野における多数の計算のための重要な基本要素である。行列と行列の乗算を実行するために使用される各積和演算は、メモリ内の二つのソースオペランドへのアクセスを必要とする。したがって、Ｔ個のスレッドを同時に実行し、各スレッドが積和演算を実行するマルチスレッド型プロセッサにおいては、２Ｔ個のメモリオペランドが演算の乗算部分のオペランドを供給するために必要とされる。同様に、Ｔレーンの単一命令多重データ（ＳＩＭＤ）ベクトルプロセッサ２ＴのようなＴ個のデータレーンを並列に実行するベクトルプロセッサでは、２Ｔ個のメモリオペランドがベクトル積和算毎に必要とされる。一般に、２Ｔ個の同時アクセス用のメモリ帯域幅を提供することは、Ｔが増加するにつれ難しくなり、従って、行列乗算は十分に大きなＴに対してメモリ帯域幅制限付きになる。これによって、行列乗算に対する処理装置の全体的な計算性能が制限される。
【０００３】
[0003]したがって、積和演算用のオペランドを供給するために必要とされるメモリ帯域幅を削減して、行列乗算の計算性能を改善することが望まれている。
【発明の概要】
【０００４】
[0004]本発明は、マルチスレッド型プロセッサを使用する行列乗算のメモリ帯域幅要件を軽減する新しいシステム及び方法に関するものである。メモリ帯域幅要件は、行列乗算の所定のステップにおいて、Ｔ個の実行スレッド又はＴ個のベクトルレーンのグループが、二つのソースオペランドのうちの一つそれぞれの積和演算に共用するように、二つの行列の乗算を実行することによって、軽減される。これは、マルチスレッド処理装置内でのオペランドブロードキャストメカニズムの導入によって利用される。このブロードキャストメカニズムによって、あるメモリ記憶域の内容を、スレッドのグループ内のＴ個のスレッドの全て、又は、ベクトルのＴ個のレーンの全てへブロードキャストすることが可能となり、その値を、積和演算を構成する一以上の命令を含む実行中命令へのソースオペランドとして使用することができる。このメカニズムは、このブロードキャスト転送を制御するソフトウェア手段を提供する。ブロードキャストメカニズムが使用されると、積和算のような演算を実行するために必要とされるメモリ帯域幅要件が軽減される。
【０００５】
[0005]同時に実行される積和演算の各々について、スレッドのグループ内のＴ個の実行スレッドは、従来の行列乗算を実行する方法が使用されるときの２Ｔ個のメモリ記憶域ではなく、Ｔ＋１個のメモリ記憶域だけにアクセスする。行列乗算演算のオペランドを獲得するために必要とされるメモリ帯域幅を削減することによって、メモリ帯域幅が制限されている場合に、行列乗算性能を改善することができる。さらに、その他のメモリ帯域幅制限付き演算の性能を改善することができる。
【０００６】
[0006]スレッドのグループ内の多重スレッド用のプログラム命令を実行する本発明の方法の種々の実施の形態は、プログラム命令に含まれるブロードキャストオペランドによって指定される第１の値を獲得するステップと、プログラム命令に含まれるパラレルオペランドによって指定される第２の値のセットを獲得するステップとを含み、第２の値の各々は、スレッドのグループ内の多重スレッドのうちの一つと対応する。第１の値は、複数のプログラム命令実行ユニットへ供給され、第２の値は、複数のプログラム命令実行ユニットへ供給され、プログラム命令は、スレッドのグループ内の多重スレッドのうちの各々について実行される。
【０００７】
[0007]第１の行列と第２の行列の第１の列とを乗算して、積行列の第１の列を生成するための本発明の方法の種々の実施の形態は、第１の行列の第１の列の各成分と第２の行列の第１の列の第１の成分とを乗算して積行列の第１の列に対応する第１のグループの成分を生成するステップと、積行列の列に対応する第１のグループの成分をレジスタのセットに格納するステップと、第１の行列の第２の列の各成分と第２の行列の第１の列の第２の成分とを乗算して積行列の第１の列に対応する第２のグループの成分を生成するステップと、格納されたグループの成分と第２のグループの成分のうちの対応の成分とを加算して、積行列の第１の列内の積成分のグループを生成するステップと、積成分のグループをレジスタのセットに格納するステップと、を含む。
【０００８】
[0008]本発明の上記の特徴が詳細に理解され得るよう、上に簡単に要約した本発明のより詳しい説明を、実施の形態を参照して行う。実施の形態のうちの一部を、添付の図面に示す。しかし、添付の図面は、本発明の典型的な実施の形態だけを示しており、本発明はその他の同等に効果的な実施の形態を含み得るので、添付図面は発明の範囲を制限するものと見なされるべきでないことに注意すべきである。
【詳細な説明】
【０００９】
[0013]以下の説明では、多数の具体的な詳細を、本発明をより完全に理解するために記載する。しかしながら、本発明はこれらの具体的な詳細を用いることなく実施し得ることが当業者には明らかであろう。他の例では、よく知られている特徴については、本発明を不明確にすることを避けるために説明していない。
【００１０】
[0014]図１Ａは、本発明の一以上の態様に従って行列Ｃ  １０３を生成するために乗算される行列Ａ  １０１及び行列Ｂ  １０２の概念図を示している。従来は、内積は、行列Ｃ  １０３の列の成分を生成するために、行列Ａ  １０１の行中の成分と行列Ｂ  １０２の列中の成分を使用して計算される。例えば、行列Ａ  １０１の行１０７中の成分と、行列Ｂ  １０２の列１０５中の成分、例えば、１３１、１３２及び１４６とが使用されて、行列Ｃ  １０３の列１０４中の成分１５２が生成される。多重実行スレッドが行列Ｃ  １０３を生成するために従来型システムにおいて使用され、各スレッドが行列Ｃの成分を生成する場合には、各スレッドは、行列Ａ  １０１から成分を読み出し、行列Ｂ  １０２から成分を読み出して、行列Ｃ  １０３の列（又は行）を生成する順次の積和演算を実行する。上述したように、従来型システムでは、Ｔ個のスレッドが並列に処理される場合に、２Ｔ個の成分が積和演算の各々についてに読み出される。
【００１１】
[0015]本発明では、複数の成分を行列Ａ  １０１から読み出し、複数の成分を行列Ｂ  １０２から読み出して、行列Ｃ  １０３の列を生成するのではなく、行列Ａ  １０１の列と行列Ｂ  １０２の単一の成分とを読み出して、行列Ｃ  １０３の部分内積の列を生成する。例えば、列１０６と列１０５の成分１３１とを読み出し、乗算して積の列を形成する。積の列（即ち、成分１１１と成分１３１の積、成分１１２と成分１３１の積、成分１１３と成分１３１の積、成分１１４と成分１３１の積、以下同様に続く）を、次に、列１０４と加算して列１０４の部分内積を更新する。積の更なる列は、行列Ａ  １０１の列と行列Ｂ  １０２の列１０５の成分とを使用して計算される。積の更なる列は、部分内積の列が完成するまで、部分内積の列と順次に累算される。したがって、各スレッドは、行列Ａ  １０１の１列から成分を読み出し、行列Ｂ  １０２の１行から単一の成分を読み出してスレッドの全部によって共用して、積和算を実行する。行列Ｃ  １０３の各部分内積列を生成するために読み出された入力行列成分の個数は２ＴからＴ＋１まで削減される。行列Ｂ  １０２から読み出された各成分は、Ｔ個のスレッドへブロードキャストされて、行列Ａ  １０１の列の成分と乗算される。
【００１２】
[0016]図１Ｂは、本発明の一以上の態様に従って行列Ｃを生成するために行列Ａと行列Ｂを乗算する典型的な方法のフローチャートを示している。ステップ１７０において、行列Ｃ  １０３の成分を格納するレジスタ又はメモリ記憶域が初期化される。例えば、各成分は値０に初期化される。ステップ１７１において、行列Ａ  １０１の第１の列中の各成分が行列Ｂ  １０２の列の一つの成分と乗算される。例えば、第１のスレッドが、成分１１１を成分１３１と乗算し、第２のスレッドが、成分１１２を成分１３１と乗算する等して、積成分の列を生成する。ステップ１７２において、ステップ１７１で生成された各積成分が、行列Ｃ  １０３の列中の対応する成分と加算される。例えば、成分１１１及び１３１の積が成分１５１と加算され、部分内積が累算される。
【００１３】
[0017]ステップ１７３において、この方法は、別の成分が行列Ｂ  １０２の列中に存在しているか否かを判定する。例えば、成分１３１が行列Ｃ  １０３の列１０４の部分内積を累算するために使用された後、成分１３２が使用され、列中の最後の成分、即ち、成分１４６が使用されるまで、以下同様に続く。ステップ１７３において、この方法は、行列Ｂ  １０２の列中の成分の全部が使用されたと判定する場合に、ステップ１７５へ進む。そうでなければ、ステップ１７４において、この方法は、行列Ｂ  １０２の列中の次の成分を獲得し、行列Ａ  １７４の次の列を獲得し、別の積を行列Ｃ  １０３の列１０４の各部分内積に累算するために、ステップ１７１、１７２及び１７３を繰り返す。行列Ｂ  １０２の列中の成分は、各成分が行列Ａ  １０１の対応する列との積を生成するために使用される限りは、特定の順序で使用される必要はない。
【００１４】
[0018]ステップ１７５において、この方法は、別の列が行列Ｂ  １０２に存在するか否かを判定し、存在しない場合には、ステップ１７７へ進み、行列乗算演算を完了する。そうでなければ、ステップ１７６において、この方法は、行列Ｂ  １０２の未だ使用されていない列を獲得し、行列Ａ  １０１の第１の列を獲得する。そして、ステップ１７１、１７２、１７３及び１７４が、行列Ｃ  １０３の別の列を生成するために繰り返される。
【００１５】
[0019]図１Ｃは、本発明の一以上の態様に従って各々がブロードキャストオペランドを受け取る複数のプログラム命令実行ユニットの概念的なブロック図を示している。複数のプログラム命令実行ユニットは、ソースオペランド、即ち、行列Ａ  １０１の成分及び行列Ｂ  １０２を獲得し、行列Ｃ  １０３を生成するために必要とされる帯域幅を削減するように構成されている。各プログラム命令実行ユニット、即ち、実行ユニット１８０、１８１、１８２、１８３、１８４、１８５、１８６及び１８７は、行列Ｃ  １０３の少なくとも一つの成分を生成するように構成されている。実行ユニット１８０、１８１、１８２、１８３、１８４、１８５、１８６及び１８７は、プログラム命令を並列に実行するように構成されていてもよい。例えば、実行ユニットの各々は、マルチスレッド型プロセッサにおけるように、多重スレッド用のプログラム命令を並列に実行するために、多重スレッドのグループ内のあるスレッドを処理する。別の実施例では、実行ユニットの各々は、単一命令多重データ（ＳＩＭＤ）ベクトルプロセッサにおけるように、多重レーンのためのプログラム命令を並列に実行するために多重レーンのグループ内のあるレーンを処理する。
【００１６】
[0020]各命令ユニットはパラレルオペランド１９０から１個の固有のパラレルオペランドを受け取る。行列Ａ  １０１の成分はパラレルオペランドであってもよい。各実行ユニットはまた、ブロードキャストオペランド１９１から１個のブロードキャストオペランドを受信する。同じブロードキャストオペランドが、ブロードキャストオペランド１９１によって各命令ユニットへ出力される。行列Ｂ  １０２の成分はブロードキャストオペランドであってもよい。本発明の他の実施の形態では、行列Ａ  １０１及び行列Ｂ  １０２が入れ換えられ、行列Ａ  １０１がブロードキャストオペランドを供給し、行列Ｂ  １０２がパラレルオペランドを供給する。
【００１７】
[0021]同時に実行される積和演算の各々について、Ｔ個の実行ユニットは、Ｔ＋１個のメモリ記憶域だけをアクセスする。一方、従来の行列乗算を実行する方法が使用される場合には、２Ｔ個のメモリ記憶域がアクセスされる。ブロードキャストメカニズムが使用される場合には、積和算のような演算を実行するために必要とされるメモリ帯域幅要件が軽減される。その結果、処理性能がメモリ帯域幅によって制限されている場合に、性能がブロードキャストメカニズムを使用することによって潜在的には約２倍に改善される。ブロードキャストメカニズムを行列と行列の乗算、特に、積和演算に関して説明しているが、このブロードキャストメカニズムはマルチスレッド処理中にその他の演算を実行するためにも使用し得る。その他の演算の例としては、最小、最大、加算、減算、絶対差の和、平方差の和、乗算、及び除算が挙げられる。
【００１８】
[0022]従来の処理システムは、演算をおそらくは数個のレベルに分割し、例えば、スループット、待ち時間等の性能が異なるメモリ装置によって構成される多重レベルのメモリ階層構造を効率的に利用することによって、行列と行列の乗算を実行する。この分割の結果として、大規模行列の行列乗算は、タイルと呼ばれる完全な行列の部分の行列乗算に分解される。速度が異なる少なくとも二つのレベルのメモリ階層構造に結合された処理装置では、行列乗算は、タイルを低速レベルのメモリ階層構造に格納された両ソース行列から高速レベルのメモリ階層構造へコピーし、タイルを演算結果タイルに乗算し、演算結果タイルを低速レベルのメモリ階層構造に格納された演算結果行列の適切な部分へコピーして戻すことによって、高速化される。
【００１９】
[0023]行列乗算を実行するためのタイル化技術は当業者に知られたものである。本発明のシステム及び方法は、積行列の各タイル内の成分を計算することに適用してもよい。特に、ブロードキャストメカニズムを、行列Ａ  １０１、行列Ｂ  １０２及び行列Ｃ  １０３はそれぞれが大規模行列のタイルである場合に、タイルの成分を計算するために使用してもよい。同様に、行列ベクトル乗算は、一方の次元が単一である行列の特殊なケースとして包含される。
【００２０】
[0024]図２は、本発明の一以上の態様に従ってブロードキャストオペランドを含む命令を実行する典型的な方法のフローチャートを示している。ステップ２００において、この方法は、マルチスレッド処理のための一以上のオペランドを含む命令を受け取る。ステップ２０５において、この方法は、第１のオペランドがブロードキャストオペランドであるか否かを判定する。特定のオペランドがブロードキャストオペランドであることを指定する多種多様の技術がある。かかる技術の一つは、命令フォーマットによってブロードキャストオペランドとして指定されるオペランドを含む命令を定義することである。例えば、一方がパラレルオペランドを含み、他方がブロードキャストオペランドを含む２種類のロード命令を定義することができる。
【００２１】
[0025]表１に示したコードは、行列と行列の乗算のためのＴ回の積和演算を実行するために使用される、図１Ｃに示されているようなマルチスレッド型プロセッサ又はベクトルプロセッサのＴ台の並列実行ユニット用の演算又は命令のセットを表している。
＜表１＞
LDA,M[A1+offsetA]       //行列ＡのＴ個の成分をロード
LDBB,M[A2+offsetB]      //行列Ｂの一つの成分をロード及びブロードキャスト
FMADC,A,B,C             //CのＴ個の成分につて、C=A*B+C
ＬＤ命令は、Ｔ個のスレッド又はＴ個のベクトルレーン用の、各スレッド又はレーンのメモリアドレスを指定するパラレルオペランドであるＡ１＋ｏｆｆｓｅｔＡを含んでおり、ここで、Ａ１は行列タイル、行列、列等のベースアドレスであり、ｏｆｆｓｅｔＡは特定の列又は列の特定の部分についてのオフセットである。ｏｆｆｓｅｔＡは省略されることがある。実効アドレスは各スレッド又はレーンに伴って変化し、例えば、Ｔ台のアドレスレジスタＡ１は、スレッド又はレーン毎に一つずつあり、スレッド又はレーン毎に異なるアドレスを用いて初期化される。Ｔ個のアドレスＡ１＋ｏｆｆｓｅｔＡによって指定されたＴ個のメモリ記憶域に格納されたＴ個の成分は、各実行ユニットのレジスタＡにロードされる。異なるメモリ記憶域が、スレッド又はレーンを処理する各実行ユニットによって読み出される。したがって、アドレスＡ１＋ｏｆｆｓｅｔＡは、各スレッド又はレーン用の異なるメモリ記憶域を指定するために、固有のスレッド又はレーン識別子に伴って変化する。例えば、各スレッド又はレーン内のアドレスレジスタＡ１は、スレッド又はレーン識別子に伴って変化する異なるアドレスを用いて初期化される。
【００２２】
[0026]ＬＤＢ命令は、メモリアドレス、即ち、Ａ２＋ｏｆｆｓｅｔＢを指定するブロードキャストオペランドを含んでおり、ここで、Ａ２は、行列タイル、行列、列等のベースアドレスであり、ｏｆｆｓｅｔＢは特定の列又は列の特定の部分についてのオフセットである。Ａ２＋ｏｆｆｓｅｔＢによって指定されたメモリ記憶域に格納された成分は、各実行ユニットのレジスタＢにロードされる。Ａ１＋ｏｆｆｓｅｔＡがスレッド又はレーン毎に異なる値を有するＬＤ命令とは異なって、Ａ２＋ｏｆｆｓｅｔＢは、スレッドのグループ中のスレッドの全て又はベクトル内のレーンの全てに対して同じ値を有する。最後に、ＦＭＡＤ（浮動小数点乗算・累算）命令が、レジスタＡ、Ｂ及びＣを使用して積和関数を実行するために各命令ユニットによって実行される。本発明の他の実施の形態では、ＩＭＡＤ（整数乗算・累算）命令が、積和関数を実行するために使用される。本発明の更に別の実施の形態では、別の計算、例えば、加算、減算等が、ブロードキャストオペランドに基づいて演算結果を生成するために命令によって示される。
【００２３】
[0027]本発明の一部の実施の形態では、表１に示した演算のセットによって提供される機能は、より少数の命令を使用して実現し得る。例えば、ＬＤ命令及びＬＤＢ命令は、２命令同時発行方式で並列実行用のＦＭＡＤ命令を備える単一の命令に組み合わせることができる。別の実施例では、ＬＤ命令、ＬＤＢ命令及びＦＭＡＤ命令を組み合わせて、並列実行用の複数の実行ユニットへ供給される複合ワイド命令を形成することができる
【００２４】
[0028]特定のオペランドがブロードキャストオペランドであることを指定するために使用される別の技術は、ブロードキャストメモリ領域内にある特定のメモリアドレスを定義することである。例えば、表１において、ＬＤＢ命令をＬＤ命令によって置き換えてもよい。ここで、Ａ２＋ｏｆｆｓｅｔＢはブロードキャストメモリ領域内のメモリアドレスと対応する。ブロードキャストメモリ領域内のアドレスが指定される場合、一つのメモリ記憶域だけが読み出され、その一つのメモリ記憶域に格納されたデータが宛先（Ｂ）の各フィールドにブロードキャストされる。
【００２５】
[0029]特定のオペランドがブロードキャストオペランドであることを指定するために使用される更に別の技術は、各実行ユニットへブロードキャストされる特定のレジスタを定義することである。例えば、表１において、ＬＤＢ命令は、Ａ２＋ｏｆｆｓｅｔＢによって指定されたメモリ記憶域に格納された成分を各命令ユニットへブロードキャストするのではなく、単一のレジスタ、例えば、レジスタＢにロードする。レジスタＢはブロードキャストレジスタとして指定され、レジスタＢが、表１のＦＭＡＤ命令のような命令のためのオペランドとして指定される場合に、レジスタＢに格納された値が命令を実行するために各実行ユニットへブロードキャストされる。
【００２６】
[0030]ステップ２０５において、この方法は、第１のオペランドがブロードキャストオペランドであると判定すると、次に、ステップ２１０において、この方法は、オペランドによって指定された単一の値を読み出す。ステップ２１５において、単一の値が、各実行ユニットへブロードキャストされる。一以上のブロードキャストレジスタを指定する本発明の実施の形態において、単一の値がブロードキャストレジスタにロードされ、次に、実行ユニットへブロードキャストされる。ステップ２０５において、この方法は、第１のオペランドはブロードキャストオペランドではないと判定すると、即ち、第１のオペランドがパラレルオペランドであるならば、ステップ２２０において、この方法は、オペランドによって指定された値を読み出す。異なる値が各スレッド又はレーンのための各実行ユニットによって読み出される。即ち、値の個数は、実行中のスレッド又はレーンの数と一致する。ステップ２２５において、読み出された値は実行ユニットへ（並列に）出力される。
【００２７】
[0031]ステップ２３０において、この方法は、別のオペランドが命令に対して指定されたか否かを判定し、指定されている場合には、ステップ２０５へ戻る。そうでなければ、この方法は、命令を実行し続け、実行ユニットへ供給されたパラレル値及び／又はブロードキャスト値を使用して演算結果を生成する。命令はロード又は計算のような単一の演算を表してもよく、或いは、命令は、多重ロード及び／又は計算のような演算の組み合わせを表してもよいことに留意されたい。
【００２８】
[0032]当業者は、図１Ｂ又は２の方法ステップ、若しくは、それらと同等なステップを実行するように構成されたシステムが本発明の範囲に入ることを理解するであろう。メモリ帯域幅要件は、行列乗算の所定のステップにおいて、Ｔ個の実行スレッド又はレーンのグループが、２個のソースオペランドのうちの一つを、それぞれの積和演算に共用するように、２個の行列の乗算を実行することによって軽減される。これは、オペランドブロードキャストメカニズムを、マルチスレッド型プロセッサ又はＳＩＭＤベクトルプロセッサのような並列処理装置内に採り入れることによって利用される。
【００２９】
[0033]このブロードキャストメカニズムによって、あるメモリ記憶域の内容を、スレッドのグループ内のＴ個のスレッド全て（又は、ＳＩＭＤベクトルプロセッサ内のＴ個のレーン全て）にブロードキャストすることが可能となり、その値を、行列演算を実行する一つ又は複数の命令を含む実行命令へのソースオペランドとして使用することができる。ソフトウェアは、ブロードキャストメモリ領域と、一以上のブロードキャストオペランドを含むプログラム命令とを指定することによって、このブロードキャスト転送を制御することが可能である。ブロードキャストメカニズムを使用する場合には、積和算のような演算を実行するために必要とされるメモリ帯域幅要件を軽減することができ、それによって、メモリ帯域幅が制限されている場合の性能を改善することができる。
【００３０】
[0034]以上の説明は本発明の実施の形態を対象にしているが、本発明のその他の実施の形態及び更なる実施の形態は、本発明の基本的な範囲を逸脱することなく考案することができるものであり、本発明の範囲は特許請求の範囲によって決定されるものである。したがって、上記の説明及び図面は、限定的な意味ではなく、例示的な意味で見られるべきである。方法の請求項中のステップの列挙は、請求項中で特に断らない限り、ステップを特定の順序で実行することを意味しない。
【００３１】
[0035]全ての商標はそれぞれの所有者の財産である。
【図面の簡単な説明】
【００３２】
【図１Ａ】本発明の一以上の態様に従って積行列Ｃを生成するために乗算される行列Ａ及び行列Ｂの概念図である。
【図１Ｂ】本発明の一以上の態様に従って積行列Ｃを生成するために行列Ａと行列Ｂを乗算する典型的な方法のフローチャートである。
【図１Ｃ】本発明の一以上の態様に従ってパラレルオペランド及びブロードキャストオペランドを受け取る複数の実行ユニットの概念図である。
【図２】本発明の一以上の態様に従ってブロードキャストオペランドを含む命令を実行する典型的な方法のフローチャートである。
【符号の説明】
【００３３】
１８０〜１８７…実行ユニット、１９０…パラレルオペランド、１９１…ブロードキャストオペランド。
【図１Ａ】
2007317179.tif 000003
【図１Ｂ】
2007317179.tif 000004
【図１Ｃ】
2007317179.tif 000005
【図２】
2007317179.tif 000006
【外国語明細書】
2007317179000001.pdf