JP2009509267A - マルチプロセッサにおけるストリーミング・アプリケーションのためのデータ変換 - Google Patents

マルチプロセッサにおけるストリーミング・アプリケーションのためのデータ変換 Download PDF

Info

Publication number
JP2009509267A
JP2009509267A JP2008532296A JP2008532296A JP2009509267A JP 2009509267 A JP2009509267 A JP 2009509267A JP 2008532296 A JP2008532296 A JP 2008532296A JP 2008532296 A JP2008532296 A JP 2008532296A JP 2009509267 A JP2009509267 A JP 2009509267A
Authority
JP
Japan
Prior art keywords
computer program
program
nested loops
nested
array
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.)
Granted
Application number
JP2008532296A
Other languages
English (en)
Other versions
JP5009296B2 (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2009509267A publication Critical patent/JP2009509267A/ja
Application granted granted Critical
Publication of JP5009296B2 publication Critical patent/JP5009296B2/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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 or look ahead
    • 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/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Operations Research (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

多次元多面体を記述する連立不等式を作成し、多面体をある低次元空間に投影することによりシステムを解き、解をストリームプログラムにマッピングすることにより、ストリーム演算子処理を最適化することにより、多面体を1つのより少しの次元の間に投影することによってシステムを解いて、溶液を流れプログラムにマップすることによってストリーム演算子処理を最適化する方法。アフィンパーティショニングに基づく他のプログラム最適化方法も記載され、請求される。
【選択図】図3

Description

本発明は、コンピュータプログラムを最適化するための技術に関する。より詳しくは、本発明は、コンピュータプログラムにおける並列性を見えるようにして利用するための技術に関する。
中央処理装置(CPU)を複数含むコンピュータシステムがより一般的になっている。しかし、一般にシステムのCPUの数を増やすことによるパフォーマンスの向上は、CPUの数と直線的には比例しない。とはいうものの、成長中のアプリケーションであるストリーミングメディアアプリケーションなどは、多くの場合、多重CPUをより効率的に利用できる処理パターンを提示している。だが、そのストリーミングメディアアプリケーションのパフォーマンスもCPUの数とは完全に直線的には比例せず、多重CPUの並列処理能力を利用すべくアプリケーションを設計するのは難しい仕事である。並列のアプリケーション設計を単純化して、並列のアプリケーションパフォーマンスを改良する作業は、新たなコンピュータ言語の設計および新しい最適化スキームの実装を含むいくつかの問題に直面している。
コンピュータプログラムは、通常、C、C++またはFortranなどの高級言語で表される。プログラムは、コンパイラとして知られるプログラムにより分析され、特定のタイプのCPUで実行されるべく一連の機械語命令へと変換される。コンパイラは、高水準プログラムにより記述される論理的プロセスを正しく実行する命令シーケンスを生成する役目をもっている。コンパイラは、多くの場合、メモリアクセス特徴を向上させるか、または、結果が決して使われない計算を除去すべく動作を再び順序付けることによって命令シーケンスのパフォーマンスを向上させる最適化機能を含む。コンパイラの中には、相互依存性を持たない論理プログラムパスを検出することができ、これらのパスを、多重CPUを有するマシンで並列に実行されるよう設定するものもある。BrookおよびStreamItのようなコンピュータ言語は、具体的には、コンパイラが並列処理のチャンスを識別する手助けをするように設計されてきた。
現在のコンパイラによる最適化戦略は、場当たり的に前進したところがあり、一連の経験則主導変換式をプログラムの中間表現上の独立した「パス」の順序で実行している。例えば、「ループインターチェンジ」パスは、アレイにおけるデータを列順序優先というよりむしろ行順序優先で処理するようプログラムを変更し、その結果、CPUのキャッシュは、より効率よく稼動できるようになる。あるいは、「不要コード」パスが、決して実行されない命令を探して取り除いてもよい。これらのパスは、順序に依存し得る。1つのタイプの最適化は、他のタイプの最適化のチャンスを隠蔽するかまたは排除し得るので、最適化パスの順序を変えることにより、コンパイル済みプログラムのパフォーマンスを変えることができる。しかしながら、様々な最適化が多数あるので、どの順序が所定のプログラムの最適化を提供するかを見るために異なる最適化パス順序でプログラムをコンパイルすることは非現実的である。
本発明の実施形態が添付の図面を例に示されるが、本発明はこれに限定されない。また、図面を通じて同じ参照符号は、同じ構成要素を示す。本開示における「一の」または「1つの」実施形態への言及は、必ずしも同じ実施形態を示すものではなく、「少なくとも1つの」を意味する。
二次元データアレイ、および、二次元データアレイをコンピュータメモリにマッピングした特徴を示す。
2つの二次元配列に対し行うプログラムフラグメントのデータアクセスパターンを示す。
本発明の一実施形態に従うコンパイラによる最適化動作のフローチャートである。
本発明の一実施形態により最適化されるプログラムの動作をプログラムの動作を視覚化する他の方法を示す。
ストリーミングプログラムにおけるコンパイラによる最適化のフローチャートである。
本発明の一実施形態をホストし、一実施形態により生成される最適化プログラムを実行するコンピュータシステムを示す。
本発明の実施形態は、参照の局所性を改善し、コンピュータプログラムにおける並行実行のチャンスを検出し、かつ、メモリフットプリントを減少させて、内部スレッド依存を増やすようプログラムを再編成できる。これらの有益な結果を達成する解析的モデルは、単純なおよび/または非効率的な動作(例えば、連続合計の計算)をしばしば含む可能性がある−なぜなら、読み出された後のデータに実行される動作は無関係なので−例を参照することにより説明される。本発明の実施形態はデータ上で任意の複雑な計算を実行するプログラムのメモリアクセスパターンおよび並列化を改善することができるが、複雑な計算を伴う実施形態は、記載されるべき特徴をあいまいにするだけであろう。
図1は、データ110の二次元配列を示し、それぞれの行120、130の内容が、行順序の多次元配列に配置したコンピュータ言語によってどのようにメインメモリ140のメモリーロケーションの一次元配列にマップされ得るかを示す。(いくつかの言語は多次元配列を列順序に格納するが、データ処理動作の分析は容易に適応される。
特に明記しない限り、以下では行優先記憶と仮定する。)
配列110におけるデータを処理するプログラムは、要素に対し行150を左から右、列160を上から下に、あるいはより複雑な対角線パターン170で調べるかまたは動作する。最新のCPUは、通常隣接するマルチワードブロック(例えば180)の内部キャッシュにメモリからデータをロードするので(「キャッシュラインの充填として知られるプロセス)、CPUが新たなキャッシュラインをロードすることを要求する前に1つのキャッシュラインにロードされる全てのデータに働きかけることができる処理パターンは、未キャッシュの場所からデータを要求する前にキャッシュラインの1つだけのアイテムに働きかけるパターンよりかなり速く実行することができる。
このように、たとえば、アレイ110の行のデータを合計するプログラムは、およそc/lキャッシュラインフィル(cはアレイの列数であり、lはキャッシュラインのワード数である)により行を完成することができる。対照的に、アレイ110の列のデータを合計するプログラムは、一列を完成させるためにrキャッシュラインフィル(rは、アレイの行数である)を必要とする。−プログラムは、CPUのキャッシュ能力からほとんど恩恵を受けないこということである。
さらに、第1の列の完了後、第2の列の処理を始めるために、CPUは、アレイ[0][0]からアレイ[0][l−1]をキャッシュラインへと再びデータをロードしなければならない(アレイ内の行数は、利用可能なキャッシュライン数を上回るので、前にロードされたデータは外に出されていると仮定した場合)。
他の視点では、キャッシュ−ラインフィルにおいてロードされるデータを効率的に利用することにより、処理の間、データを保持することを要求されるキャッシュメモリ量を減らすことができる。キャッシュの利用は、コードシーケンスの「メモリフットプリント」とみなされることができる。キャッシュメモリは、不十分な資源であるので、メモリフットプリントを減らすことは、パフォーマンスにとって非常に有益である。
アレイの行を合計するための左から右への行ごとのアクセスパターン150は、ほとんど改善の余地がないが、アレイの列を合計するための上から下への列ごとのアクセスパターン160は、1の列のグループを同時に合計することにより改善できることが容易にわかる。後者は、従来技術のループ−インターチェンジ経験則により適切に実行されることができる最適化である。しかしながら、対角線170のようなより複雑なパターンについては、経験則はあまり成功していない。
図2は、本発明の実施形態の一側面を示す2アレイ最適化問題を導く。アレイA210およびB220の要素は、結合アレイ230に重畳して示される。2つのアレイは、擬似コードプログラムフラグメント240に従い演算される。ループ243および246がアレイ上で行ごと、列ごとに繰り返される一方で、ステートメントS1(250)、S2(260)は、アレイ要素に単純な計算を実行する(実際の計算は問題でなく、メモリアクセスパターンのみが重要)。矢270および280は、ステートメントS1およびS2が異なる行および列からどのようにアレイ要素にアクセスするかについて示す。
本発明の一実施形態は、図3のフローチャートに従い、コードフラグメント240を最適化することができる。まず、プログラム内の複数のネスト化ループが識別され(310)、分析される(320)。このようなネスト化ループは、プログラムが多次元配列のデータを処理するところで頻繁に起きる。この例では、ネスト化ループ243および246は、誘導変数iおよびjによりアレイAおよびBの行および列で繰り返される。次に、複数のループの誘導変数は、独立誘導変数P(320)の線形関数に変換される。ステートメントS1およびS2に対して以下の一般形の線形関数が仮定される。
P = ai + bj + c (ステートメントS1)
P = di + ej + f (ステートメントS2)
S1およびS2がループの異なる繰返しの間、同一データにアクセスするので、それらは一緒に処理される。または、より正確には、以下の従属関係による。
Figure 2009509267
ステートメントは、同じアフィン区画に配置される。
ai + bj + c = P = di + e(j+1) + f
a(i+1) + bj + c = P = di + ej + f
これらの方程式を再編成すると、以下を得ることができる。
(a-d)i+(b-e)j=f+e-c
(a-d)i+(b-e)j=f-c-a
または、
a=d;b=e;f+e=c
a=d;b=e;f-c=a
一般性の損失なしに、cがゼロに等しく設定されることができ、a-fに対する以下の解が得られる。
(a、b、c、d、e、f)=(1、-1、0、1、-1、1)
S1およびS2への結果として生じるアフィン変換は、以下の通りである。
P=i-j (ステートメントS1)
P=i-j+1 (ステートメントS2)
最後に、プログラムフラグメント240における複数のネスト化ループの関数内容は、以下に示すように書き直されることができる(330)。ここでは、ネスト化ループは、独立誘導変数の新たなループ内に配置され、ステートメントは、線形関数から導かれる連立不等式に従いパーティションに区分される。
Figure 2009509267
新たな定式化は、オリジナルのフラグメントより非常に複雑に見えるにもかかわらず、従来の不要コードの除去および類似した最適化技術は、この一般形の解の多くの分岐をしばしば取り除く(空のパーティションを取り除く)ことができる(340)。さらに、外側ループおよび条件式が作成されているアフィンパーティショニング方法なので、外側ループのそれぞれの繰返し(および2つの内側ループの完全な実行)は、オリジナルフラグメントの2つのループの完全な実行より小さいメモリフットプリントを有する。外側ループの繰返しの間におけるデータの依存性はより少なく、それらの繰返しは、それらが並列に実行されることができるように独立している。このように、本方法は、オリジナルプログラムに内在する並列性を顕在化させる。本発明の一実施形態を実行するコンパイラは、多くのスレッドのそれぞれに、外側ループの1つを(並列に)繰り返すことを開始させるコードを発行することができる。結果として生じるプログラムは、その改良されたメモリアクセスパターン、および、システムのマルチプロセッサを利用するその能力のおかげで、非常に速く2つのアレイで同じ演算を実行できる。
それぞれのパーティションに対し実行される計算は条件式の帰結に配置され、その述語は、独立誘導変数とオリジナルの複数のループの誘導変数とを比較する不等式である。
図4は、アフィンパーティショニングによるプログラムの最適化についての他の考え方を示す。線形方程式の変換および解は、通常、アレイ410を介したデータアクセス420の並列パスを見つける。これらの並列パスは、アレイ(行430および列440)の2本の主軸のいずれにも整列されない。したがって、特定の領域450、460、470および480は、外側の独立ループの処理から除外されなければならない。連立不等式は、独立誘導変数のより大きい空間内のアレイポリゴン(この場合は単に長方形であり、より高次元だと多面体)の境界を記述する。
前述の説明では、単純な、二次元の例を中心に考えられている。しかしながら、本方法は、任意の多次元を理解可能なように図で示すのは難しいにも関わらず、そのような次元にも適用できる。BrookおよびStreamItのようなコンピュータ言語は、可変多次元データストリームを扱うための簡単な抽象概念を提供する。ストリーミング演算子は、複数のネスト化ループを本質的に含むので、プログラムは、ストリーミングデータ全体に働きかけることができるのだが、C、および、C++などの非ストリーミング言語では、言語のセマンティクスがいくつかのプログラミングコンストラクトを妨げ、確実な最適化を妨害するかあるいは、それらを安全でなくすこともあり得る。本発明の実施形態は、図5のフローチャートに従い、ストリーミングプログラムを最適化すべく有効に適用されることができる。
まず、ストリーム演算子は、オリジナルコンピュータプログラム(510)内で識別され、多次元多面体を記述すると考えられ得る連立不等式が演算子に対し作成される(520)。多面体は連立不等式の解を得るべくある低次元の空間に投影(530)され、最終的に、解はオリジナルプログラムに再びマッピングされることにより、プログラムの最適化バージョンが作成される(540)。前述のように、最適化されたプログラムは、おそらく、オリジナルより非常に複雑に見えるだろうが、実際、それはオリジナルプログラムよりメモリフットプリントが小さく、(そんなフットプリントが可能ならば)、データの依存性も少ない。
本発明の一実施形態を実行するコンパイラにより発行される最適化されたプログラムでは、ストリーム演算子の付随するネスト化反復構造は、独立誘導変数の最外ループ内に配置されるだろう。ループの関数内容は、独立誘導変数と内側ループの誘導変数とを比較する条件ステートメントによってパーティションに分割され、演算順序が正確でない場合、プログラムは、オリジナルプログラムの論理関数を維持する。
表1は、Brook演算子およびそれらの関連する不等式の一覧を示す。
Figure 2009509267
演算子および他のコンピュータ言語のパラダイムに対しては類似した連立不等式が準備され得る。
本発明の実施形態を実行する最適化コンパイラは、大容量記憶装置のファイルからオリジナルのコンピュータプログラムを読み込むことができるか、またはパイプまたは他のプロセス間通信機能を介し前処理段階の出力を受信することができる。コンパイラの中には、プログラムソースファイルまたは他の入力から階層的なデータ構造を構築し、データ構造自体に働きかけることができるものもある。コンパイラは、最適化されたプログラムをファイルに書き込むか、パイプまたはプロセス間通信機構を介しプログラムを送信するか、または、例えば最適化を含むデータ構造など新規または修正された中間表現を作成することによって、出力することができる。出力は、第2のコンパイラによりコンパイルまたはアセンブルされるC、C++またはアセンブラ言語のような他の言語の人間に解読可能なプログラムテキストであってもよい。あるいは、直接実行されることができるか、または、他のコンパイルされたモジュールまたはライブラリにリンクされることができるマシンコードであってもよい。
図6は、本発明の一実施形態を実行するコンパイラをサポートすることができるコンピュータシステムを示す。システムは、一つ以上のプロセッサ610、620、メモリ630、および、大容量記憶装置640を含む。プロセッサ610および620は、アドレス、データバス、および、キャッシュなど特定の他の内部構造体、および、関連した支持回路を共有する多数の実行コアを含むことができる。マルチコアCPUは、論理的には、物理的に別々のCPUと同じあると言ってよいが、コストまたは電力削減をもたらすことができる。この図に示されるシステムにホストされるコンパイラは、システム自体を対象として実行可能なファイル、あるいは、第2の異なるシステムに対する実行可能ファイルを作成することができる。多重CPU(または単一の物理的CPUにおけるマルチコア)が利用可能な場合、実行可能ファイルでは、異なるCPU上で同時に外側ループの個別の繰返しを実行することにより多重CPUを利用することができる。コンパイラによって生成される最適化されたプログラムは、同じプログラムの非最適化バージョンより速く動作することができ、利用できるプロセッサおよびキャッシュ機能をもっとうまく利用することができる。システムのプロセッサが1つだけであっても、改良されたキャッシュ利用により、最適化プログラムを非最適化プログラムより速く実行させることができる。
本発明の一実施形態は、上述のようにプロセッサに演算を実行させる命令を格納した機械可読媒体であってよい。他の実施形態では、演算は、ハードワイヤードロジックを含む特定のハードウェアコンポーネントにより実行され得る。それらの演算は、あるいは、プログラムされたコンピュータ構成要素およびカスタムハードウェアコンポーネントのいかなる組合せにもよって実行され得る。
機械可読媒体は、これらに限定されないが、読み取り専用コンパクトディスク(CD−ROM)、リード・オンリー・メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、消去可能PROM(EPROM)および、インターネット上の伝送を含む、機械(コンピュータなど)によって読み取られ得る形式で情報を格納するかあるいは伝送するいかなる機械をも含み得る。
これまで、主に特定の例を参照しておよび特定のハードウェアおよび/またはソフトウェアコンポーネントへの機能の特定の割り当てに関して本発明の適用を説明してきた。しかしながら、当業者であれば、並行実行のためのプログラムの最適化は、本願明細書とは異なる本発明の実施形態の機能をもたらすソフトウェアおよびハードウェアによっても実行できることが理解されよう。このような相違および実施態様は、添付の請求項に従い把握されることと理解する。

Claims (20)

  1. 一のオリジナルコンピュータプログラム内の一のストリーム演算子を識別することと、
    前記ストリーム演算子のための、一の多次元多面体を記述する一の連立不等式を生成することと、
    前記多次元多面体の一の次元より一次元小さい次元の一の空間に前記多次元多面体を投影することにより、前記連立不等式の一の解を得ることと、
    前記オリジナルコンピュータプログラムに前記連立不等式の前記解をマッピングすることにより、一の修正されたコンピュータプログラムを生成することと、
    を含む方法。
  2. 前記修正されたコンピュータプログラムは、前記オリジナルコンピュータプログラムより小さい一のメモリフットプリントを有する、請求項1に記載の方法。
  3. 前記修正されたコンピュータプログラムは、前記オリジナルコンピュータプログラムよりデータの依存性が少ない、請求項1に記載の方法。
  4. 一の第1のコンピュータプログラム内の複数のネスト化ループを識別することと、
    前記複数のネスト化ループの複数の誘導変数を一の独立誘導変数の複数の線形関数に変換することと、
    前記独立誘導変数の一の新たなループ範囲内に前記複数のネスト化ループの一の関数内容を含む一の第2のコンピュータプログラムを出力することと、を含み、
    前記複数のネスト化ループの前記関数内容は、前記複数の線形関数から導かれる一の連立不等式に従い、複数のパーティションに分割される、方法。
  5. 前記新たなループの複数の繰返しは、並列に実行されるべきである、請求項4に記載の方法。
  6. 前記複数のパーティションは、前記独立誘導変数と、前記複数の誘導変数の少なくとも1つとを含む複数の条件式の複数の帰結である、請求項4に記載の方法。
  7. 複数の空のパーティションを取り除くよう前記第2のコンピュータプログラムを最適化することをさらに含む、請求項4に記載の方法。
  8. 一の第1のコンピュータプログラム内の複数のネスト化反復構造を識別することと、
    前記複数のネスト化反復構造を一のアフィン空間でモデル化することと、
    前記アフィン空間内で前記モデルを分割することと、
    前記第1のコンピュータプログラムの一の論理機能を維持する一の第2のコンピュータプログラム内で一の第2の複数のネスト化反復構造を発行することと、を含み、
    前記第2の複数のネスト化反復構造の一の最外反復構造は、前記第2の複数のネスト化反復構造の残りの反復構造から独立している、方法。
  9. 第1のコンピュータプログラムは、Brookコンピュータ言語およびStreamItコンピュータ言語のうちどちらかの一のプログラムである、請求項8に記載の方法。
  10. 前記第2のコンピュータプログラムは、Cコンピュータ言語およびC++コンピュータ言語のうちのどちらかの一のプログラムである請求項8の方法。
  11. 前記第2のコンピュータプログラムは、一の中間表現の一のデータ構造である、請求項8に記載の方法。
  12. 一のデータ処理機械によって実行されると、該機械に動作を実行させる複数の命令を含む機械可読媒体であって、前記動作は、
    一の第1のコンピュータプログラムを読み込むことと、
    一のアレイ内のデータを処理すべく、前記第1のプログラム内で一の第1の複数のネスト化ループを識別することと、
    前記第1の複数のネスト化ループを分析することと、
    前記第1のコンピュータプログラムの一の関数を実行する一の第2のコンピュータプログラムを生成することと、を含み、
    前記第2のコンピュータプログラムは、一のアレイ内のデータを処理する一の第2の複数のネスト化ループを含み、
    前記第2の複数のネスト化ループは、前記第1の複数のネスト化ループより少なくとも1つ多いループを含み、
    前記第2の複数のネスト化ループの一の外側ループの複数の繰返しは、互いに独立している、機械可読媒体。
  13. 前記第1の複数のネスト化ループにおける一のプログラムステートメントは、前記第2の複数のネスト化ループにおける一の条件ステートメント内に現れ、該条件ステートメントは、前記外側ループの一の誘導変数と一の内側ループの一の誘導変数とを比較する、請求項12に記載の機械可読媒体。
  14. 前記第1のプログラムは、一の多次元配列内のデータを処理する、請求項12に記載の機械可読媒体。
  15. 前記第1の複数のネスト化ループを分析することは、
    一の第1のアレイアクセスを一の第1の線形方程式として表すことと、
    一の第2のアレイアクセスを一の第2の線形方程式として表すことと、
    前記第1および第2の線形方程式への一の同時解答を見つけることと、を含む、請求項12に記載の機械可読媒体。
  16. 前記外側ループの複数の繰返しは、前記第1および第2の線形方程式への前記同時解答に対応する、請求項15に記載の機械可読媒体。
  17. システムであって、
    複数のプロセッサと、
    一のメモリと、
    一のデータ記憶デバイスとを含み、
    前記データ記憶デバイスは、前記複数のプロセッサに、
    一の第1のコンピュータプログラムを前記メモリへロードさせることと、
    一のアレイ内のデータを処理すべく、前記第1のコンピュータプログラムにおいて一の第1の複数のネスト化ループを識別することと、
    前記第1のプログラムの一の関数を実行すべく一の第2のコンピュータプログラムを生成することと、
    を実行させる複数の命令を含み、
    前記第2のコンピュータプログラムは、一のアレイ内のデータを処理する一の第2の複数のネスト化ループを含み、前記第2の複数のネスト化ループは、前記第1の複数のネスト化ループより1つ多くループを含み、
    前記第2の複数のネスト化ループ内の複数のプログラムステートメントは、一の外側ループの一の誘導変数を一の内側ループの一の誘導変数と関連付ける複数の条件式によって複数のパーティションに分割される、システム。
  18. 前記外側ループの複数の繰返しは、前記複数のプロセッサにより並列に実行される、請求項17に記載のシステム。
  19. 前記複数のプロセッサは、単一の物理的プロセッサの複数の実行コアを含む、請求項17に記載のシステム。
  20. 前記複数のプロセッサは、複数の物理的プロセッサを含み、それぞれの物理的プロセッサは、少なくとも1つの実行コアを含む、請求項17に記載のシステム。
JP2008532296A 2005-09-23 2006-09-14 マルチプロセッサにおけるストリーミング・アプリケーションのためのデータ変換 Expired - Fee Related JP5009296B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/234,484 US20070074195A1 (en) 2005-09-23 2005-09-23 Data transformations for streaming applications on multiprocessors
US11/234,484 2005-09-23
PCT/US2006/036155 WO2007038035A1 (en) 2005-09-23 2006-09-14 Data transformations for streaming applications on multiprocessors

Publications (2)

Publication Number Publication Date
JP2009509267A true JP2009509267A (ja) 2009-03-05
JP5009296B2 JP5009296B2 (ja) 2012-08-22

Family

ID=37635770

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008532296A Expired - Fee Related JP5009296B2 (ja) 2005-09-23 2006-09-14 マルチプロセッサにおけるストリーミング・アプリケーションのためのデータ変換

Country Status (6)

Country Link
US (1) US20070074195A1 (ja)
EP (2) EP1927048A1 (ja)
JP (1) JP5009296B2 (ja)
KR (1) KR100991091B1 (ja)
CN (1) CN101268444B (ja)
WO (1) WO2007038035A1 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7953158B2 (en) * 2005-06-30 2011-05-31 Intel Corporation Computation transformations for streaming applications on multiprocessors
US7793278B2 (en) * 2005-09-30 2010-09-07 Intel Corporation Systems and methods for affine-partitioning programs onto multiple processing units
US7757222B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
CA2543304A1 (en) * 2006-04-11 2007-10-11 Ibm Canada Limited - Ibm Canada Limitee Code highlight and intelligent location descriptor for programming shells
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
US8819647B2 (en) * 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8122442B2 (en) * 2008-01-31 2012-02-21 Oracle America, Inc. Method and system for array optimization
US8930926B2 (en) * 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
US8661422B2 (en) * 2008-02-08 2014-02-25 Reservoir Labs, Inc. Methods and apparatus for local memory compaction
US8572590B2 (en) * 2008-09-17 2013-10-29 Reservoir Labs, Inc. Methods and apparatus for joint parallelism and locality optimization in source code compilation
US9858053B2 (en) 2008-02-08 2018-01-02 Reservoir Labs, Inc. Methods and apparatus for data transfer optimization
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8688619B1 (en) 2009-03-09 2014-04-01 Reservoir Labs Systems, methods and apparatus for distributed decision processing
WO2010121228A2 (en) * 2009-04-17 2010-10-21 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
WO2010127173A2 (en) * 2009-04-30 2010-11-04 Reservoir Labs, Inc. System, apparatus and methods to implement high-speed network analyzers
US9438861B2 (en) * 2009-10-06 2016-09-06 Microsoft Technology Licensing, Llc Integrating continuous and sparse streaming data
US8892483B1 (en) 2010-06-01 2014-11-18 Reservoir Labs, Inc. Systems and methods for planning a solution to a dynamically changing problem
US8914601B1 (en) 2010-10-18 2014-12-16 Reservoir Labs, Inc. Systems and methods for a fast interconnect table
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) * 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9134976B1 (en) 2010-12-13 2015-09-15 Reservoir Labs, Inc. Cross-format analysis of software systems
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US9430596B2 (en) 2011-06-14 2016-08-30 Montana Systems Inc. System, method and apparatus for a scalable parallel processor
US9489180B1 (en) 2011-11-18 2016-11-08 Reservoir Labs, Inc. Methods and apparatus for joint scheduling and layout optimization to enable multi-level vectorization
US9830133B1 (en) 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
US9798588B1 (en) 2012-04-25 2017-10-24 Significs And Elements, Llc Efficient packet forwarding using cyber-security aware policies
US10936569B1 (en) 2012-05-18 2021-03-02 Reservoir Labs, Inc. Efficient and scalable computations with sparse tensors
US9684865B1 (en) 2012-06-05 2017-06-20 Significs And Elements, Llc System and method for configuration of an ensemble solver
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
CN104969179B (zh) * 2013-03-15 2019-07-16 英特尔公司 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统
WO2015050594A2 (en) * 2013-06-16 2015-04-09 President And Fellows Of Harvard College Methods and apparatus for parallel processing
US9110681B2 (en) 2013-12-11 2015-08-18 International Business Machines Corporation Recognizing operational options for stream operators at compile-time

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6615366B1 (en) * 1999-12-21 2003-09-02 Intel Corporation Microprocessor with dual execution core operable in high reliability mode
US6772415B1 (en) * 2000-01-31 2004-08-03 Interuniversitair Microelektronica Centrum (Imec) Vzw Loop optimization with mapping code on an architecture
US6952821B2 (en) * 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7086038B2 (en) * 2002-10-07 2006-08-01 Hewlett-Packard Development Company, L.P. System and method for creating systolic solvers
EP1569104A3 (en) * 2004-01-09 2006-05-03 Interuniversitair Microelektronica Centrum Vzw An automated method for performing parallelization of sequential code and a computerized system adapted therefore
US7487497B2 (en) * 2004-08-26 2009-02-03 International Business Machines Corporation Method and system for auto parallelization of zero-trip loops through induction variable substitution

Also Published As

Publication number Publication date
CN101268444A (zh) 2008-09-17
US20070074195A1 (en) 2007-03-29
KR100991091B1 (ko) 2010-10-29
WO2007038035A1 (en) 2007-04-05
CN101268444B (zh) 2016-05-04
KR20080041271A (ko) 2008-05-09
EP1927048A1 (en) 2008-06-04
JP5009296B2 (ja) 2012-08-22
EP2345961A1 (en) 2011-07-20

Similar Documents

Publication Publication Date Title
JP5009296B2 (ja) マルチプロセッサにおけるストリーミング・アプリケーションのためのデータ変換
Lee et al. OpenMPC: Extended OpenMP programming and tuning for GPUs
Yang et al. A GPGPU compiler for memory optimization and parallelism management
Ding et al. Improving effective bandwidth through compiler enhancement of global cache reuse
Bauer et al. Singe: Leveraging warp specialization for high performance on gpus
Orchard et al. Ypnos: declarative, parallel structured grid programming
Haidl et al. Pacxxv2+ RV: an LLVM-based portable high-performance programming model
Krieger et al. Loop chaining: A programming abstraction for balancing locality and parallelism
Hammami et al. An overview on loop tiling techniques for code generation
Lobeiras et al. Designing efficient index-digit algorithms for CUDA GPU architectures
Donaldson et al. Automatic offloading of C++ for the Cell BE processor: a case study using Offload
Yan et al. Homp: Automated distribution of parallel loops and data in highly parallel accelerator-based systems
CN115904328A (zh) 一种基于llvm中间语言的跨gpu架构的并行计算框架的转化方法
Hanxleden et al. Value-based distributions in fortran d| a preliminary report
Yazdanpanah An approach for analyzing auto-vectorization potential of emerging workloads
Shashidhar et al. Lighthouse: An automatic code generator for graph algorithms on gpus
Foley et al. Efficient partitioning of fragment shaders for multiple-output hardware
Sung Data layout transformation through in-place transposition
Kenter et al. Partitioning and vectorizing binary applications for a reconfigurable vector computer
Ringenburg et al. Optimizing loop-level parallelism in Cray XMTTM applications
Jindal et al. Automated tool to generate parallel CUDA code from a serial C code
Wu Facilitating the Deployment of Irregular Applications on Parallel Manycore Architecture by Identifying Irregular Patterns
Nabi et al. An intermediate language and estimator for automated design space exploration on fpgas
Lebedev et al. Automatic Parallelization of Affine Programs for Distributed Memory Systems
Seyfari et al. Pvl: parallelization and vectorization of affine perfectly nested-loops considering data locality on short-vector multicore processors using intrinsic vectorization

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110510

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110808

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110927

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120124

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120410

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120530

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150608

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees