JP2004288163A - 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品 - Google Patents

代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品 Download PDF

Info

Publication number
JP2004288163A
JP2004288163A JP2003420076A JP2003420076A JP2004288163A JP 2004288163 A JP2004288163 A JP 2004288163A JP 2003420076 A JP2003420076 A JP 2003420076A JP 2003420076 A JP2003420076 A JP 2003420076A JP 2004288163 A JP2004288163 A JP 2004288163A
Authority
JP
Japan
Prior art keywords
variable
assignment statement
lhs
reduction
rhs
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
JP2003420076A
Other languages
English (en)
Inventor
Rajendra K Bera
ラジェンドラ・ケー・ベラ
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 JP2004288163A publication Critical patent/JP2004288163A/ja
Pending legal-status Critical Current

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/451Code distribution
    • G06F8/452Loops

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】プログラム・ループの並列実行を可能にする、ソース・コード内の代入ステートメントのリダクション変数を検出する方法、システム、およびプログラム製品を提供すること。
【解決手段】本明細書に記載の本発明を使用して理解されるリダクション変数は、各変数のそれぞれの結合演算子に関する情報と共に、それぞれのループにタグ付けし、リダクション演算を並列化するためのコンパイラ・ディレクティブを介して、コンパイラに渡すことができる。
【選択図】図4

Description

本発明は、プログラム・ループの並列実行を可能にするための、ソース・コード内の代入ステートメント内のリダクション変数(reduction variable)の検出に関する。
コンピュータ・プログラム内のループは、ループからの出力が、異なる反復からのデータ・アクセスの実行順序に一切依存しない場合に、完全に並列に実行することができる。コンパイラ製作者は、しばしば、そのようなループをドゥーオール(doall)・ループと称する。しかし、ループが、ドゥーオール・ループでない場合に、反復を複数のグループに配置し、実行を完了したグループと次に実行が開始されるグループとの間である種の同期化条件が満たされるならば、各グループの反復を完全に並列の形で実行することができる。部分的に並列化できるループの極端な例が、グループの数が反復の回数と正確に同一である完全に順次式のループである。
ループが、完全に並列化可能であるか否かは、ループ本体のステートメントの間のデータ依存関係を分析することによって判定することができる。同一のメモリ位置にアクセスする2つのステートメント間の依存性には、フロー(書込とその後の読取)、アンチ(anti、読取とその後の書込)、および出力(書込とその後の書込)という3つの可能なタイプがある。最も単純な状況が発生するのは、フロー、アンチ、および出力依存性が存在しない時であり、この場合には、ループのすべての反復が独立であり、並列に実行することができる。
フロー依存性:下のコード断片を考えてみる。
do i = 1, n
A(k(i)) = A(k(i)) + A(k(i - 1))
if (A(k(i)) .eq. .true.) then
...... ... ... ... ...
endif
enddo
フロー依存性は、ループの異なる反復のアクセスの間に存在するので、そのセマンティックスは、ループがドゥーオール・ループとして実行される場合には保証できない。たとえば、上のコード断片では、2≦i≦nであるものとして、反復i+1が、反復iで作られる値を必要とするので、反復番号の順序で反復を実行しなければならない。
フロー依存性なしのアンチ依存性または出力依存性:この場合には、ループを並列に実行できるようになる前に、ループを修正して、これらの依存性を除去しなければならない。残念ながら、すべての状況を効率的に処理することはできない。しかし、2つの重要な変換すなわち、(1)プライベート化(privatization)および(2)リダクション並列化をループに適用することができる。
プライベート化によって、可能な時には必ず、ループを実行する参加プロセッサごとに、アンチ依存性または出力依存性を生じるプログラム変数のプライベート・コピーを作成することによって、あるタイプのアンチ依存性および出力依存性を除去することができる。下の例に、プライベート化によって並列に実行できるループを示す。
do i = 1, n/2
S1: tmp = A(2*i)
A(2*i) = A(2*i - 1)
S2: A(2*i - 1) = tmp
enddo
反復iのステートメントS1と反復i+1のステートメントS2の間のアンチ依存性(1≦i<n/2)を、一時変数tmpをプライベート化することによって除去することができる。
リダクション並列化では、リダクション変数が、その値が
Figure 2004288163
の形の結合演算で使用される変数として定義され、ここで、
Figure 2004288163
は、結合演算子であり、xは、exprnまたはループの他の場所に現れない。オペランドexprnを、結合オペランドと称する。その性質によって、リダクション変数は、特定のパターンでアクセスされる。リダクションの単純で頻繁に現れる例を、次の例のステートメントS1によって示す。
do i = 1, n
do j = 1, m
S1:A(j) = A(j) + exprn
enddo
enddo
ここで、演算子
Figure 2004288163
は、この例では+演算子である。配列A()のアクセス・パターンは、読取、修正、書込であり、このループによって実行される機能は、各反復で計算される値を、A()に保管される値に加算することである。この形のリダクションを、しばしば、更新と呼ぶ。
リダクション並列化は、2ステップを必要とするすなわち、リダクション変数の認識およびリダクション演算の並列化である。
並列化は、ある範囲までは実行時に実行することができるが、可能な時には必ず、コンパイル時に並列化を実行することが好ましい。というのは、それによって、並列化の利益を少なくする可能性がある実行時オーバーヘッドが最小になるからである。実行時並列化の技法は、エル・ロイヒベルガ(Rauchwerger, L.)、「実行時並列化:その時が来た(Run-Time Parallelization: It's TimeHas Come)」、並列計算会報(Journal of Parallel Computing)、言語およびコンパイラ特集号(Special Issue onLanguage and Compilers)、第24巻、第3号および4号、1998年、527ページから556ページに記載されている。
コンパイラが直面する、リダクション並列化の困難な部分が、リダクション・ステートメントの認識である。これまでは、この問題は、ループ・ステートメントを包括的なリダクションのテンプレートと構文的にパターン・マッチングし、その後、ループ内でリダクション・ステートメント以外のどこにも現れないことが保証される状況の下で変数のデータ依存性分析を実行することによって、コンパイル時に、制限付きで処理されてきた。この方法は、テンプレートより多数のパターンがあるので、不適切である。
米国特許第5481723号に、入れ子になったdoループという特定の場合に関するコンパイル時並列化を可能にするシステムおよび方法が記載されている。しかし、これは、入れ子になっていないループに適さない。
本発明によって、コンパイルの前の前処理としてソース・コード内のリダクション変数を検出する新規の方法が説明される。この処理は、米国特許出願第2001/0003211 A1号に記載の方法による、ソース・コード式の再計算を必要とする。
完全を期して、スケーラブルな形でのリダクション方法の並列化は、リダクション変数が、変換されたドゥーオールでプライベート化されること、および、リダクション演算の最終結果が、ドゥーオールに続くプロセッサ内リダクション・フェーズで計算されることすなわち、プロセッサにまたがるリダクション演算(同一の演算子を有する)のオペランドとして、スカラが、各プロセッサで計算される部分結果を使用して作られることを必要とすることに留意されたい。リダクション演算が可換である場合には、クロスプロセッサ・マージ・フェーズを任意の順序で行うことができるが、そうでない場合には、マージ・フェーズを、秩序だった形で行わなければならない。
米国特許第5481723号 米国特許出願第2001/0003211 A1号 エル・ロイヒベルガ(Rauchwerger, L.)、「実行時並列化:その時が来た(Run-TimeParallelization: It's Time Has Come)」、並列計算会報(Journal of Parallel Computing)、言語およびコンパイラ特集号(SpecialIssue on Language and Compilers)、第24巻、第3号および4号、1998年、527ページから556ページ
本発明の目的は、テンプレート・マッチングを使用せず、コンパイルを行う前に、プログラム・ループ並列化を容易にするためにソース・コード・レベルでリダクション変数を検出することである。
この目的を達成するために、本発明では、コンパイラによって作成される中間構造ではなくソース・コードに適用される、ループ内のリダクション変数を検出する方法、システム、およびコンピュータ・プログラム製品を説明する。
前述の方法の第1ステップとして、ループ本体の各代入ステートメントの右辺(RHS)を、正規形に再計算する。再計算される代入ステートメントごとに、左辺(LHS)の変数を決定し、それに対応する検索列を作成する。ループ本体の各再計算される代入ステートメントのRHSを、その対応する検索列についてスキャンし、ある所定の条件が満たされることに基づいて、潜在的リダクション・テーブルに取り込む。潜在的リダクション・テーブルには、潜在的なリダクション変数への参照とそれに対応する代入ステートメントへの参照が含まれる。リダクション・テーブルを完成した後に、所定の条件に基づいて無効であることがわかった潜在的なリダクション変数に関連するすべての項目が、テーブルから削除される。その後、リダクション・テーブルの残りの代入ステートメントのそれぞれの結合演算子を決定する。リダクション・テーブルについて、もう1つの所定の条件に基づいて無効であることがわかった項目を再度切りつめる。リダクション・テーブルに残っている潜在的なリダクション変数が、所望のリダクション変数である。
本発明の方法を実施する時に、ループ本体を単純ブロックとして扱うことができる、すなわち、ループ本体に、分岐がなく、分岐ターゲットまたはラベルがない、0個以上の命令のシーケンスが含まれると仮定する。各単純ブロックは、ステートメントの線形シーケンス、単一のステートメント、または個別の命令に対応する可能性がある。単純ブロックでは、すべてのステートメントまたは演算が実行される(例外を除いて)。ループ本体の代入ステートメントに関数呼出しが含まれる場合には、ステートメント内の関数呼出しのうちで、呼び出される関数が関数呼出しのパラメータ・リストに現れるLHS変数を有するものだけが、インライン展開される。関数のインライン展開の処理の後に、ループ本体が単純ブロックでなくなる場合には、本発明の方法を適用することはできない。
これから、添付図面に関して本発明を説明する。
図1、2、および3からわかるように、ループの各代入ステートメントの式を、正規形に再計算(1.1)して、下で指定されるフォーマットに従って、ある文字列検索動作を容易にする。式は、
・すべての括弧を除去して展開された形で表され、
・関連する変数または定数の逆数に適用される乗算演算によって除算演算のそれぞれを置換し、
・定数62.1702を「.621702e+02」と表すなど、定数を、浮動小数点フォーマットを使用する一定の長さの文字列として表し、
・各項が、単項の「+」または「−」演算子から始まり、定数オペランドがそれに続き、変数オペランドがあればそれが続き、ある項の2つのオペランドの間は、乗算演算子であり、項自体を所与の変数オペランドに関してそれ以上単純化できず、
・すべての変数オペランドが、ASCII値の非降順で左から右にソートされたシーケンスである項に現れ、
・互いに定数オペランドだけが異なるすべての項が、単一の項に合併され、
・すべての項が、左から右へ事前定義のソートされたシーケンスで式に現れる。
このアルゴリズムの第1フェーズでは、代入ステートメントごとに、代入ステートメントの左辺(LHS)の変数「v」を決定し、それに関する、それぞれ変数検索列および逆数変数検索列と称する文字列「*v」および「*v_」を作成する(1.2)。検索列では、「*」が、乗算演算子を表し、「v」が、変数オペランドを表し、「v_」が、変数「v」の逆数を示す。その後、ステートメントの右辺(RHS)に対する、検索列「*v」に関する検索を実行する(1.3)。代入ステートメントのRHSを検査して(1.4)、RHSに1つの項だけが含まれ、その項が「+v」と同等であるかどうかを判定する。そうである場合には、このステートメントは恒等式なので、代入ステートメントをループ本体から削除する(1.5)。列「*v」の検索が、「v」が現れる項の係数としての「v」の検索を意味することに留意されたい。
さらに、次の条件
1.RHSに単一の項だけが含まれ(1.6)、その項に検索列「*v」の1つのインスタンスだけが含まれ、その項が「+v」と同等でないか、
2.RHSに複数の項が含まれ(1.7)、そのうちの1つの項だけに検索列「*v」の1つのインスタンスだけが含まれ、その項が「+v」と同等であるか、
3.RHSに複数の項が含まれ(1.8)、そのそれぞれに検索列「*v」の1つのインスタンスだけが含まれる
のどれかに出会う場合に、変数「v」が、潜在的なリダクション変数であり、それに対応する代入ステートメントが、潜在的なリダクション・ステートメントである。潜在的なリダクション変数への参照および潜在的なリダクション・ステートメントへの参照を、リダクション・テーブルに挿入する(1.9)。上で言及した第1フェーズのステップを、ループのすべての代入ステートメントについて繰り返す(1.10)。
その後、リダクション・テーブルを検査して、空であるか否かを判定する(1.11)。リダクション・テーブルが空である場合には、このアルゴリズムの第1フェーズでリダクション変数が検出されなかったことが暗示され、検索処理が打ち切られる。しかし、この表が空でない場合には、検索処理が第2フェーズに進む。
このアルゴリズムの第2フェーズでは、リダクション・テーブルの変数「v」ごとに、検索列「*v」についてループ本体全体を検索し(1.12)、列「*v_」(「v_」は「v」の逆数である)についても検索し(1.13)て、無効なリダクション変数をリダクション・テーブルから除去する。検索列「*v」が、潜在的なリダクション・テーブルでリンクされている代入ステートメント以外のステートメントに現れる場合(1.12)に、そのリダクション・テーブル内の変数「v」に関連するすべての項目が、削除される。さらに、列「*v_」(1.13)がループ本体のどこかに現れる場合には、この場合にもリダクション・テーブル内の変数「v」のすべての項目が除去される。
リダクション・テーブルを、もう一度検査し(1.14)、空であるとわかった場合には、このアルゴリズムが打ち切られ、リダイレクション変数がループ本体に見つからなかったことが示される。しかし、テーブルが空でない場合には、このアルゴリズムは、最終フェーズに進む。
このアルゴリズムの最終フェーズでは、リダクション・テーブル内の各潜在的リダクション・ステートメントの結合演算子を決定する(1.15)。さらに、リダクション・テーブル内に複数のインスタンスを有し、共通の結合演算子を共用しない潜在的リダクション変数を(1.16)テーブルから除去する(1.17)。これによって、リダクション・テーブル内の項目の形でのリダクション変数の識別が完了する。リダクション・テーブルに残っている変数が、所望のリダクション変数である。
図4に、リダクション・テーブル内で参照されるリダクション・ステートメントの結合演算子を決定する方法を示す。リダクション・ステートメントでは、リダクション変数「v」が、結局、
Figure 2004288163
の形の結合演算子で値が使用される変数として定義され、ここで、
Figure 2004288163
が、結合演算子であり、vは、結合オペランドexprnに現れないことに留意されたい。行われるステップを下に示す。
1.RHSに、1つの項だけが含まれる(2.1)場合に、結合演算子
Figure 2004288163
は、乗算演算子「*」であり(2.2)、結合オペランドexprnに、列「*v」を除去された項が含まれる。
2.RHSに、複数の項が含まれ(2.3)、そのうちの1つだけに変数検索列「*v」(この項は「+v」と等しい)場合には、結合演算子は、プラス記号「+」(2.4)であり、結合オペランドexprnに、括弧の対で囲まれた、すべての残りの項が含まれる。
3.RHSに、複数の項が含まれ(2.5)、そのそれぞれに変数検索列「*v」が含まれる場合には、結合演算子が、乗算演算子「*」(2.6)であり、結合オペランドexprnに、項のそれぞれから列「*v」を除去された、集合的に括弧の対で囲まれたすべての項が集合的に含まれる。
図5に、ループの実行での並列化を容易にするためにソース・コード・レベルでリダクション変数を検出することができるコンピューティング・システムを示す。コンピューティング・システム(3.1)は、システム・バス(3.2)の助けを借りて相互接続されたさまざまなサブシステムからなる。コンピューティング・システム(3.1)には、リダクション変数を検出する手段および並列化されるループを含むソース・コードが保管される記憶装置(3.5)が組み込まれる。ループに関するソース・コードは、入出力インターフェース(3.9)を介してコンピュータ・システムに接続された、キーボード(3.10)、マウス(3.11)、および他の入力装置を介して入力される。コンピューティング・システム(3.1)を、ネットワーク・インターフェース(3.8)を介してLAN、WAN、またはインターネット(3.12)などのさまざまなネットワークに接続することができる。
リダクション変数を検出する手段およびループを含むソース・コードは、システム・バス(3.2)を介してコンピューティング・システム(3.1)のメモリ(3.4)にロードされる。メモリ(3.4)によって、プロセッサ(3.3)によって実行される現在の命令が、その結果と共に保持される。プロセッサ(3.3)によって、再計算手段にエンコードされた命令が実行されて、ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式が、本明細書で前に説明した正規形に再計算される。その後、検索列作成手段によって、各再計算されたステートメントのLHSの変数が決定され、この変数の対応する変数検索列が作成される。これに続いて、列検索手段によって、正規化された式のRHSで変数検索列が検索される。
その後、リダクション・テーブル作成手段の命令が、実行されて、リダクション・テーブルが作成され、ある条件に基づいてソース・コード・ループ内の潜在的なリダクション変数が検出され、有効な潜在的なリダクション変数への参照およびそれに対応する代入ステートメントへの参照がリダクション・テーブルに挿入される。削除手段によって、所定の条件に基づいて、無効なリダクション変数が、リダクション・テーブルから除去される。最終ステップとして、プロセッサ(3.3)によって、結合演算子決定手段にエンコードされた命令が実行されて、リダクション・テーブルに残っているリダクション・ステートメントの結合演算子が確認される。これらの手段の実行に使用されるプロセッサ(3.3)は、PCの場合のマイクロプロセッサ、専用半導体チップ、またはデジタル・コンピュータとして機能することができる他の装置とすることができる。
当業者なら、前述の手段がコンピューティング・システムでの動作の命令であることを理解するであろう。これらの手段は、コンピューティング・システムのハードウェア内に組み込まれた形で存在することができ、あるいは、さまざまなコンピュータ可読媒体で実施することができる。コンピュータ可読媒体は、特定の情報処理システムでの実際の使用のためにデコードされる、コーディングされたフォーマットの形をとることができる。本明細書の文脈でのコンピュータ・プログラム手段またはコンピュータ・プログラムは、情報処理機能を有するシステムに
a)任意の言語、コード、または表記への変換
b)異なる材料形態での複製
の一方または両方を実行した後にまたは直接にのいずれかで、特定の機能を実行させることを意図された命令の組の、任意の言語、コード、または表記でのどのような表現をも意味する。
図5に示された例は、アーキテクチャ的制限を暗示するように意図されたものではなく、手段の組み込まれるコンピューティグ・システムの構成は、実施形態に応じて変更することができる。本明細書に記載の手段を実行するように適合されたあらゆる種類のコンピュータ・システムまたは他の装置を、本発明の実践に使用することができる。ハードウェアおよびソフトウェアの典型的な組み合わせは、ロードされ実行される時に本明細書に記載の手段を実行するようにコンピュータ・システムを制御するコンピュータ・プログラムを有する汎用コンピュータ・システムとすることができる。使用することができる組み込まれるコンピュータ・システムの他の例は、PDA、ウェブ・キオスク、またはウェブ家電の形をとるほかに、ノートブック・コンピュータまたはハンド・ヘルド・コンピュータである。
例:
本発明を、下記の例に関して説明する。
例1
1: do i = 1, n
2:x = c*d
3:ai = ai + 2.0
4:bi = 2.0*bi + (c - d)*bi - bi
5:y = c*y + d*y - 3.0*y
6:z = 2*a + z - a - a
7:w = w*w / u
8:u = u / w
9: enddo
ループの各代入ステートメントの式を正規形に再計算した後に、下記が得られる。
1: do i = 1, n
2:x = +.100000e+01*c*d
3:ai = +.200000e+01 + .100000e+01*ai
4:bi = +.100000e+01*bi + .100000e+01*bi*c - .100000e+01*bi*d
5:y = +.100000e+01*c*y + .100000e+01*d*y - .300000e+01*y
6:z = +.100000e+01*z
7:w = +.100000e+01*u_*w*w
8:u = +.100000e+01*u*w_
9: enddo
アルゴリズムの第1フェーズを適用した後に、下記に注目した。
xは、右辺に現れないので、リダクション変数ではない。
aiは、1つの項だけに現れ、その項が「+.100000e+01*ai」なので、潜在的なリダクション変数である。
biは、すべての項に現れ、各項が「*bi」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
yは、すべての項に現れ、各項が「*y」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
zは、右辺が、「+ .100000e+01*z」である項だけを有するので(このステートメントが恒等式を表し、削除されることを示す)、リダクション変数ではない。
wは、右辺の唯一の項に「*w」の複数のインスタンスがあるので、リダクション変数ではない。
uは、右辺の1つの項だけが、「*u」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
Figure 2004288163
アルゴリズムの第2フェーズを適用した後に、下記が得られる。
1: do i = 1, n
2:x = +.100000e+01*c*d
3:ai = +.200000e+01 + .100000e+01*ai
4:bi = +.100000e+01*bi + .100000e+01*bi*c -.100000e+01*bi*d
5:y = +.100000e+01*c*y + .100000e+01*d*y - .300000e+01*y
6:-- 削除された --
7:w = +.100000e+01*u_*w*w
8:u = +.100000e+01*u*w_
9: enddo
上記から、次のように結論することができる。
uは、ステートメント7に「u_」としても現れるので、もはやリダクション変数ではない。
Figure 2004288163
アルゴリズムの最終フェーズの後に、下に示されているように、リダクション変数とその結合演算子のリストが得られる。
Figure 2004288163
例2
1: do i = 1, n
2:y = c*y + d*y - 3.0*y
3:y = (e*f + g)*y
4:z = z + 2
5:z = z*a - b*z
6: enddo
ループの各代入ステートメントを正規形に再計算した後に、下記が得られる。
1: do i = 1, n
2:y = +.100000e+01*c*y + .100000e+01*d*y - .300000e+01*y
3:y = +.100000e+01*e*f*y + .100000e+01*g*y
4:z = +.200000e+01 + .100000e+01*z
5:z = +.100000e+01*a*z - .100000e+01*b*z
6: enddo
アルゴリズムの第1フェーズを適用した後に、下記に注目した。
yは、すべての項に現れ、各項がステートメント2の「*y」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
yは、すべての項に現れ、各項がステートメント3の「*y」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
zは、「*z」が1つの項だけに現れ、その項がステートメント4の「+.100000e+01*z」なので、潜在的なリダクション変数である。
zは、すべての項に現れ、各項がステートメント5の「*z」の1つのインスタンスだけを有するので、潜在的なリダクション変数である。
Figure 2004288163
アルゴリズムの第2フェーズの後に、下記に注目した。
1: do i = 1, n
2:y = +.100000e+01*c*y + .100000e+01*d*y - .300000e+01*y
3:y = +.100000e+01*e*f*y + .100000e+01*g*y
4:z = +.100000e+01*z + .200000e+01
5:z = +.100000e+01*a*z - .100000e+01*b*z
6: enddo
上記から、リダクション・テーブル内の変更なしに、yおよびzが潜在的なリダクション変数のままであることは明白である。
アルゴリズムの最終フェーズの後に、下記に注目した。
Figure 2004288163
上記から、次のように結論した。
yは、yのすべてのインスタンスが、同一の結合演算子に関連付けられているので、リダクション変数として存続する。
zは、zの異なるインスタンスが、異なる結合演算子に関連付けられているので、リダクション変数ではなくなる。
したがって、結合演算子を含むリダクション・テーブルは、下記になる。
Figure 2004288163
前述が、例示的なものにすぎず、網羅する、または制限するように意図されたものではなく、例としてのみ提示され、本発明の範囲内でさまざまな修正を行うことができることを、当業者には明らかであろう。
したがって、本発明は、開示のために選択された特定の例に制限されると考えるべきでなく、むしろ、本発明の許容可能な範囲から逸脱しないすべての変更および修正が含まれると考えるべきである。したがって、本発明は、本明細書に含まれる説明または図面によって制限されず、特許請求の範囲によってのみ制限される。
まとめとして、本発明の構成に関して以下の事項を開示する。
(1)実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出する方法であって、
a.前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算するステップと、
b.前記代入ステートメントごとにその対応する左辺(LHS)変数を決定し、再計算された式の係数として前記LHS変数の検索を可能にするために前記LHS変数に関する対応する変数検索列を作成するステップと、
c.再計算された式の係数として前記LHS変数の逆数の検索を可能にするために、前記LHS変数の前記逆数に関する対応する逆数変数検索列を作成するステップと、
d.前記LHS変数に対応する変数検索列について各前記代入ステートメントの前記再計算されたRHS式内を検索するステップと、
e.前記LHS変数の逆数に対応する前記逆数変数検索列について各前記代入ステートメントの前記再計算されたRHS式内を検索するステップと、
f.所定の条件に基づいて前記LHS変数への参照およびその対応する前記代入ステートメントへの参照をリダクション・テーブルに挿入するステップと、
g.所定の条件に基づいて前記LHS変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルから削除するステップと、
h.前記リダクション・テーブル内で参照される代入ステートメントごとに、それに対応する結合演算子および結合オペランドを決定するステップと
を含む方法。
(2)ステップ(a)の前記正規形での前記式再計算が、すべての括弧を除去された展開された形で表され、
前記再計算された式は、各除算演算を、関連する変数または定数の逆数に適用される乗算演算によって置き換え、
前記再計算された式は、各定数を、浮動小数点フォーマットを使用する一定の長さの文字列として表し、
前記再計算された式は、各項が単項「+」演算子または単項「−」演算子から始まり、定数オペランドが続き、変数オペランドがあればそれが続き項内の2つのオペランドの間に乗算演算子があり、項自体を、所与の変数オペランドの項についてそれ以上単純化することができず、
前記再計算された式は、すべての変数オペランドを、非降順ASCII値の順序で左から右にソートされたシーケンスで項内に現し、
前記再計算された式は、互いに定数オペランドだけが異なるすべての項を、単一の項に合併し、
前記再計算された式は、すべての項を、事前定義のソートされたシーケンスで右から左に式に現す
上記(1)に記載の方法。
(3)恒等式を表す代入ステートメントが、前記ソース・コード・プログラム・ループから除去される、上記(1)に記載の方法。
(4)前記代入ステートメントのRHSが、単一の項だけを含み、その項が、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含み、前記代入ステートメントが恒等式でない時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、上記(1)に記載の方法。
(5)前記代入ステートメントのRHSが、複数の項を含み、前記項の1つだけが、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含み、その項が、プラス算術演算子が先行するLHS変数だけを含む時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、上記(1)に記載の方法。
(6)前記代入ステートメントのRHSが、複数の項を含み、前記項のそれぞれが、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、上記(1)に記載の方法。
(7)前記LHS変数に対応する前記変数検索列が、前記ループの本体内で前記リダクション・テーブルにリストされた前記LHS変数の対応する代入ステートメント以外の代入ステートメントのRHSに現れた時に、前記LHS変数へのすべての参照および前記対応する代入ステートメントが前記リダクション・テーブルから削除される、上記(1)に記載の方法。
(8)前記LHS変数の前記逆数に対応する前記逆数変数検索列が、前記ループの本体内の代入ステートメントに現れた時に、前記LHS変数へのすべての参照およびその対応する代入ステートメントへのすべての参照が、前記リダクション・テーブルから削除される、上記(1)に記載の方法。
(9)前記代入ステートメントのRHSが、1つの項だけを含み、その項が、前記代入ステートメントのLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術乗算演算子(*)である、上記(1)に記載の方法。
(10)前記結合オペランドが、前記LHS変数によって除算された前記項である、上記(9)に記載の方法。
(11)前記代入ステートメントのRHSが、複数の項を含み、前記項の1つだけが、前記代入ステートメントのLHS変数に対応する前記変数検索列を含み、この項が、前記算術プラス演算子が先行するLHS変数だけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術プラス演算子(+)である、上記(1)に記載の方法。
(12)前記結合オペランドが、括弧の対によって囲まれたすべての残りの項の集合である、上記(11)に記載の方法。
(13)前記代入ステートメントのRHSが、複数の項を含み、前記項のそれぞれが、前記代入ステートメントのLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術乗算演算子(*)である、上記(1)に記載の方法。
(14)前記結合演算子が、項のそれぞれから前記LHS変数が除算された、すべての項の集合である、上記(13)に記載の方法。
(15)共通の結合演算子を共用しない、前記リダクション・テーブルにリストされた複数のインスタンスを有するリダクション変数への参照が、前記テーブルから削除される、上記(1)に記載の方法。
(16)実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出するシステムであって、
少なくとも1つの中央処理装置と、
少なくとも1つのシステム・バスと、
前記システム・バスに接続された少なくとも1つの通信ユニットと、
前記システム・バスに接続された少なくとも1つのメモリ・ユニットであって、
前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算する再計算手段と、
代入ステートメントの左辺(LHS)の前記変数を決定する手段と、
再計算された式の係数としてLHS変数の検索を可能にするために、代入ステートメントの前記LHS変数に関する対応する変数検索列を作成する検索列作成手段と、
再計算された式の係数として前記LHS変数の逆数の検索を可能にするために、前記代入ステートメントのLHS変数の前記逆数に関する対応する逆数変数検索列を作成する検索列作成手段と、
前記代入ステートメントのRHS内で前記代入ステートメントのLHS変数に対応する前記変数検索列を検出する列検索手段と、
前記代入ステートメントのRHS内で前記代入ステートメントのLHS変数の逆数に対応する前記逆数変数検索列を検出する列検索手段と、
所定の条件に基づいて、潜在的なリダクション変数への参照およびその対応する代入ステートメントへの参照を保存するリダクション・テーブルを作成するリダクション・テーブル作成手段と、
前記潜在的なリダクション変数を検出する検出手段と、
前記潜在的なリダクション変数への参照およびその対応する代入ステートメントへの参照を前記リダクション・テーブルに保存する保存手段と、
所定の条件に基づいて、前記代入ステートメントのLHS変数への参照およびその対応する代入ステートメントへの参照を前記リダクション・テーブルから除去する削除手段と、
前記リダクション・テーブルにリストされた各代入ステートメントの結合演算子を確認する結合演算子決定手段と、
前記リダクション・テーブルにリストされた各代入ステートメントの結合オペランドを確認する結合オペランンド決定手段と
を含む少なくとも1つのメモリ・ユニットと
を含むシステム。
(17)実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出するためにその中で実施される、コンピュータ可読記憶媒体に保管されたコンピュータ可読プログラム・コードを含むコンピュータ・プログラム製品であって、
前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算するように構成されたコンピュータ可読プログラム・コード手段と、
前記代入ステートメントの左辺(LHS)の変数を決定し、前記LHS変数に対応する変数検索列および逆数変数検索列を作成するように構成されたコンピュータ可読プログラム・コード手段と、
前記代入ステートメントのRHS内でLHS変数に対応する前記変数検索列を検索するように構成されたコンピュータ可読プログラム・コード手段と、
前記代入ステートメントのRHS内でLHS変数に対応する前記逆数変数検索列を検索するように構成されたコンピュータ可読プログラム・コード手段と、
所定の条件に基づいて、潜在的なリダクション変数として識別される前記LHS変数への参照およびその対応する前記代入ステートメントへの参照を保存するリダクション・テーブルを作成するように構成されたコンピュータ可読プログラム・コード手段と、
潜在的なリダクション変数を検出するように構成されたコンピュータ可読プログラム・コード手段と、
前記潜在的なリダクション変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルに保存するように構成されたコンピュータ可読プログラム・コード手段と、
所定の条件に基づいて、前記リダクション変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルから削除するように構成されたコンピュータ可読プログラム・コード手段と、
前記リダクション・テーブルにリストされた各代入ステートメントの結合演算子を決定するように構成されたコンピュータ可読プログラム・コード手段と、
前記リダクション・テーブルにリストされた各代入ステートメントの結合オペランドを決定するように構成されたコンピュータ可読プログラム・コード手段と
を含む、コンピュータ・プログラム製品。
リダクション変数の決定を示す流れ図の一部である。 リダクション変数の決定を示す流れ図の一部である。 リダクション変数の決定を示す流れ図の一部である。 リダクション・ステートメントの結合演算子の決定を示す流れ図である。 本発明によるシステムを示す図である。
符号の説明
3.1 コンピューティング・システム
3.2 システム・バス
3.3 プロセッサ
3.4 メモリ
3.5 記憶装置
3.8 ネットワーク・インターフェース
3.9 入出力インターフェース
3.10 キーボード
3.11 マウス
3.12 インターネット

Claims (17)

  1. 実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出する方法であって、
    a.前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算するステップと、
    b.前記代入ステートメントごとにその対応する左辺(LHS)変数を決定し、再計算された式の係数として前記LHS変数の検索を可能にするために前記LHS変数に関する対応する変数検索列を作成するステップと、
    c.再計算された式の係数として前記LHS変数の逆数の検索を可能にするために、前記LHS変数の前記逆数に関する対応する逆数変数検索列を作成するステップと、
    d.前記LHS変数に対応する変数検索列について各前記代入ステートメントの前記再計算されたRHS式内を検索するステップと、
    e.前記LHS変数の逆数に対応する前記逆数変数検索列について各前記代入ステートメントの前記再計算されたRHS式内を検索するステップと、
    f.所定の条件に基づいて前記LHS変数への参照およびその対応する前記代入ステートメントへの参照をリダクション・テーブルに挿入するステップと、
    g.所定の条件に基づいて前記LHS変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルから削除するステップと、
    h.前記リダクション・テーブル内で参照される代入ステートメントごとに、それに対応する結合演算子および結合オペランドを決定するステップと
    を含む方法。
  2. ステップ(a)の前記正規形での前記式再計算が、すべての括弧を除去された展開された形で表され、
    前記再計算された式は、各除算演算を、関連する変数または定数の逆数に適用される乗算演算によって置き換え、
    前記再計算された式は、各定数を、浮動小数点フォーマットを使用する一定の長さの文字列として表し、
    前記再計算された式は、各項が単項「+」演算子または単項「−」演算子から始まり、定数オペランドが続き、変数オペランドがあればそれが続き項内の2つのオペランドの間に乗算演算子があり、項自体を、所与の変数オペランドの項についてそれ以上単純化することができず、
    前記再計算された式は、すべての変数オペランドを、非降順ASCII値の順序で左から右にソートされたシーケンスで項内に現し、
    前記再計算された式は、互いに定数オペランドだけが異なるすべての項を、単一の項に合併し、
    前記再計算された式は、すべての項を、事前定義のソートされたシーケンスで右から左に式に現す
    請求項1に記載の方法。
  3. 恒等式を表す代入ステートメントが、前記ソース・コード・プログラム・ループから除去される、請求項1に記載の方法。
  4. 前記代入ステートメントのRHSが、単一の項だけを含み、その項が、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含み、前記代入ステートメントが恒等式でない時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、請求項1に記載の方法。
  5. 前記代入ステートメントのRHSが、複数の項を含み、前記項の1つだけが、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含み、その項が、プラス算術演算子が先行するLHS変数だけを含む時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、請求項1に記載の方法。
  6. 前記代入ステートメントのRHSが、複数の項を含み、前記項のそれぞれが、前記代入ステートメントの対応するLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記代入ステートメントへの参照および前記対応するLHS変数への参照が、前記リダクション・テーブルに挿入される、請求項1に記載の方法。
  7. 前記LHS変数に対応する前記変数検索列が、前記ループの本体内で前記リダクション・テーブルにリストされた前記LHS変数の対応する代入ステートメント以外の代入ステートメントのRHSに現れた時に、前記LHS変数へのすべての参照および前記対応する代入ステートメントが前記リダクション・テーブルから削除される、請求項1に記載の方法。
  8. 前記LHS変数の前記逆数に対応する前記逆数変数検索列が、前記ループの本体内の代入ステートメントに現れた時に、前記LHS変数へのすべての参照およびその対応する代入ステートメントへのすべての参照が、前記リダクション・テーブルから削除される、請求項1に記載の方法。
  9. 前記代入ステートメントのRHSが、1つの項だけを含み、その項が、前記代入ステートメントのLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術乗算演算子(*)である、請求項1に記載の方法。
  10. 前記結合オペランドが、前記LHS変数によって除算された前記項である、請求項9に記載の方法。
  11. 前記代入ステートメントのRHSが、複数の項を含み、前記項の1つだけが、前記代入ステートメントのLHS変数に対応する前記変数検索列を含み、この項が、前記算術プラス演算子が先行するLHS変数だけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術プラス演算子(+)である、請求項1に記載の方法。
  12. 前記結合オペランドが、括弧の対によって囲まれたすべての残りの項の集合である、請求項11に記載の方法。
  13. 前記代入ステートメントのRHSが、複数の項を含み、前記項のそれぞれが、前記代入ステートメントのLHS変数に対応する前記変数検索列の1つのインスタンスだけを含む時に、前記リダクション・テーブルにリストされる前記代入ステートメントの前記結合演算子が、算術乗算演算子(*)である、請求項1に記載の方法。
  14. 前記結合演算子が、項のそれぞれから前記LHS変数が除算された、すべての項の集合である、請求項13に記載の方法。
  15. 共通の結合演算子を共用しない、前記リダクション・テーブルにリストされた複数のインスタンスを有するリダクション変数への参照が、前記テーブルから削除される、請求項1に記載の方法。
  16. 実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出するシステムであって、
    少なくとも1つの中央処理装置と、
    少なくとも1つのシステム・バスと、
    前記システム・バスに接続された少なくとも1つの通信ユニットと、
    前記システム・バスに接続された少なくとも1つのメモリ・ユニットであって、
    前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算する再計算手段と、
    代入ステートメントの左辺(LHS)の前記変数を決定する手段と、
    再計算された式の係数としてLHS変数の検索を可能にするために、代入ステートメントの前記LHS変数に関する対応する変数検索列を作成する検索列作成手段と、
    再計算された式の係数として前記LHS変数の逆数の検索を可能にするために、前記代入ステートメントのLHS変数の前記逆数に関する対応する逆数変数検索列を作成する検索列作成手段と、
    前記代入ステートメントのRHS内で前記代入ステートメントのLHS変数に対応する前記変数検索列を検出する列検索手段と、
    前記代入ステートメントのRHS内で前記代入ステートメントのLHS変数の逆数に対応する前記逆数変数検索列を検出する列検索手段と、
    所定の条件に基づいて、潜在的なリダクション変数への参照およびその対応する代入ステートメントへの参照を保存するリダクション・テーブルを作成するリダクション・テーブル作成手段と、
    前記潜在的なリダクション変数を検出する検出手段と、
    前記潜在的なリダクション変数への参照およびその対応する代入ステートメントへの参照を前記リダクション・テーブルに保存する保存手段と、
    所定の条件に基づいて、前記代入ステートメントのLHS変数への参照およびその対応する代入ステートメントへの参照を前記リダクション・テーブルから除去する削除手段と、
    前記リダクション・テーブルにリストされた各代入ステートメントの結合演算子を確認する結合演算子決定手段と、
    前記リダクション・テーブルにリストされた各代入ステートメントの結合オペランドを確認する結合オペランンド決定手段と
    を含む少なくとも1つのメモリ・ユニットと
    を含むシステム。
  17. 実行並列化を可能にするためにソース・コード・プログラム・ループ内のリダクション変数を検出するためにその中で実施される、コンピュータ可読記憶媒体に保管されたコンピュータ可読プログラム・コードを含むコンピュータ・プログラム製品であって、
    前記ソース・コード・プログラム・ループの各代入ステートメントの右辺(RHS)の式を正規形に再計算するように構成されたコンピュータ可読プログラム・コード手段と、
    前記代入ステートメントの左辺(LHS)の変数を決定し、前記LHS変数に対応する変数検索列および逆数変数検索列を作成するように構成されたコンピュータ可読プログラム・コード手段と、
    前記代入ステートメントのRHS内でLHS変数に対応する前記変数検索列を検索するように構成されたコンピュータ可読プログラム・コード手段と、
    前記代入ステートメントのRHS内でLHS変数に対応する前記逆数変数検索列を検索するように構成されたコンピュータ可読プログラム・コード手段と、
    所定の条件に基づいて、潜在的なリダクション変数として識別される前記LHS変数への参照およびその対応する前記代入ステートメントへの参照を保存するリダクション・テーブルを作成するように構成されたコンピュータ可読プログラム・コード手段と、
    潜在的なリダクション変数を検出するように構成されたコンピュータ可読プログラム・コード手段と、
    前記潜在的なリダクション変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルに保存するように構成されたコンピュータ可読プログラム・コード手段と、
    所定の条件に基づいて、前記リダクション変数への参照およびその対応する前記代入ステートメントへの参照を前記リダクション・テーブルから削除するように構成されたコンピュータ可読プログラム・コード手段と、
    前記リダクション・テーブルにリストされた各代入ステートメントの結合演算子を決定するように構成されたコンピュータ可読プログラム・コード手段と、
    前記リダクション・テーブルにリストされた各代入ステートメントの結合オペランドを決定するように構成されたコンピュータ可読プログラム・コード手段と
    を含む、コンピュータ・プログラム製品。
JP2003420076A 2002-12-17 2003-12-17 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品 Pending JP2004288163A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/321,971 US7089545B2 (en) 2002-12-17 2002-12-17 Detection of reduction variables in an assignment statement

Publications (1)

Publication Number Publication Date
JP2004288163A true JP2004288163A (ja) 2004-10-14

Family

ID=32507175

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003420076A Pending JP2004288163A (ja) 2002-12-17 2003-12-17 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品

Country Status (3)

Country Link
US (1) US7089545B2 (ja)
JP (1) JP2004288163A (ja)
CN (1) CN1245684C (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7337437B2 (en) * 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
US8176108B2 (en) * 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7620945B1 (en) * 2005-08-16 2009-11-17 Sun Microsystems, Inc. Parallelization scheme for generic reduction
US7823141B1 (en) * 2005-09-30 2010-10-26 Oracle America, Inc. Using a concurrent partial inspector loop with speculative parallelism
US7882498B2 (en) * 2006-03-31 2011-02-01 Intel Corporation Method, system, and program of a compiler to parallelize source code
US8037462B2 (en) * 2006-08-02 2011-10-11 International Business Machines Corporation Framework for parallelizing general reduction
US20080127146A1 (en) * 2006-09-06 2008-05-29 Shih-Wei Liao System and method for generating object code for map-reduce idioms in multiprocessor systems
US8291197B2 (en) 2007-02-12 2012-10-16 Oracle America, Inc. Aggressive loop parallelization using speculative execution mechanisms
WO2008118613A1 (en) * 2007-03-01 2008-10-02 Microsoft Corporation Executing tasks through multiple processors consistently with dynamic assignments
CN101667135B (zh) * 2009-09-30 2013-07-31 浙江大学 一种交互式并行化编译系统及其编译方法
US8453135B2 (en) * 2010-03-11 2013-05-28 Freescale Semiconductor, Inc. Computation reuse for loops with irregular accesses
US8381195B2 (en) 2010-06-17 2013-02-19 Microsoft Corporation Implementing parallel loops with serial semantics
US8745061B2 (en) * 2010-11-09 2014-06-03 Tibco Software Inc. Suffix array candidate selection and index data structure
US8793675B2 (en) * 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array
US8726251B2 (en) * 2011-03-29 2014-05-13 Oracle International Corporation Pipelined loop parallelization with pre-computations
US9424011B2 (en) 2014-04-01 2016-08-23 International Business Machines Corporation Recursive expression simplification
CN105320300A (zh) * 2014-07-03 2016-02-10 宏景科技股份有限公司 循环式鼠标输入方法及鼠标装置
KR20160071782A (ko) * 2014-12-12 2016-06-22 삼성전자주식회사 멀티 스레드를 처리하는 방법 및 장치
US11042650B2 (en) * 2018-12-06 2021-06-22 International Business Machines Corporation Sargable query-predicate evaluation for encrypted databases
CN111475410B (zh) * 2020-03-31 2024-01-09 北京经纬恒润科技股份有限公司 一种测试用例生成方法及装置
CN111966346B (zh) * 2020-09-09 2022-05-10 支付宝(杭州)信息技术有限公司 应用系统的污点分析方法及装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1319757C (en) 1988-07-29 1993-06-29 Digital Equipment Corporation Echelon method for execution of nested loops in multiple processor computers
US5363473A (en) * 1991-05-28 1994-11-08 The Trustees Of Columbia University In The City Of New York Incremental update process and apparatus for an inference system
JP3539613B2 (ja) * 1997-12-03 2004-07-07 株式会社日立製作所 ループ飛び出し文を含むループに対する配列サマリ解析方法
US6367071B1 (en) * 1999-03-02 2002-04-02 Lucent Technologies Inc. Compiler optimization techniques for exploiting a zero overhead loop mechanism
JP2001161025A (ja) * 1999-11-30 2001-06-12 Ando Electric Co Ltd 電流制限装置
US7337437B2 (en) 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
US6738967B1 (en) * 2000-03-14 2004-05-18 Microsoft Corporation Compiling for multiple virtual machines targeting different processor architectures
US6578196B1 (en) * 2000-06-07 2003-06-10 International Business Machines Corporation Checking of units and dimensional homogeneity of expressions in computer programs
US6895580B2 (en) * 2001-09-20 2005-05-17 International Business Machines Corporation Expression reduction during compilation through routine cloning

Also Published As

Publication number Publication date
US7089545B2 (en) 2006-08-08
CN1245684C (zh) 2006-03-15
US20040117781A1 (en) 2004-06-17
CN1508681A (zh) 2004-06-30

Similar Documents

Publication Publication Date Title
JP2004288163A (ja) 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品
Krall et al. Compilation techniques for multimedia processors
JP3311462B2 (ja) コンパイル処理装置
US5537620A (en) Redundant load elimination on optimizing compilers
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
JP2749039B2 (ja) オブジェクト生成方法
Pinter et al. Program optimization and parallelization using idioms
JP3317825B2 (ja) ループ最適化翻訳処理方法
US6754893B2 (en) Method for collapsing the prolog and epilog of software pipelined loops
EP2687981B1 (en) Automated compiler specialisation for global optimisation
US20110119660A1 (en) Program conversion apparatus and program conversion method
EP0214751A2 (en) A method for vectorizing and compiling object code
US6117185A (en) Skip list data storage during compilation
US7784038B2 (en) Pattern matching and transformation of intermediate language expression trees
JPH0814817B2 (ja) 自動ベクトル化方法
JPH0695311B2 (ja) コード最適化方法
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
Ramsey et al. Hoopl: a modular, reusable library for dataflow analysis and transformation
JP2002259134A (ja) ポストリンク・コードの最適化方法及び装置
US7010785B2 (en) Eliminating cold register store/restores within hot function prolog/epilogs
US7913239B2 (en) Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees
Ferrante et al. A program form based on data dependency in predicate regions
US6059841A (en) Updating data dependencies for loop strip mining
US6077314A (en) Method of, system for, and computer program product for providing improved code motion and code redundancy removal using extended global value numbering
US6922830B1 (en) Skip list data storage during compilation

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060731

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060822

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070130