JP5689282B2 - 行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム - Google Patents

行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム Download PDF

Info

Publication number
JP5689282B2
JP5689282B2 JP2010243281A JP2010243281A JP5689282B2 JP 5689282 B2 JP5689282 B2 JP 5689282B2 JP 2010243281 A JP2010243281 A JP 2010243281A JP 2010243281 A JP2010243281 A JP 2010243281A JP 5689282 B2 JP5689282 B2 JP 5689282B2
Authority
JP
Japan
Prior art keywords
matrix
simd
rows
segment
row
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
JP2010243281A
Other languages
English (en)
Other versions
JP2011100452A (ja
JP2011100452A5 (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
Publication of JP2011100452A publication Critical patent/JP2011100452A/ja
Publication of JP2011100452A5 publication Critical patent/JP2011100452A5/ja
Application granted granted Critical
Publication of JP5689282B2 publication Critical patent/JP5689282B2/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/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

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

Description

本発明は、マルチコア・プロセッサ・アーキテクチャ上で効率的な高速フーリエ変換(FFT)を実行することに係り、さらに詳細に説明すれば、SIMDマルチコア・プロセッサ・アーキテクチャ上の効率的なFFTに適合した形式(format)で配列データを転置することに係る。
現に利用可能な幾つかのプロセッサは、「単一命令複数データ」(SIMD)拡張命令セットをサポートする。SIMDは、単一命令が複数のデータ項目について並列に動作することを示す。例えば、1つの「加算」SIMD命令は、8つの16ビット値を並列に加算することができる。すなわち、この加算動作(単一動作)は、単一のクロック・サイクル中に、互いに異なる8セットのデータ値(複数データ)について実行される。一般に、これらのデータ値は、一のベクトルの複数の要素として供給される。従って、SIMD処理は、ベクトル処理と呼ばれることもある。SIMD命令は、単一命令の一部として複数の動作を実行することにより、実行速度を著しく増加させる。SIMD拡張命令セットの周知の例は、マルチメディア処理用の拡張命令セットであるMMX、ストリーミングSIMD拡張命令セットであるSSE及びベクトル演算用の拡張命令セットであるVMXを含む。
SIMDマルチコア・プロセッサ上で高速フーリエ変換(FFT)を効率的に計算することは、困難であることが分かった。サイズが大きな1次元FFT(1DFFT)については、処理対象の独立データ・ブロックがより大きなグループになることに起因して、より高度の並列性(parallelism)を得ることができる。しかし、1DFFTは、複雑さO(N log N)を有する、基本的に再帰的なアルゴリズムである。従って、サイズがより小さい1DFFTについては、単一行の並列性は非常に小さい。さらに、FFTを実行するための現在のライブラリは、比較的小さな配列データ上で実行されるFFT(例えば、256×256ピクセル、512×512ピクセル又は1024×1024ピクセルのイメージ・サイズ上で実行されるFFT)に適合していない。より大きなサイズの1DFFTから或る程度のSIMD並列性が抽出されるが、より小さなサイズについては、行内アルゴリズムのごく小さな並列性が抽出されるに過ぎない。さらに、マルチコアFFT用の現在のライブラリは、独立型であるために、計算−動作−入力/出力(IO)の最適化に必要とされる作業の機能的なパイプライン処理を可能にしない。
本発明の1つの実施形態は、 行列をSIMDマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法に向けられている。このコンピュータ実装方法は、
(a)第1形式の行列MをSIMD形式の行列Sに変換するステップを有し、
前記SIMD形式は、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の一の行上で1DFFT動作を並列に実行することを可能にするように構成され、
(b)前記行列Sの各要素からSIMD形式の前記行列Mの転置内の一の要素へのマッピングを検索するステップを有し、
前記マッピングは、前記行列Mの転置用の前記行列SのSIMD形式を保存するように定義され、
(c)前記検索されたマッピングに基づき、SIMD転置行列Tを生成するステップを有し、
前記SIMD転置行列Tは、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にするように構成される。
本発明の他の実施形態は、行列をSIMDマルチコア・プロセッサ・アーキテクチャ上で転置するように構成されたアプリケーション・プログラムを格納するコンピュータ可読ストレージ媒体に向けられている。前記アプリケーション・プログラムは、
(a)第1形式の行列MをSIMD形式の行列Sに変換するステップを実行し、
前記SIMD形式は、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の一の行上で1DFFT動作を並列に実行することを可能にするように構成され、
(b)前記行列Sの各要素からSIMD形式の前記行列Mの転置内の一の要素へのマッピングを検索するステップを実行し、
前記マッピングは、前記行列Mの転置用の前記行列SのSIMD形式を保存するように定義され、
(c)前記検索されたマッピングに基づき、SIMD転置行列Tを生成するステップを実行し、
前記SIMD転置行列Tは、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にするように構成される。
本発明のさらに他の実施形態は、SIMDマルチコア・プロセッサと、行列をSIMDマルチコア・プロセッサ・アーキテクチャ上で転置するように構成されたアプリケーション・プログラムを保持するメモリとを備えるシステムに向けられている。前記アプリケーション・プログラムは、
(a)第1形式の行列MをSIMD形式の行列Sに変換するステップを実行し、
前記SIMD形式は、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の一の行上で1DFFT動作を並列に実行することを可能にするように構成され、
(b)前記行列Sの各要素からSIMD形式の前記行列Mの転置内の一の要素へのマッピングを検索するステップを実行し、
前記マッピングは、前記行列Mの転置用の前記行列SのSIMD形式を保存するように定義され、
(c)前記検索されたマッピングに基づき、SIMD転置行列Tを生成するステップを実行し、
前記SIMD転置行列Tは、前記SIMDマルチコア・プロセッサ・アーキテクチャ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にするように構成される。
本発明は、SIMDマルチコア・プロセッサ・アーキテクチャ上で配列データを転置することができるという効果を奏する。また、本発明は、通常のデータ形式を有する行列の複数の列上で動作するように、行方向(row-wise)アルゴリズムを修正なしでSIMD転置行列に適用することができるという効果を奏する。
本発明の1つの実施形態に従った、配列データをSIMDマルチコア・プロセッサ・アーキテクチャ上で転置するためのシステムを示すブロック図である。 本発明の1つの実施形態に従った、4×4の行列上で2D FFTを実行するためのデータ・フローを示す図である。 本発明の1つの実施形態に従った、4ウェイのSIMD形式を有する8×8の行列上でSIMD転置を実行するためのデータ・フローを示す図である。 本発明の1つの実施形態に従った、行列の複数のセグメントを同時に転置するためのデータ・フローを示す図である。 本発明の1つの実施形態に従った、行列の複数のサブディビジョンを同時に転置するためのデータ・フローを示す図である。 本発明の1つの実施形態に従った、SIMDマルチコア・プロセッサ・アーキテクチャ上で効率的なFFTを実行するための方法を示すフローチャートである。 本発明の1つの実施形態に従った、SIMD形式のデータを転置するための方法を示すフローチャートである。 本発明の1つの実施形態に従った、SIMD転置機構の諸コンポーネントを示すブロック図である。
本発明の諸実施形態は、SIMDマルチコア・プロセッサ・アーキテクチャ上の効率的な多次元FFTに適合した形式で配列データを転置するための技術を提供する。配列データは、行優先順序(row-major order)で格納された多次元配列からSIMD形式に変換される。SIMD形式に変換されたデータは、複数ブロックのシーケンスを含み、その各ブロックは、SIMDベクトル・プロセッサが複数の行(r行)上で同時に動作するように、r行からのデータをインターリーブする。すなわち、単一のベクトル命令は、一度にr個の行要素(各行から1つずつ)を処理する。その結果、より小さなサイズの1DFFTの実行は、マルチコア・プロセッサ内で最適化される。より小さなサイズの1D(1次元)FFTの例は、256×256、512×512、1024×1024及び2048×2048の行列上で実行されるFFTを含む。
より小さなサイズの1DFFTについての単一行の並列性を増加させるために、本発明の諸実施形態が提供するSIMDデータ構造は、複数の浮動小数点値を同時に処理すべき一のSIMDベクトル命令を使用するように構成されている。例えば、一のCellBE(CellBroadband Engine)プロセッサは、単一のSIMDベクトル命令を用いて、4つの単精度浮動小数点値を同時に処理する。このSIMDデータ構造は、CellBEプロセッサのようなSIMDマルチコア・プロセッサ上でFFTを処理するように適合化される。さらに、1つの実施形態では、FFTアルゴリズムは、このSIMDデータ構造とともに使用するように最適化される。
さらに、より高次元のFFTに必要な諸動作は、このデータ構造を使用して構築される。例えば、イメージ処理の分野では、イメージ・データは、2次元配列として格納される。さらに、2次元配列のデータは、(例えば、Cプログラミング言語によって使用される)通常の行優先順序又は(例えば、FORTRANプログラミング言語によって使用される)列優先順序(column-major order)で格納される。イメージ・ビューアのようなイメージ・データ上で動作するアプリケーションは、イメージ・データが行優先(又は列優先)順序で格納されることを期待する。2次元配列は、イメージ・データをピクセル位置に対応する(x,y)ピクセル形式で格納するのが普通である。
本発明の諸実施形態がその上で動作するデータ構造は、より小さなサイズのFFT(例えば、MRI装置から取り込まれた256×256、512×512又は1024×1024のサイズを有するイメージ内のイメージ・データ)が、SIMDマルチコア・プロセッサ・アーキテクチャ上で効率的に処理されることを可能にする。通常の行優先順序で格納されたデータは、複数行SIMD1D FFTアルゴリズムに適合したSIMDデータ形式に変換される。このSIMDデータ形式を使用するために、FFTアルゴリズムは、一度にr行及び/又はr列(例えばr=4)上で標準の基数−2又は基数−4のアルゴリズム(又は他の基数(n)のFFTアルゴリズムの組み合わせ)を実行するように、これを修正することができる。単一の命令を使用して処理される行又は列の数は、プロセッサのSIMDレジスタ内に配置される浮動小数点データ要素の数に対応する。128ビットのSIMDレジスタについては、r=4、すなわち、4つの単精度浮動小数点値を当該レジスタ内に配置することができる。
前述のように、本明細書に開示した技術は、SIMD転置動作を定義する。このSIMD転置動作は、既にSIMD形式を有するデータ(例えば、イメージ)を転置するために使用される。1つの実施形態では、ベクトル複数行FFTコードがr行のグループにおけるデータを一度に処理した後(例えば、4バイトの浮動小数点データ及び128ビットのSIMDレジスタの場合、r=4)、このデータは、表示のために及び/又はこのデータを行優先順序(又は列優先順序)で受け取ることを期待するアプリケーションによるさらなる処理のために、通常の行優先順序に逆変換される。
以下、本発明の諸実施形態を説明する。しかし、本発明は、本明細書に開示した特定の実施形態に制限されないことを理解されたい。以下で説明する諸特徴及び諸要素の任意の組み合わせは、異なる実施形態に関係するか否かに拘わらず、本発明を実装又は実施するように意図される。さらに、本発明の諸実施形態は、他の可能な解決手段及び/又は従来技術に比べて優れた効果を奏することができるが、所与の実施形態が特定の効果を奏するか否かは、本発明を制限するものではない。従って、以下で説明する諸側面、諸特徴、諸実施形態及び諸効果は、例示であるに過ぎず、請求項において明示的に記載されている場合を除き、請求項に係る発明の制限事項であると見なされない。同様に、「本発明」という用語の使用は、本明細書に開示した任意の発明的主題の一般化として解すべきではなく、請求項において明示的に記載されている場合を除き、請求項に係る発明の制限事項であると見なされるべきではない。
本発明の1つの実施形態は、コンピュータ・システムと関連して使用するためのプログラムとして実装される。かかるプログラムは、(本明細書に開示した方法を含む)諸実施形態の諸機能を定義し、種々のコンピュータ可読ストレージ媒体上に保持される。例えば、コンピュータ可読ストレージ媒体は、(i)情報を永久的に格納するための書き込み不能なストレージ媒体(例えば、CD−ROMドライブによって読み取り可能なCD−ROMディスクのようなコンピュータ内の読み取り専用メモリ装置)と、(ii)変更可能な情報を格納するための書き込み可能なストレージ媒体(例えば、ディスケット・ドライブ内のフレキシブル・ディスク又はハード・ディスク・ドライブ)とを含む。かかるコンピュータ可読ストレージ媒体は、本発明の諸機能を指令するコンピュータ可読命令を担持する場合、本発明の諸実施形態である。他の媒体は、コンピュータに情報を伝送するための通信媒体を含み、かかる通信媒体は、コンピュータ、電話網、無線通信ネットワーク等を含む。特に、後者の実施形態は、インターネット及び他のネットワークと情報を送受することを含む。かかる通信媒体は、本発明の諸機能を指令するコンピュータ可読命令を搬送する場合、本発明の諸実施形態である。広義には、コンピュータ可読ストレージ媒体及び通信媒体は、本明細書においてコンピュータ可読媒体と称する。
本発明の諸実施形態を実装するために実行される諸ルーチンは、オペレーティング・システム又は特定のアプリケーションの一部、コンポーネント、プログラム、モジュール、オブジェクト又は諸命令のシーケンスとすることができる。本発明のコンピュータ・プログラムは、複数の命令から構成され、そしてこれらの命令は、ネイティブ・コンピュータによって機械可読フォーマット(従って、実行可能な命令)に変換される。また、諸プログラムは、諸変数及び諸データ構造から構成され、その一方又は両方は、当該プログラムに対しローカルに存在するか、メモリ内に存在するか、又はストレージ装置上に存在する。さらに、以下で説明する種々のプログラムは、本発明の特定の実施形態で実装される当該プログラムを使用するアプリケーションに基づいて、これを識別することができる。しかし、以下で使用する任意の特定のプログラム命名法は、便宜上のものであるに過ぎないから、本発明は、かかる命名法によって識別されるか及び/又は暗示される特定のアプリケーション内でのみ使用するように制限されない。
以下、プロセッサ(PPU:Power Processor Unit)並びにそのL1及びL2キャッシュを有するPPE(Power Processor Element )を含むCellBEを参照して、実施形態を説明する。各Cell BEコンピュータは、複数のSPE(SynergisticProcessor Element)と、ローカル・ストアと、高帯域の内部要素相互接続バスであるEIB(Element Interconnect Bus)とを含む。各SPEは、SPU(Synergistic Processor Unit)を提供する。本明細書及び図面の記述は、CellBEコンピュータを想定しているが、本発明の諸実施形態は、他のプロセッサ・アーキテクチャに関連して使用するように容易に適合させることができる。
図1は、本発明の1つの実施形態に従った、SIMDマルチコア・プロセッサ・アーキテクチャ上で配列データを転置するためのシステム100を示すブロック図である。システム100は、コンピュータ110を含む。図示のように、コンピュータ110は、CellBEコンピュータである。さらに、コンピュータ110は、ネットワークを介して他のコンピュータに接続することができる。ネットワークは、通信ネットワーク及び/又は広域ネットワーク(WAN)とすることができる。特定の実施形態では、ネットワークはインターネットである。
図示のように、CellBEコンピュータ110は、Cell PPU 120と、8つのCellSPU 130、132と、EIB 140と、メモリ150と、ストレージ装置とを含む。コンピュータ110に含まれる1つ以上のプロセッサ120、130、132は、メモリ150及び任意のストレージ装置(例えば、ハード・ドライブ、フラッシュ・メモリ又はCD若しくはDVD−ROMのようなコンピュータ可読ストレージ媒体)から命令及びデータを獲得する。各プロセッサ120、130、132は、命令、論理及び数学的処理を実行するプログラム可能論理装置である。さらに、コンピュータ110は、ストレージ(例えば、ハード・ディスク・ドライブ、フラッシュ・メモリ装置、光媒体等)を含む。メモリ150は、コンピュータ110の動作を管理するように構成されたオペレーティング・システムを含む。オペレーティング・システムの例は、UNIX(登録商標)、マイクロソフト社のWindows(登録商標)オペレーティング・システム及びLinux(登録商標)オペレーティング・システムを含む。
また、コンピュータ110は、他の周辺装置(例えば、ディスプレイ、キーボード・マウス、ネットワーク・インタフェース装置等)を含む。図示のように、コンピュータ110のメモリ150は、SIMD転置機構170及び行列152を含む。行列152は、複数の行列セグメント154、156、158、160を含み、当該各セグメントは行列152の細分された一部を表す。特に、各セグメントは、SIMD転置機構170によって転置すべき諸要素の集合を表す。図2〜図8及び関連する記述は、コンピュータ110上で稼働するSIMD転置機構170の構造及び動作を詳述する。1つの実施形態に従って、1つ以上のCellSPU 130、132のローカル・ストアは、SIMD転置機構170及び行列セグメント154、156、158、160を含む。
図2は、本発明の1つの実施形態に従った、4×4の行列上で2D FFTを実行するためのデータ・フロー200を示す。図示のように、データ・フロー200は、行優先形式の行列210を含む。行列210は、値v1ないしv16を含む。さらに、行列210(及び図2の他の全ての行列)は、物理メモリ内に順次に格納することができる。例えば、(値v1ないしv16を保持する)行列210の各個別セルは、メモリ150の順次メモリ・アドレスに対応する。2DFFTは、通常のデータ形式(例えば、行優先形式)における行列上の動作を表す、ステップ211、213、215、217を介して、行列210上で実行することができる。行列218は、行列210の2DFFTの結果を表す。
行列210とは対照的に、行列220は、SIMD形式で図示されている。但し、複数の行列値は、複数の行が並列に処理されるように、メモリ内で順序付けられる。例えば、2DFFTは、SIMD形式の行列上の動作を表す、ステップ221、223、225、227を介して、SIMD形式の行列220上で実行することができる。さらに、行列210の2DFFTの結果を表す行列218を生成するために、(ステップ229を介して)SIMD形式から行優先形式への逆変換を実行することができる。
行優先形式の行列210上の2DFFTは、(ステップ211を介する)行方向の1D FFTに続いて、(ステップ213、215、217を介する)列方向のFFTを含む。ステップ211では、1DFFTを行列210の複数の行上で実行することにより、行列212を生成する。例えば、行列210の第1行(v1,v2,v3,v4)上の1DFFTは、v1',v2',v3',v4' を生成する。ステップ213では、行列212を転置することにより、行列214を生成する。すなわち、行列212は、その主対角線(v1',v6',v11',v16' )によって折り返される。例えば、v2' 及びv5' は、それぞれの位置を交換する。
ステップ215では、行列214の複数の行上で行方向の1DFFTが実行される。実際には、ステップ215の行方向の1D FFTは、ステップ213で実行された転置動作に起因して、行列212の複数の列上で動作する。例えば、行列214の第1行(v1',v5',v9',v13' )上の1D FFTは、v1'',v5'',v9'',v13'' を生成する。ステップ217では、行列216上で第2の転置動作を実行することにより、行列218を生成する(その結果、行列218の複数の行は、行列210の複数の行に対応する)。すなわち、行列216は、その主対角線(v1'',v6'',v11'',v16'' )によって折り返される。例えば、v5'' 及びv2'' は、それぞれの位置を交換する。行列218(v1'' ないしv16'' )は、行優先形式の行列210の2DFFT(周波数領域表現)を表す。
代替的に、(ステップ219を介して)行優先形式の行列210をSIMD形式の行列220に変換することにより、行列210の2DFFTの計算中に行並列性を活用することができる。行並列性を活用することができるのは、SIMD形式のデータがメモリ内に配置される正確な方法(way)のためである。すなわち、SIMD形式の行列は、メモリ内に順次に格納された複数の浮動小数点値を同時に処理するために、SIMDベクトル命令を使用するように構成される。例えば、CellBEプロセッサは、単一のSIMDベクトル命令を用いて、4つの単精度浮動小数点値を同時に処理する。SIMD形式の行列は、かかるSIMDマルチコア・プロセッサ上でFFTを処理するように適合化される。図2に示す例では、行列220は、2行が同時に処理されることを可能にする。すなわち、1つのSIMDベクトル命令(単一命令)は、2つの単精度浮動小数点値(複数データ)上で動作することができる。
ステップ219では、行優先形式の行列210は、SIMD形式の行列220に変換される。SIMD形式は、次のように記述することができる。2次元配列の諸要素は、任意の通常の順序(例えば、複数の行が順次に格納される行優先順序、又は複数の列が順次に格納される列優先順序)で格納される。説明の便宜上、2次元データが次の値を有する4×4の行列であると仮定する。
(表1)
<2次元データの例>
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
かかる4×4の行列は、2次元配列として表される。この2次元配列を宣言するために、例えば、次のようなソース・コードの構文が使用される。
(表2)
<配列宣言の例−Cソース・コード>
int data[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
Cプログラミング言語は、前記宣言に基づき、行優先順序を使用するから、諸要素は、メモリ150内の順次メモリ・アドレス(1〜16としてラベル付けされる)に次のように格納される。
(表3)
<行優先順序の例>
1 2 3 4 5 6 7 89 10 11 12 13 14 15 16
代替的に、この4×4の行列は、列優先順序を使用する2次元配列として表される。列優先順序を使用するプログラミング言語の1例は、FORTRANである。この場合、諸要素は、メモリ150内の順次メモリ・アドレスに次のように格納される。
(表4)
<列優先順序の例>
1 5 9 13 2 6 10 143 7 11 15 4 8 12 16
1つの実施形態では、SIMDフォーマッタは、データを複数ブロックのシーケンスに変換する。但し、各ブロックは、r行を表す。その後、r行は、SIMD動作を使用して同時に処理される。ブロック数は、bによって表される。もし、mがこの2次元データの行数を表すものとすれば、ブロック数bは、式b=m/rによって計算される。例えば、各ブロックが2行(r=2)を表すものとすれば、4×4の行列(m=4)は、2ブロック(4/2=2)を含む。ブロック1は、最初の2行(すなわち、値12 3 4及び56 7 8を保持する2行)を含み、ブロック2は、最後の2行(すなわち、値910 11 12及び1314 15 16を保持する2行)を含む。SIMDフォーマッタは、これらのブロックをメモリ内に順次に配置する。しかし、各ブロック内では、SIMDフォーマッタは、各行の第1要素が(順次メモリ・アドレスに関して)各行の第2要素に先行するように、各行の諸要素をインターリーブする。
例えば、行列220のブロック1は、行列210の第1及び第2行からの値を保持する。しかし、SIMDフォーマッタは、これらの行の全ての第1要素(値1及び5)が、これらの行の任意の第2要素(値2及び6)の前に来るように、これらの諸要素をインターリーブする。同様に、これらの行の全ての第2要素(値2及び6)は、(順次メモリ・アドレスに関して)これらの行の任意の第3要素(値3及び7)に先行し、以下同様である。図2において、行列210からの2次元データは、SIMD形式に変換された行列220として図示されている。SIMD形式のデータの諸要素は、メモリ150内の順次メモリ・アドレスに次のように格納される。
(表5)
<SIMD形式の例>
1 5 2 6 3 7 4 89 13 10 14 11 15 12 16
SIMD形式の2次元データは、2ブロックのシーケンスとして表される。但し、各ブロックは、2行(r=2)を表す。各ブロックでは、2行からのデータは、当該2行の全ての第1要素が当該2行の任意の第2要素の前に来るように、インターリーブされる。このことは、全ての要素についても、以下同様である。より一般的に説明すれば、SIMD形式では、当該ブロックにおける当該2行の全てのi番目の要素は、当該ブロックにおける当該2行の任意の(i+1)番目の要素の前に来る。各要素は、整数、倍精度浮動小数点数又は単精度浮動小数点数のような任意のデータ・タイプとすることができる。さらに、各要素は、複素数(例えば、メモリ内に順次に格納される2つの16ビット単精度浮動小数点数によって表される複素数)とすることもできる。また、複素数は、2つの配列として、すなわち当該複素数の実数部のための第1配列及び当該複素数の虚数部のための第2配列として、表すことができる。
SIMD形式では、2次元データは、一度にr行を同時に処理するように適合される。具体的には、各SIMD命令は、r行の各々からの1要素を処理することができ、そのため、r要素の全体については、単一のSIMD命令で処理される。従って、SIMD形式は、複数行SIMD1D FFTアルゴリズムに適合する。というのは、SIMD形式は、(SIMD形式で動くように修正された)当該アルゴリズムが計算中に行並列性を活用することを可能にするからである。
ステップ219では、SIMDフォーマッタは、行優先形式の行列210をSIMD形式の行列220に変換する。この特定の例では、行列220は、2ウェイのSIMD形式(r=2、すなわち各ブロックは2行を表す)にある。例えば、行列220の第1行は、(行列210のようにv1,v2,v3,v4ではなく)v1,v5,v2,v6になる。
SIMD形式の行列220上の2DFFTは、(ステップ221を介する)行方向の1D FFTに続いて、(ステップ223、225、227を介する)列方向のFFTを含む。ステップ221では、行列220の諸要素(行列220の複数の行に対応)上で1DFFTを実行することにより、行列222を生成する。例えば、行列210の第1行に対応する行列220の諸要素(v1,v2,v3,v4)上で1D FFTを実行することにより、v1',v2',v3',v4' が生成される。ステップ221で実行される1D FFTは、SIMD形式の行列220の列並列性を活用することができる。例えば、単一のSIMDベクトル命令を使用することにより、複数の行(v1,v2,v3,v4)及び(v5,v6,v7,v8 )を同時に処理することができる。実行される1D FFTは、SIMD形式の行列220に関連してSIMDベクトル命令を使用するように修正された、任意のスカラー1DFFTアルゴリズムを含むことができる。
ステップ223では、SIMD転置機構170は、行列224を生成する。具体的には、SIMD転置機構170は、行列210の1行(例えば、v1,v2,v3,v4)に対応する行列222の諸位置(例えば、v1',v2',v3',v4' )上の諸動作が行列210の1列(例えば、v1,v5,v9,v13)上で動作するように、行列222を再配置する。例えば、SIMD転置機構170は、v1',v2',v3',v4' の位置をv1',v5',v9',v13' とそれぞれ交換する。1つの実施形態では、転置は、SIMD転置行列224における諸要素の新しい位置を表す正確なインデックスを記述する。すなわち、このマッピングは、SIMD形式の行列の各要素をSIMD転置行列の一の要素に関連付ける。表6は、2ウェイのSIMD形式を有する4×4の行列用のマッピングを例示する。
(表6)
<要素マッピングの例(2ウェイのSIMD、4×4の行列>
入力インデックス(行列222) 出力インデックス(行列224)
−−−−−−−−−−−−−− −−−−−−−−−−−−−−
行1、列1(v1' ) 行1、列1
行1、列2(v5' ) 行1、列3
行1、列3(v2' ) 行1、列2
行1、列4(v6' ) 行1、列4
行2、列1(v3' ) 行3、列1
行2、列2(v7' ) 行3、列3
行2、列3(v4' ) 行3、列2
行2、列4(v8' ) 行3、列4
行3、列1(v9' ) 行2、列1
行3、列2(v13' ) 行2、列3
行3、列3(v10' ) 行2、列2
行3、列4(v14' ) 行2、列4
行4、列1(v11' ) 行4、列1
行4、列2(v15' ) 行4、列3
行4、列3(v12' ) 行4、列2
行4、列4(v16' ) 行4、列4
この特定の例では、SIMD転置機構170は、表6の定義されたマッピングを使用して、行列222を行列224に変換する。すなわち、このマッピングは、行列210の1行(例えば、v1,v2,v3,v4)に対応する行列222の諸位置(例えば、v1',v2',v3',v4' )上の諸動作が行列210の1列(例えば、v1,v5,v9,v13)上で動作するように、SIMD形式の行列222をSIMD転置行列224に変換する。一般に、SIMD転置行列は、行優先形式の行列210の転置のSIMD変換を実行することに同等である。
表6の例では、SIMD転置機構170は、行列222の中間の2行をそれぞれ交換し、行列222の各行の中間の2要素をそれぞれ交換する。
本明細書において、本発明の諸実施形態は、2ウェイのSIMD形式を有する4×4の行列のSIMD転置動作に関して説明されるが、本発明の諸実施形態は、他の行列サイズ(例えば、256×256の行列及び2の累乗とは異なるサイズを有する行列を含む)、他の行列タイプ(例えば、3D及び4D行列のようなより次元の大きい行列)及び他のSIMD形式タイプ(例えば、4ウェイのSIMD)をサポートするように適合させることができる。
ステップ225では、行方向の1DFFT(ステップ221の動作と同じ)が、行列224の諸要素上で実行される。実際には、ステップ225の行方向の1DFFTは、ステップ223で実行された転置動作に起因して、行列210の複数の列に対応する行列224の諸要素上で動作する。例えば、行列210の第1列に対応する行列224の諸要素(v1',v5',v9',v13' )上の1D FFTは、(v1'',v5'',v9'',v13'' )を生成する。ステップ227では、行列226上で第2のSIMD転置動作を実行することにより、行列228を生成する(その結果、行列228の複数の行は、行列220の複数の行に対応する)。例えば、SIMD転置機構170は、表6のマッピングを逆方向に実行することにより、行列228を生成することができる。ステップ229では、行列228をSIMD形式から通常のデータ形式(例えば、行優先形式)に逆変換することにより、行列218を生成する。
図3は、本発明の1つの実施形態に従った、4ウェイのSIMD形式を有する8×8の行列上でSIMD転置を実行するためのデータ・フロー300を示す。このデータ・フロー300では、記号「v1」ないし「v64」(及び記号「v1' 」ないし「v64' 」)は、単に「1」ないし「64」を表すものとする。すなわち、「1」ないし「64」は、実際の数値を表さないが、行列310の諸要素を表すものとする。図示のように、データ・フロー310は、行優先形式の行列310を含む。行列310(及び図3の他の全ての行列)は、物理メモリ内に順次に格納することができる。例えば、(記号1ないし64を保持する)行列310の各個別セルは、メモリ150の順次メモリ・アドレスに対応することができる。ステップ315(図2のステップ219及び221に対応)では、行列310が4ウェイのSIMD形式に変換され(そして、行列310の複数の行上で1DFFTが実行され)、その結果、行列320が生成される。ステップ325(図2のステップ223に対応)では、SIMD転置機構170は、行列320上でSIMD転置を実行することにより、行列330を生成する。4×4の行列用のマッピングを生成するための一般的な技術(例えば、表6)を使用して、8×8の行列用の(又は任意のサイズの行列用の)マッピングを生成することができる。
すなわち、前述のように、これらのマッピングは、転置行列用のSIMD形式を保存するために使用することができ、そのため、当該行列の複数の行を並列に処理することが可能になる。1つの実施形態では、所与の行列サイズ(例えば、4×4、8×8、256×256等)用のマッピングをハード・コード化し且つこれを使用すると、SIMD形式の転置行列を作成するために、SIMD転置機構170がSIMD形式の行列の諸要素をどのように交換しなければならないかを識別することができる。
従って、SIMD転置機構170は、行列310の1行に対応する行列320の諸の位置(例えば、1ないし8)上の諸動作が行列310の1列(例えば、1、9、17、25、33、41、49、57)上で動作するように、行列320を再配置する。例えば、SIMD転置機構170は、v2',v10',v18',v26' の位置をv9',v10',v11',v12' とそれぞれ交換する。SIMD転置行列は、行優先形式の行列310の転置を実行することに同等である。
ステップ335(図2のステップ225に対応)では、行列330の諸要素(行列310の複数の列に対応)上で1DFFTが実行される。ステップ335で実行される1D FFTは、SIMD形式の行列320の諸要素(行列310の複数の列に対応)の列並列性を活用することができる。例えば、単一のSIMDベクトル命令を使用して、4列(1、9、17、25、33、41、49、57)(2、10、18、26、34、42、50、58)(3、11、19、27、35、43、51、59)、及び(4、12、20、28、36、44、52、60)を同時に処理することができる。
図4は、本発明の1つの実施形態に従った、行列を転置するためのデータ・フロー400を示す。図示のように、データ・フロー400は、0ないし15の行列インデックスを使用する、行優先形式の行列410を含む。ステップ450では、SIMD転置機構170は、行列410を複数のセグメント412、414、416、418に分割する。SIMD転置機構170は、行列のサイズ及びコンピュータ110の処理要素の数に基づき、当該行列を複数のセグメントに分割することができる。説明の便宜上、SIMD転置機構170は、行列410を4つのセグメント(0、1、4、5)、(2、3、6、7)、(8、9、12、13)及び(10、11、14、15)に分割するものとする。コンピュータ110の諸処理要素は、これらの4つのセグメントを同時に転置することができる。
ステップ452では、CellSPU 1321−4 上のSIMD転置機構170は、諸セグメント412、414、416、418を転置する。例えば、CellSPU 1321 は、セグメント412を転置することにより、転置セグメント422を生成する。ステップ454では、複数の処理要素の各々で稼働するSIMD転置機構170は、転置セグメント422、424、426、428をそれぞれのCellSPU 132のローカル・ストアからメモリ150に移動させる。例えば、セグメント414上で動作するCell SPU 1322は、転置セグメント424を行列430に格納する。ステップ454の後、CellPPU 120上で稼働するSIMD転置機構170は、必要であれば、転置動作を完成するために行列430を再編成する。例えば、SIMD転置機構170は、転置動作を完成するために、異なるセグメント422、424、426、428からの諸要素をそれぞれ交換する。結果的に得られる行列は、行列410の転置のSIMD変換と同等である。
図5は、本発明の1つの実施形態に従った、行列の複数のサブディビジョンを同時に転置するためのデータ・フロー500を示す。図4では、各セグメントの全体は各処理要素のローカル・ストアにそれぞれ収容されていたが、図5は、各セグメントが任意の処理要素のローカル・ストアのサイズを超えるシナリオを示す。図示のように、データ・フロー500は、256×256の行列510を含む。ステップ551では、SIMD転置機構170は、1つの実施形態に従って、行列510を複数のセグメントに分割する。例えば、SIMD転置機構170は、行列510を4つのセグメント520、530、540、550に分割する。また、SIMD転置機構170は、各セグメント520、530、540、550を、その転置を行うべき一の処理要素132に割り当てる。例えば、SIMD転置機構170は、セグメント520を第1のCellSPU 132に割り当て、セグメント530を第2のCell SPU 132に割り当て、セグメント540を第3のCellSPU 132に割り当て、セグメント550を第4のCell SPU 132に割り当てる。
しかし、一の処理要素132のローカル・ストアは、一のセグメントの全体を収容できないことがある。例えば、セグメント520は、CellSPU 132用のローカル・ストアのサイズを超えることがある。1つの実施形態では、SIMD転置機構170は、一の処理要素(例えば、一のCellSPU)のローカル・ストアのサイズに基づき、一のセグメントを複数のサブディビジョンに分割する。例えば、SIMD転置機構170は、セグメント520を4つのサブディビジョン522、524、526、528に分割する。各サブディビジョン522、524、526、528は、一の処理要素132のローカル・ストアのサイズを超えないサイズを有する。
ステップ552では、各処理要素は、割り当てられた各セグメント520、530、540、550の第1サブディビジョン522、532、542、552を同時に転置することにより、第1の転置サブディビジョン562、572、582、592を生成する。ステップ554では、各処理要素は、割り当てられた各セグメント(例えば、セグメント520)の第2サブディビジョン(例えば、サブディビジョン524)を同時に転置することにより、第2の転置サブディビジョン(例えば、転置サブディビジョン564)を生成し、その後、全てのサブディビジョンが転置されるまで、同様の動作を繰り返す。
図6は、本発明の1つの実施形態に従った、SIMDマルチコア・プロセッサ・アーキテクチャ上で効率的なFFTを実行するための方法600を示すフローチャートである。図示のように、方法600は、ステップ610で開始し、そこで、SIMD転置機構170は、通常のデータ形式を有する行列を受け取る。例えば、SIMD転置機構170は、図2の行列210を受け取る。ステップ620では、SIMD転置機構170は、この行列をSIMD形式に変換する。図2は、(ステップ219を介して)行列220が生成される例を示す。重要なことは、複数のSIMDベクトル・プロセッサが、SIMD形式の行列の複数の行(この特定の例では、2行)上で同時に動作することである。ステップ630では、SIMD転置機構170は、受け取った行列の行ごとに1DFFTを実行する。図2は、(ステップ221を介して)行列222が生成される例を示す。
ステップ640では、SIMD転置機構170は、この行列をSIMD転置する。図2は、(ステップ223を介して)行列224が生成される例を示す。ステップ650では、SIMD転置機構170は、受け取った行列の列ごとに1DFFTを実行する。図2は、(ステップ225を介して)行列226が生成される例を示す。ステップ660では、SIMD転置機構170は、この行列上で他のSIMD転置を実行する。例えば、図2に示すように、(ステップ227を介して)行列226をSIMD転置することにより、行列228が生成される。ステップ670では、SIMD転置機構170は、この行列を通常のデータ形式に逆変換することができる。例えば、SIMD転置機構170は、図2のステップ229を実行することにより、行列218を生成する。ステップ670の後、方法600は終了する。
本明細書では、SIMD変換(1DFFT)及びSIMD転置を実行するSIMD転置機構170を参照して本発明の諸実施形態を説明したが、本明細書に開示した諸実施形態は、例示を目的とするものであって、本発明を制限するものではないことが意図される。他の実施形態も、広く予測されるからである。例えば、変換、転置及びFFT機能は、種々の方法で編成された異なるソフトウェア・モジュールによって実行することができる。
図7は、本発明の1つの実施形態に従った、SIMD形式のデータを転置するための方法700を示すフローチャートである。方法700は、図1のSIMD転置機構170によって実行することができる。方法700の諸ステップは、図6のステップ640及び660に対応し、表6の要素マッピング例を参照して説明する。
図示のように、方法700は、ステップ710で開始し、そこで、SIMD転置機構170は、SIMD形式の行列を受け取る。例えば、SIMD転置機構170は、図2の行列222を受け取る。ステップ720では、SIMD転置機構170は、この行列のサイズ及びコンピュータ110上の処理要素の数に基づき、当該行列を複数のセグメントに分割する。図4は、行列410が4つのセグメント412、414、416、418に分割される例を示す。
ステップ730では、SIMD転置機構170は、各セグメントを一の処理要素に割り当てる。例えば、SIMD転置機構170は、図4のセグメント412を第1のCellSPU 132に割り当てる。また、SIMD転置機構170は、一のセグメントが割り当てられた処理要素のローカル・ストアのサイズを超えるか否かを決定する。そうであれば、SIMD転置機構170は、各セグメントを複数のサブディビジョンに分割する。各サブディビジョンは、割り当てられた処理要素のローカル・ストアのサイズを超えないものとする。例えば、SIMD転置機構170は、図5のセグメント520をサブディビジョン522、524、526、528に分割する。
ステップ740では、割り当てられた各処理要素上で稼働中のSIMD転置機構170は、行列の各セグメントを転置する。例えば、図4の第1のCellSPU 132は、セグメント412を転置することにより、転置セグメント422を生成する。ステップ750では、割り当てられた各処理要素は、転置セグメントをそれぞれのローカル・ストアからメモリ150に分散させる。例えば、図4の第3のCellSPU 132は、転置セグメント426をメモリ150内の転置行列430のセグメント位置424に分散させる。ステップ760では、SIMD転置機構170は、転置動作を完成するために、必要に応じて、転置行列430を再編成する。例えば、SIMD転置機構170は、転置動作を完成するために、セグメント間の諸要素をそれぞれ交換する。ステップ760の後、方法700は終了する。
図8は、本発明の1つの実施形態に従った、図1のSIMD転置機構170の諸コンポーネントを示すブロック図800である。図示のように、SIMD転置機構170は、行列マネージャ810、セグメント・ジェネレータ820、セグメント・マネージャ830、転置マネージャ840及び再編成機構(reorganizer)850を含む。図示のように、行列マネージャ810は、SIMD形式の行列152を受け取るように構成される。例えば、行列マネージャ810は、図2の行列222を受け取る。さらに、セグメント・ジェネレータ820は、受け取った行列152に基づき、複数のセグメント180を生成する。例えば、セグメント・ジェネレータ820は、図4のセグメント412、414、416、418(図1のセグメント154、156、158、160に対応)を生成する。また、セグメント・ジェネレータ820は、セグメントごとに複数のサブディビジョンを生成することができる。例えば、セグメント・ジェネレータ820は、図5のセグメント520についてサブディビジョン522、524、526、528を生成する。
セグメント・マネージャ830は、各セグメントを一の処理要素に割り当てる。例えば、セグメント・マネージャ830は、図4のセグメント412、414、416、418を4つの処理要素132に割り当てる。さらに、転置マネージャ840は、SIMD行列からSIMD転置行列へのマッピングを定義する。例えば、転置マネージャ840は、表6(4×4行列用)のマッピングを定義する。
転置マネージャ840は、行列152の各セグメントを転置する。例えば、各処理要素132上で稼働する転置マネージャ840は、図4の割り当てられた各セグメント412、414、416、418を転置する。また、転置マネージャ840は、各転置セグメントを各処理要素のローカル・ストアからメモリ150に分散させる。例えば、図4の第3の処理要素132上で稼働する転置マネージャ840は、転置セグメント426をメモリ150内の転置行列430のセグメント位置424に分散させる。さらに、再編成機構850は、1つの実施形態に従って、行列152の転置を完成するために、必要であれば、メモリ150内の諸要素を再配置する。例えば、再編成機構850は、複数のセグメント180間の諸要素を再配置することができる。
もちろん、本明細書に開示した諸実施形態は、例示を目的とするものであって、本発明を制限するものではないことが意図される。他の実施形態も、広く予測されるからである。例えば、本発明の諸実施形態は、他のサイズの行列(例えば、512×512の行列)、処理要素の他の数(例えば、32個の処理要素)、及び1ブロック当たりの他の行数(例えば、8ウェイのSIMD、16ウェイのSIMD等)をサポートするように適応させることができる。
有利なことに、本発明の諸実施形態は、SIMDマルチコア・プロセッサ・アーキテクチャ上で配列データを転置する。1つの実施形態では、SIMD転置機構170は、SIMD形式の行列を受け取る。この行列は、通常のデータ形式を有する行列MのSIMD変換から成る。SIMD転置機構170は、この行列の各要素から行列Mの転置のSIMD変換の一の要素へのマッピングを定義することができる。さらに、SIMD転置機構170は、行列M及び定義されたマッピングに基づき、SIMD転置行列Tを生成することができる。行列Mの複数の列上で動作するように、行方向アルゴリズムを修正なしでSIMD転置行列Tに適用することができる。
前述の説明は、本発明の諸実施形態に向けられているが、本発明の基本的な範囲から逸脱することなく、他の実施形態を考案することができる。本発明の範囲は、以下の請求項の記載によって決定される。
110・・・CellBEコンピュータ
120・・・CellPPU
130、132・・・CellSPU
140・・・EIB
150・・・メモリ
152・・・行列
154、156、158、160・・・行列セグメント
170・・・SIMD転置機構
180・・・行列セグメント
810・・・行列マネージャ
820・・・セグメント・ジェネレータ
830・・・セグメント・マネージャ
840・・・転置マネージャ
850・・・再編成機構

Claims (15)

  1. 行列をSIMD(単一命令複数データ)マルチコア・プロセッサ上で転置するためのコンピュータ実装方法であって、
    第1形式の行列Mを、前記SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の一の行上で1DFFT(高速フーリエ変換)動作を並列に実行することを可能にするSIMD形式の行列Sに変換するステップと、
    前記行列Sの各要素から、前記行列Mの転置行列をSIMD形式の行列へ変換したあとの当該行列内の一の要素へのマッピングを検索するステップと、
    検索された前記マッピングに基づき、前記行列Sの各要素を前記一の要素に関連付けることにより、SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にする行列(以下、SIMD転置行列)Tを生成するステップと、
    を含み、
    前記SIMD形式の行列は、前記行列Mのr行の同時処理のために構成された複数ブロックのシーケンスを含み、各ブロックは、前記行列Mの連続するr行において、当該連続するr行のi番目の要素が、順次メモリ・アドレスに関して当該連続するr行の(i+1)番目の要素の前に来るように、当該連続するr行の諸要素をインターリーブすることによって構成される、
    コンピュータ実装方法。
  2. 前記動作が、
    前記行列Sをs個のセグメントに分割するステップと、
    前記s個のセグメントを前記SIMDマルチコア・プロセッサのs個の処理要素に割り当てるステップとをさらに有し、
    前記SIMD転置行列Tを生成するステップが、各処理要素上で各セグメントを転置するステップを含む、請求項1に記載のコンピュータ実装方法。
  3. 各処理要素上で各セグメントを転置する前記ステップが、当該各処理要素に対しローカルのメモリ上で生じ、
    前記SIMD転置行列Tを生成するステップが、前記処理要素の各々によって、各転置セグメントを当該処理要素のうち任意の処理要素に対してもローカルでないメモリに移動させるステップをさらに含む、請求項に記載のコンピュータ実装方法。
  4. 各処理要素上で各セグメントを転置する前記ステップが、
    当該各セグメントを、それぞれが当該各処理要素に対してローカルのメモリのサイズを超えないd個のサブディビジョンに分割するステップと、
    当該各セグメントの各サブディビジョンを当該各処理要素上で転置するステップと
    を含む、請求項に記載のコンピュータ実装方法。
  5. 前記行列Mが、256×256、512×512又は1024×1024のサイズを有する行列の形態でMRI(磁気共鳴画像)装置から取り込まれたイメージ・データの一部を格納する、請求項1に記載のコンピュータ実装方法。
  6. 行列をSIMD(単一命令複数データ)マルチコア・プロセッサ上で転置するように構成されたアプリケーション・プログラムを格納する非一時的なコンピュータ可読ストレージ媒体であって、
    前記アプリケーション・プログラムが、
    第1形式の行列Mを、前記SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の一の行上で1DFFT(高速フーリエ変換)動作を並列に実行することを可能にするSIMD形式の行列Sに変換するステップと、
    前記行列Sの各要素から前記行列Mの転置行列をSIMD形式の行列へ変換したあとの当該行列内の一の要素へのマッピングを検索するステップと、
    検索された前記マッピングに基づき、前記行列Sの各要素を前記一の要素に関連付けることにより、SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にする行列(以下、SIMD転置行列)Tを生成するステップと、
    を含む動作を実行することによって行列をSIMDマルチコア・プロセッサ上で転置
    前記SIMD形式の行列は、前記行列Mのr行の同時処理のために構成された複数ブロックのシーケンスを含み、各ブロックは、前記行列Mの連続するr行において、当該連続するr行のi番目の要素が、順次メモリ・アドレスに関して当該連続するr行の(i+1)番目の要素の前に来るように、当該連続するr行の諸要素をインターリーブすることによって構成される、
    非一時的なコンピュータ可読ストレージ媒体。
  7. 前記動作が、
    前記行列Sをs個のセグメントに分割するステップと、
    前記s個のセグメントを前記SIMDマルチコア・プロセッサのs個の処理要素に割り当てるステップとをさらに有し、
    前記SIMD転置行列Tを生成するステップが、各処理要素上で各セグメントを転置するステップを含む、請求項に記載の非一時的なコンピュータ可読ストレージ媒体。
  8. 各処理要素上で各セグメントを転置する前記ステップが、当該各処理要素に対しローカルのメモリ上で生じ、前記SIMD転置行列Tを生成するステップが、前記処理要素の各々によって、各転置セグメントを当該処理要素のうち任意の処理要素に対してもローカルでないメモリに移動させるステップをさらに含む、請求項に記載の非一時的なコンピュータ可読ストレージ媒体。
  9. 各処理要素上で各セグメントを転置する前記ステップが、
    当該各セグメントを、それぞれが当該各処理要素に対してローカルのメモリのサイズを超えないd個のサブディビジョンに分割するステップと、
    当該各セグメントの各サブディビジョンを当該各処理要素上で転置するステップと
    を含む、請求項に記載の非一時的なコンピュータ可読ストレージ媒体。
  10. 前記行列Mが、256×256、512×512又は1024×1024のサイズを有する行列の形態でMRI(磁気共鳴画像)装置から取り込まれたイメージ・データの一部を格納する、請求項に記載の非一時的なコンピュータ可読ストレージ媒体。
  11. SIMD(単一命令複数データ)マルチコア・プロセッサと、
    行列を前記SIMDマルチコア・プロセッサ上で転置するように構成されたアプリケーション・プログラムを保持するメモリとを備え、
    前記アプリケーション・プログラムが、
    第1形式の行列Mを、前記SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の一の行上で1DFFT(高速フーリエ変換)動作を並列に実行することを可能にするSIMD形式の行列Sに変換するステップと、
    前記行列Sの各要素から前記行列Mの転置行列をSIMD形式の行列へ変換したあとの当該行列内の一の要素へのマッピングを検索するステップと、
    検索された前記マッピングに基づき、前記行列Sの各要素を前記一の要素に関連付けることにより、SIMDマルチコア・プロセッサ上の複数のコアの各々が前記行列M内の転置された一の行上で1DFFT動作を並列に実行することを可能にする行列(以下、SIMD転置行列)Tを生成するステップと、
    を含む動作を実行することによって行列をSIMDマルチコア・プロセッサ上で転置
    前記SIMD形式の行列は、前記行列Mのr行の同時処理のために構成された複数ブロックのシーケンスを含み、各ブロックは、前記行列Mの連続するr行において、当該連続するr行のi番目の要素が、順次メモリ・アドレスに関して当該連続するr行の(i+1)番目の要素の前に来るように、当該連続するr行の諸要素をインターリーブすることによって構成される、
    システム。
  12. 前記動作が、
    前記行列Sをs個のセグメントに分割するステップと、
    前記s個のセグメントを前記SIMDマルチコア・プロセッサのs個の処理要素に割り当てるステップとをさらに有し、
    前記SIMD転置行列Tを生成するステップが、各処理要素上で各セグメントを転置するステップを含む、請求項11に記載のシステム。
  13. 各処理要素上で各セグメントを転置する前記ステップが、当該各処理要素に対しローカルのメモリ上で生じ、前記SIMD転置行列Tを生成するステップが、前記処理要素の各々によって、各転置セグメントを当該処理要素のうち任意の処理要素に対してもローカルでないメモリに移動させるステップをさらに含む、請求項12に記載のシステム。
  14. 各処理要素上で各セグメントを転置する前記ステップが、当該各セグメントを、それぞれが当該各処理要素に対してローカルのメモリのサイズを超えないd個のサブディビジョンに分割するステップと、
    当該各セグメントの各サブディビジョンを当該各処理要素上で転置するステップとを含む、請求項12に記載のシステム。
  15. 前記行列Mが、256×256、512×512又は1024×1024のサイズを有する行列の形態でMRI(磁気共鳴画像)装置から取り込まれたイメージ・データの一部を格納する、請求項11に記載のシステム。
JP2010243281A 2009-11-04 2010-10-29 行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム Expired - Fee Related JP5689282B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/612,037 US8539201B2 (en) 2009-11-04 2009-11-04 Transposing array data on SIMD multi-core processor architectures
US12/612037 2009-11-04

Publications (3)

Publication Number Publication Date
JP2011100452A JP2011100452A (ja) 2011-05-19
JP2011100452A5 JP2011100452A5 (ja) 2014-08-14
JP5689282B2 true JP5689282B2 (ja) 2015-03-25

Family

ID=43926625

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010243281A Expired - Fee Related JP5689282B2 (ja) 2009-11-04 2010-10-29 行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム

Country Status (4)

Country Link
US (1) US8539201B2 (ja)
JP (1) JP5689282B2 (ja)
KR (1) KR20110079495A (ja)
CN (1) CN102053948B (ja)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008129900A1 (ja) * 2007-04-12 2008-10-30 Nec Corporation アレイプロセッサ型データ処理装置
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures
JP5760532B2 (ja) * 2011-03-14 2015-08-12 株式会社リコー プロセッサ装置及びその演算方法
WO2013054468A1 (ja) * 2011-10-14 2013-04-18 パナソニック株式会社 転置演算装置とその集積回路、および転置処理方法
CN104011705A (zh) * 2011-12-01 2014-08-27 新加坡国立大学 多形异构性多核架构
CN102521209B (zh) * 2011-12-12 2015-03-11 浪潮电子信息产业股份有限公司 一种并行多处理器计算机的设计方法
WO2013095580A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN104011672A (zh) * 2011-12-30 2014-08-27 英特尔公司 转置指令
KR101893796B1 (ko) 2012-08-16 2018-10-04 삼성전자주식회사 동적 데이터 구성을 위한 방법 및 장치
CN102929724B (zh) * 2012-11-06 2016-04-13 无锡江南计算技术研究所 基于异构众核处理器的多级访存方法、离散访存方法
US9412063B2 (en) 2013-12-27 2016-08-09 International Business Machines Corporation Transform architecture for multiple neurosynaptic core circuits
US9406015B2 (en) 2013-12-27 2016-08-02 International Business Machines Corporation Transform for a neurosynaptic core circuit
TWI570573B (zh) 2014-07-08 2017-02-11 財團法人工業技術研究院 矩陣轉置電路
SE539721C2 (en) * 2014-07-09 2017-11-07 Device and method for performing a Fourier transform on a three dimensional data set
KR102452945B1 (ko) * 2015-08-27 2022-10-11 삼성전자주식회사 푸리에 변환을 수행하는 방법 및 장치
US10635909B2 (en) * 2015-12-30 2020-04-28 Texas Instruments Incorporated Vehicle control with efficient iterative triangulation
US10095445B2 (en) 2016-03-29 2018-10-09 Western Digital Technologies, Inc. Systems and methods for offloading processing from a host to storage processing units using an interconnect network
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
KR102526754B1 (ko) * 2016-07-13 2023-04-27 삼성전자주식회사 3차원 영상 처리 방법 및 장치
KR102654862B1 (ko) * 2016-08-31 2024-04-05 삼성전자주식회사 영상 처리 방법 및 장치
US11748625B2 (en) 2016-12-30 2023-09-05 Intel Corporation Distributed convolution for neural networks
US10169296B2 (en) 2016-12-30 2019-01-01 Intel Corporation Distributed matrix multiplication for neural networks
EP3563304B1 (en) * 2016-12-30 2022-03-09 Intel Corporation Deep learning hardware
EP4137941A1 (en) 2017-03-20 2023-02-22 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
CN107168683B (zh) * 2017-05-05 2020-06-09 中国科学院软件研究所 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
KR102494412B1 (ko) * 2017-11-28 2023-02-03 삼성전자 주식회사 Simd 연산을 이용하여 이미지 데이터의 주파수 변환을 수행하는 전자 장치 및 전자 장치의 동작 방법
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10963256B2 (en) * 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10853559B2 (en) 2019-03-27 2020-12-01 Charter Communications Operating, Llc Symmetric text replacement
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN111444134A (zh) * 2020-03-24 2020-07-24 山东大学 分子动力学模拟软件的并行pme的加速优化方法及***
US11593454B2 (en) * 2020-06-02 2023-02-28 Intel Corporation Matrix operation optimization mechanism
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
CN112433760B (zh) * 2020-11-27 2022-09-23 海光信息技术股份有限公司 数据排序方法和数据排序电路
US12001385B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
KR20220162543A (ko) 2021-06-01 2022-12-08 에스케이하이닉스 주식회사 메모리 장치, 반도체 시스템 및 데이터 처리 시스템
KR102527829B1 (ko) * 2021-08-19 2023-04-28 한국기술교육대학교 산학협력단 Cpu와 gpu를 사용하는 행렬 전치기반 2d-fft 연산 장치 및 이를 이용한 데이터 연산 방법
US20240020129A1 (en) * 2022-07-14 2024-01-18 Nxp Usa, Inc. Self-Ordering Fast Fourier Transform For Single Instruction Multiple Data Engines

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6243730B1 (en) * 1999-05-04 2001-06-05 Sony Electronics, Inc. Methods and systems for performing short integer chen IDCT algorithm with fused multiply/add
US6625721B1 (en) * 1999-07-26 2003-09-23 Intel Corporation Registers for 2-D matrix processing
US20030084081A1 (en) * 2001-10-27 2003-05-01 Bedros Hanounik Method and apparatus for transposing a two dimensional array
US6963341B1 (en) * 2002-06-03 2005-11-08 Tibet MIMAR Fast and flexible scan conversion and matrix transpose in a SIMD processor
US7386703B2 (en) * 2003-11-18 2008-06-10 International Business Machines Corporation Two dimensional addressing of a matrix-vector register array
US20070106718A1 (en) * 2005-11-04 2007-05-10 Shum Hoi L Fast fourier transform on a single-instruction-stream, multiple-data-stream processor
US7937567B1 (en) * 2006-11-01 2011-05-03 Nvidia Corporation Methods for scalably exploiting parallelism in a parallel processing system
US7979672B2 (en) * 2008-07-25 2011-07-12 International Business Machines Corporation Multi-core processors for 3D array transposition by logically retrieving in-place physically transposed sub-array data
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures

Also Published As

Publication number Publication date
CN102053948B (zh) 2013-09-11
CN102053948A (zh) 2011-05-11
JP2011100452A (ja) 2011-05-19
US20110107060A1 (en) 2011-05-05
KR20110079495A (ko) 2011-07-07
US8539201B2 (en) 2013-09-17

Similar Documents

Publication Publication Date Title
JP5689282B2 (ja) 行列をsimdマルチコア・プロセッサ・アーキテクチャ上で転置するためのコンピュータ実装方法、コンピュータ可読ストレージ媒体及びシステム
US7836116B1 (en) Fast fourier transforms and related transforms using cooperative thread arrays
US7640284B1 (en) Bit reversal methods for a parallel processor
US11704548B2 (en) Multicast network and memory transfer optimizations for neural network hardware acceleration
US8484276B2 (en) Processing array data on SIMD multi-core processor architectures
JP2011100452A5 (ja)
US7461114B2 (en) Fourier transform apparatus
US4821224A (en) Method and apparatus for processing multi-dimensional data to obtain a Fourier transform
EP0902375A2 (en) Apparatus for fast Fourier transform
US8880575B2 (en) Fast fourier transform using a small capacity memory
EP2455854A1 (en) System, device, and method for on-the-fly permutations of vector memories for executing intra-vector operations
JP2000231513A (ja) N次元矩形データアレイの任意の所与次元におけるパラレルデータアクセスのためのメモリアーキテクチャ
EP1483684A2 (en) Method of performing nxm discrete cosine transform
US6728742B1 (en) Data storage patterns for fast fourier transforms
Sorokin et al. Conflict-free parallel access scheme for mixed-radix FFT supporting I/O permutations
US9268744B2 (en) Parallel bit reversal devices and methods
Mermer et al. Efficient 2D FFT implementation on mediaprocessors
CN111368250B (zh) 基于傅里叶变换/逆变换的数据处理***、方法及设备
Zheng Encrypted cloud using GPUs
JP7136343B2 (ja) データ処理システム、方法、およびプログラム
US6438568B1 (en) Method and apparatus for optimizing conversion of input data to output data
US20240020129A1 (en) Self-Ordering Fast Fourier Transform For Single Instruction Multiple Data Engines
US6772183B1 (en) Device for converting input data to output data using plural converters
Sánchez et al. An efficient architecture for the in-place fast cosine transform
CN117633418A (zh) 基于矩阵运算的多维快速傅立叶变换加速方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140630

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20140630

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20140709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140729

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141028

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150128

R150 Certificate of patent or registration of utility model

Ref document number: 5689282

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees