JP6141365B2 - 逐次コンピュータプログラムコードを並列処理する方法及びシステム - Google Patents

逐次コンピュータプログラムコードを並列処理する方法及びシステム Download PDF

Info

Publication number
JP6141365B2
JP6141365B2 JP2015154050A JP2015154050A JP6141365B2 JP 6141365 B2 JP6141365 B2 JP 6141365B2 JP 2015154050 A JP2015154050 A JP 2015154050A JP 2015154050 A JP2015154050 A JP 2015154050A JP 6141365 B2 JP6141365 B2 JP 6141365B2
Authority
JP
Japan
Prior art keywords
computer program
program code
sequential
sequential computer
code
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
JP2015154050A
Other languages
English (en)
Other versions
JP2015207318A (ja
Inventor
ゴヴィンド ヴァイディヤ ヴィナイ
ゴヴィンド ヴァイディヤ ヴィナイ
ラナディヴ プリティ
ラナディヴ プリティ
サー スダカー
サー スダカー
Original Assignee
ケーピーアイティ テクノロジーズ リミテッド
ケーピーアイティ テクノロジーズ リミテッド
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 ケーピーアイティ テクノロジーズ リミテッド, ケーピーアイティ テクノロジーズ リミテッド filed Critical ケーピーアイティ テクノロジーズ リミテッド
Publication of JP2015207318A publication Critical patent/JP2015207318A/ja
Application granted granted Critical
Publication of JP6141365B2 publication Critical patent/JP6141365B2/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
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages

Description

本発明は逐次コンピュータプログラムの実行に関し、より詳細には、逐次コンピュータプログラムの実行を高速化するために逐次コンピュータプログラムコードを並列処理する方法及びシステムに関する。
ここ数十年で、コンピュータシステムと様々な領域においてそれを適応する上での有用性が開発されてきた。ソフトウェア開発、より詳細にはこのようなコンピュータプログラムの書込みに使用するコード体系における進歩のペースを速くするには、これらコンピュータプログラムの実行に使用するハードウェアの処理能力を高めることが必要であった。それらの目的を達成するために、2つの面で重要な取り組みがなされた。1つはより高速であると共に特定のタスクを行うプロセッサの開発におけるものであり、もう1つは利用可能なプロセッサにおいてより速く実行するためのコンピュータコードを再構築する分野におけるものである。
コンピュータプログラムのより高速な処理を可能にする方法である並列計算は、最近の当該技術分野における進化の中心であった。並列計算により、複数のプロセッサを使用すること、そして最近では多数の処理要素を備えたプロセッサを使用することへの道が開かれた。これに関連して、プロセッサクラスタ並びにグリッドの概念は特筆に値するものであり、マルチプロセッサコンピュータは同一機械内で多数の処理要素を有する。
並列計算の概念は有利であるように思えると共に、ソフトウェア開発者の間で受け入れられ人気が高まったが、当分野の中心となるこの概念の欠点は、既存のプログラミング方法が逐次的であるために、コードの並列処理には直接的に適さないことである。このようなプログラムコードを並列処理用に書き換えることは一般に面倒である。さらに、コードの並列処理可能な部分の識別とマッピング、そして遠隔であるかどうかは別として様々なプロセッサ要素に対して合理的なスケジューリングを行うこと、そしてまたかかる処理中の通信に関しては、今でもコンピュータプログラムの実際の実行を最適に高速化する際の大きな障害となっている。
マルチコアプロセッサの使用は、高クロックサイクル、熱生成、及び電源入力の必要なく高い処理能力を達成することで、複数のプロセッサを使用することよりも勝っている。しかし、マルチコアプロセッサの人気が高まりに伴い、それに関連したツールの必要性も高まっている。アプリケーションの開発者には、マルチコアプロセッサのプログラミングを容易化することのできるツールが必要である。一方、並列ハードウェアを最適に利用するべく、既存のコンピュータプログラムを並列処理するツールと方法に対する必要性も高まっている。
この点で様々な従来技術は、逐次コンピュータプログラムコードの並列実行を、次のような様々な手段により試みてきた:制御及びデータフロー解析を実行して並列可能な状況を判定すること、クラス特定抽出に基づいて並列可能な状況を判定すること、専用の多重処理ユニットを使用すること、入力ソースコードを中間的言語に変換し、その後タスク依存を実行すること、及び有向非巡回グラフ(DAG)とpost-wait制御構造を使用すること等である。また別の方法は、データパターンとプロファイリング情報にアクセスして、最初に接触したデータを制御するコードを生成するべく、同等のデータアクセスパターンを生成するというものである。
しかし、既存の従来技術における方法には次のような欠点がある。これらの方法の大半のものは人的な介入が不可欠であり、これらの方法はループの並列化、即ち反復実行するコードの部分のみに集中している。さらに、逐次コードを変更すると実際の機能性を抑制するおそれがあると共に、かかる方法はアプリケーションの限られた範囲にしか適用できない。さらに、入力ソースコードを並列処理用の中間言語に変換することは面倒なプロセスであり、これを行う方法はほぼ存在しない。
これらの問題を処理することに関連した情報は、以下の特許文献1から特許文献8に記載されている。しかし、それらの文献には、それぞれ上述の欠点が1つ以上存在する。
米国特許第6253371号 米国特許第6243863号 独国特許番号10200505056186号 米国特許第20010003187号 米国特許第20070234326号 米国特許第20070226686号 米国特許第6622301号 米国特許第6742083号
そのため、旧式コード、既存の逐次コード、及び逐次的に書かれた新規コードを、並列実行用のコードに自動的に変換して、並列プロセッサにおいてより高速な実行を達成する必要がある。従って、本発明はコンピュータプログラムコードの効果的な並列処理を可能にすることにより、コンピュータプログラムの実行時間を減少するように作用する方法及びシステムを示すものである。
開示する発明の幾つかの態様の基本的な理解を促すため、発明の概要を以下に示す。以下の概要は詳細に関わる要約ではなく、鍵となる要素/重要な要素を特定するものでもなければ、発明の範囲を明確に示すことを意図したものでもない。その唯一の目的は、以下に記載のより詳細な説明の前置きとして、発明の概念を単純に示すことである。
本発明の主要な目的は、逐次コンピュータプログラムコードの並列計算を可能にする方法及びシステムを示すことである。
本発明の一態様では、逐次コンピュータプログラムコードの実行を高速化するために並列処理を行う方法を示す。該方法は、逐次コンピュータプログラムコードを自動並列処理システムに入力するステップと;逐次コンピュータプログラムコードの構造を解析して、機能性に影響を与えることなく逐次コンピュータプログラムコードに特別プログラム命令(SPI)を挿入する位置を識別するステップと;逐次コンピュータプログラムコードの各ラインと逐次コンピュータプログラムコードの各関数又はモジュールの実行に必要な時間との依存関係を判定するため、関数又はモジュールのコールグラフ、時間測定、及び時間表を作成することによって、逐次コンピュータプログラムコードをプロファイリングするステップと;逐次コンピュータプログラムコードを解析及びプロファイリングすることによって得た情報により逐次コンピュータプログラムコードの並列処理可能性を判定するステップと;並列処理可能性が判定されると、逐次コンピュータプログラムコードにSPIを挿入して、並列実行可能なコンピュータプログラムコードを得るステップと;並列実行可能なコンピュータプログラムコードを実行するために並列計算環境に送るステップと;を含む。
本発明の別の態様では、逐次コンピュータプログラムコードの並列処理を行う自動並列処理システムを示す。該システムは、逐次コンピュータプログラムコードの構造を解析して、逐次コンピュータプログラムコードに特別プログラム命令(SPI)を挿入する位置を識別する構文解析手段と;逐次コンピュータプログラムコードの各ラインと逐次コンピュータプログラムコードの各関数又はモジュールの実行に必要な時間との依存関係を判定するため、関数又はモジュールのコールグラフ、時間測定、及び時間表を作成することによって、逐次コンピュータプログラムコードをプロファイリングするプロファイリング手段と;逐次コンピュータプログラムコードを解析及びプロファイリングすることによって得た情報により逐次コンピュータプログラムコードの並列処理可能性を判定する解析手段と;並列処理可能性が判定されると、逐次コンピュータプログラムコードにSPIを挿入し、並列実行可能なコンピュータプログラムコードを得て、これを実行するために並列計算環境にさらに出力するコード生成手段と;を含む。
従って、本発明は、逐次コンピュータプログラムコード内の特定の関数又は部分の実行を開始するために絶対最短待機時間(AMWT)を評価する反復プロセスを提供する。
本発明では逐次コンピュータプログラムコード中の関数又はモジュールをそれらの呼び出し時間より前に実行することができるため、典型的な逐次実行と比較して逐次コンピュータプログラムコードの実行速度が増し、有利である。
本明細書で開示するシステム及び装置は、様々な態様を達成する任意の手段で実行可能である。添付の図面及び以下の詳細な記載から、その他の特徴が明らかとなろう。
幾つかの実施形態を例として示すが、実施形態は添付の図面に限定されない。また図面では、同じ要素については同じ参照番号を付して示している。
添付の図面及び以下の詳細な記載から、実施形態のその他の特徴が明らかとなろう。
本発明の原理による自動並列処理システムを示すブロック図である。 逐次コンピュータプログラムコード中の関数又はモジュールの呼び出しを示す図である。 本発明の図3の好適な実施形態による時間前実行論理を示すグラフである。 典型的なコンピュータプログラムにおける関数又はモジュールを説明するために入力及び出力を有するチップを例示した図である。
添付の図面を参照して、本発明の実施形態を説明する。ただし、開示する実施形態は本発明の単なる一例であり、本発明は様々な形態で実施できることを理解されたい。以下の記載と図面は本発明を制限するものとらえるべきではなく、また特許請求の範囲の基礎として、そして本発明の構築及び/又は使用を当業者に教示するための基礎として、特定的な詳細を複数示す。ただし、場合によっては、本発明の詳細を不必要に不明瞭にしないように、周知又は従来の技術に関する詳細については記載しない。
本発明はコンピュータプログラムコードを並列処理する方法とシステムを示す。逐次コンピュータプログラムコードは、逐次実行用のソースコードの形態の関数又はモジュールを複数含む。一実施形態では、アプリケーションを少なくとも一度実行することによりオフラインで逐次コンピュータプログラムを解析し、解析及びプロファイリングのプロセスを通して並列可能なコードを判定する。さらに、コード又はその一部を事前に実行するための特別目的命令(SPI)を挿入することにより、逐次ソースコードを修正して新規コードを生成することで、利用する並列処理ハードウェアを効率的に使用することができる共に、アプリケーションの実行に必要な総時間が短くなる。「コンピュータプログラムコード」、「ソースコード」、「コード」、「逐次コンピュータプログラムコード」といった用語は、特定しない限り本明細書を通して同じ意味で用いることとする。任意の並列計算システム及びコンピュータプログラムコードに本発明を適用できることは、当業者には明らかであろう。
図1は、本発明の原理による自動並列処理システムを示すブロック図である。詳細には、自動並列処理システムは図1に示すように連結した構文解析手段、プロファイリング手段、解析手段、及びコード生成手段を含む。
別の実施形態では、構文解析手段は逐次コンピュータプログラムコードの構造を解析して、逐次コンピュータプログラムコードにおけるSPIの挿入位置を識別する。プロファイリング手段は、関数又はモジュールのコールグラフ、時間測定、及び時間表を作成することにより、逐次コンピュータプログラムコードを解析し、逐次コンピュータプログラムコードの各ラインと逐次コンピュータプログラムコードの各関数の実行に必要な時間との依存関係を判定する。さらに、解析手段は逐次コンピュータプログラムコードの解析とプロファイリングによって得た情報から逐次コンピュータプログラムコードの並列処理可能性を判定し、並列処理可能性が判定されると、コード生成手段が逐次コンピュータプログラムコードにSPIを挿入して並列実行可能なコンピュータプログラムコードを得て、これを実行するために並列計算環境にさらに出力する。さらに、自動並列処理システムは並列計算環境に関連したメモリを含み、構文解析手段とプロファイリング手段の得た情報をその後の検索のために記憶する。
並列計算環境は複数のプロセッサを含み、プロセッサとしては例えば近接配置及び/又は遠隔配置されたマルチコアプロセッサ、対称型プロセッサ、非対称型プロセッサ等があるが、それらに限定されないことを理解されたい。
動作上、逐次コンピュータプログラムコードの並列処理を行う方法は、自動並列処理システムに逐次コンピュータプログラムコードを入力することを含む。さらに、入力された逐次コンピュータプログラムコードの構造を構文解析手段が解析し、機能性に影響を与えることなく逐次コンピュータプログラムコードに特定プログラム命令(SPI)を挿入する位置を識別する。同時に、プロファイリング手段が逐次コンピュータプログラムコードにおいて関数又はモジュールのコールグラフ、時間測定、及び時間表を生成し、逐次コンピュータプログラムコードの各ラインと逐次コンピュータプログラムコードの各関数を実行するのに必要な時間との依存関係を判定する。
さらに、解析手段は、図2で示すように逐次コンピュータプログラムコードにおける関数又はモジュールを読み出すことにより、逐次コンピュータプログラムコードを解析及びプロファイリングすることによって得た情報により逐次コンピュータプログラムコードの並列可能性を判定する。並列可能性が判定されると、コード生成手段が逐次コンピュータプログラムコードにSPIを挿入して並列実行可能なコンピュータプログラムコードを得て、これを実行するために並列計算環境に送る。
一例示的な実施形態では、プロファイリングは逐次コンピュータプログラムコードにおけるデータ変数の実行又は定義と更新に必要な時間を判定するため、変数対時間の3Dコールグラフをプロットすることを含む。このグラフをレンダリングするために、逐次コンピュータプログラムコードを少なくとも1回オフラインで実行し、変数の値を更新された時間と関連づける。レンダリングする別のグラフは変数対ライン番号のグラフであるが、これは逐次コンピュータプログラムコードのライン番号に基づいた変数の依存をチェックするものである。さらに、解析段階は関数対時間のグラフを含むが、これは個々の関数にかかる時間を表したものである。なお、この解析を通して並列処理の対象とする関数が判定される。時間の大半を使う関数又はモジュールは並列処理に最も適している。さらに、得た情報はその後の検索のために共有メモリ等の自動並列処理システムのメモリに記憶される。
コールグラフを作成してSPIを挿入する目的は、オリジナルの逐次コンピュータプログラムコードの実行パターンによって実行を開始する実際の時間より前にコンピュータプログラムコードを実行し始めるためである。別の好適な実施形態は、必要に応じて冗長コンピュータプログラムコードを実行することを含む(例えばif-else文やスイッチケース文があるが、それらに限定されない)。これらにより、データの依存関係及びデータ変数の更新の統計データの記録の解析に基づいて、逐次実行時間(SET)より前に非逐次プログラムコードを実行することになる。さらに、依存関係とタイミング情報を自動的に検出して、並列実行に備えて並列処理できる可能性のあるコードに対するモジュールのタイミングを識別し解析する。
さらに、入力逐次コードをプロファイリングする間に判定するコールグラフは、全ての関数又はモジュールが明確な「呼び出し順」に従ったものをグラフで示したものであるが、そのシーケンスは、コンピュータプログラムコードに含まれるプログラム論理の部分と、より早い関数又はモジュールの実行を介してデータ変数を更新する必要があるかどうかに関する依存関係において判定される。このデータ変数の依存関係とプログラム論理のプロセスフローを解析することにより、コールチャートを作成する。コールグラフは、対象となる逐次コードを実行する実際のタイムスケールにおいて異なるモジュールを実行するシーケンスをグラフで示す。コールチャートを判定する目的は、逐次コンピュータプログラムコード内の個別のモジュールの実行を始めるのに必要な最短時間を判定することである。さらに、修正コードを一旦生成すれば、並列計算環境での非逐次実行に動作上適応させることができる。
別の実施形態では、コンピュータプログラムコードの性質とデータ依存統計値を厳密に評価することにより、コンピュータプログラムを実行するための絶対最短待機時間(AMWT)を判定する。これには入力された逐次コンピュータソースコードを少なくとも一度実行する必要があり、下流のコンピュータプログラムコードの実行を開始するのに必要な時間の短縮量を識別する毎にデータプロファイリングを行う。時間測定を評価するこの方法を反復して行うことで、下流のコンピュータプログラムコードを実行開始できる最短時間が判定されることになる。
別の実施形態では、特定のデータ変数の値がその後変わっていない逐次コンピュータプログラムコード内の時間及びライン番号の重要な組合せを判定することは、下流の関数又はモジュールの「事前」実行を判定する際に有益であり、これについて説明する。従って、データ変数のそれぞれの臨界点における定常状態値はメモリに記憶され、下流のモジュールが必要とする際にメモリから呼び出されることになる。これにより、逐次実行に対してコード化したモジュールを個別に実行するように論理を展開することができる。
一例示的な実施形態では、対応する関数における真の無駄時間又は真の最も早い時間を判定する反復プロセスが実行され得る。よって、本発明は個別の関数の真の無駄時間を判定する反復方法を記載する。実行に必要と識別した時間をコールグラフに重ねることによって、逐次コンピュータプログラムコードの各関数の無駄時間が判定される。
例えば、図3に示すように入力チャネル及び出力チャネルを備えたチップと同義のコード中の各関数又はモジュールについて検討する。同様に、それぞれの関数は入力引数と幾つかの出力引数を有する。X1、X2、及びX3、並びにK1、K2、及びK3は関数に入力される変数であり、関数の出力をy1、y2、..ynとする。yiは他の何らかの関数に入力されるものであり、この関数と同様の方法で処理されることができる。関数の使用するこれらの引数と変数を識別する。「学習モード(learn mode)」において、アプリケーションのいくつかの実行中にこれらの変数を観測する。これらの観測によって、関数又はモジュールコードの一部が時間前に実行される。同様の状況は大まかな並列処理の場合にも当てはまるが、ここでアプリケーションのコールグラフについて考察する。各関数は何らかの他の関数(1つ又は複数)を呼び出す。このグラフとプロファイリング情報から、別個のコアで独立した関数全体を時間前に、又は別個のコアで関数コードの一部を実行することができる。関係するステップは、データの依存関係に関するグラフの描画、コールグラフの描画、データ依存関係グラフのコールグラフへの埋め込み、関数の呼び出し前に変数が定常状態に到達してからの時間であるTiを見つけるプログラムの実行、そして所与の関数に対する全てのTiの最小値を見つけること、である。
F1を時間t1の逐次処理において呼び出す。
F1は時間(t−T1min)において実行することができる。
F2は逐次処理における時間t1=(t+F1がF2を呼び出すのに必要な時間)で呼び出される。
しかし、F2は(t1−T2min)=t2で実行することができる。
F2は異なるプロセッサで実行できる。t2に達すると、利用可能なプロセッサを見つけてF2を実行させる。なお、プロセッサの利用可能性を見つけるのはスケジューリング手段である。
このように、本発明は逐次コンピュータプログラムコードの最適な並列処理のために必要なプロセッサの最適な数を判定する。かかる実行には、様々なプロセッサにおける各タスク又はその一部をスケジューリングすることが含まれ、費用及び時間の節約になる。
実際のケースでは、コンピュータプログラムコードを並列実行するのにN個のプロセッサがない場合がある。例えば、プロセッサが4つしかない場合:
1番目はマスター=プロセッサ番号0
2番目にF1を実行=プロセッサ番号1
3番目にF2を実行=プロセッサ番号2
4番目にF3を実行=プロセッサ番号3、である。
別の関数F4を実行する状態にありながら、利用可能なプロセッサがない場合には、無駄時間(Dead Time、Tdead)を計算する。各関数はそれ自身のインデックス(=関数における並列処理コードのインデックスセクションの番号)を有する。インデックスは、コールグラフにおけるその関数の近傍にある各関数の実行時間にも依存する。
例えば関数F1、F2、及びF3の実行にはそれぞれ、α、α、αの時間がかかるとする。F4を実行できる状態であるが、コア1、2、3はF1、F2、F3の実行でビジー状態である。F4はF1、F2、F3それぞれにおけるα、α、αの最短時間の間、F4の実行に利用できるコアを得るために待機しなければならない。このαminが無駄時間となる。
上の状況を解決する方法の1つは、F1、F2、F3、F4の実行にかかる専用の時間を見つけて、最長の実行時間を見つけることである。F4の実行には(F1+F2+F3)を実行する最長時間がかかる、又はF1/F2/F3の任意の組み合わせを同時に実行しなければならないと仮定する。
詳細な記載における説明をさらに詳細に述べるために、本発明を実行するアプリケーションを説明することのみを目的とし、いくつかの例を述べることにする。当業者には、以下に示す例は本発明の全てを網羅しているわけではなく、本発明の範囲を制限しないことを理解されたい。
例1:逐次コード化によって事前に行うコードの実行
データ依存関係に関してコードを解析すると、事前実行を開始できるライン番号を判定し得る。以下のような構造を定義し得る:
Execute_on_priority_currentprocess_linestart_lineend_wait_linenumberEnd_nextprocess
ここでライン番号100が現在実行中であるが、1つのループであってライン101から349に依存しないライン番号350から380までの実行を開始する必要がある、と仮定する。
上記の場合、
execute_on_priority_P2_350_380_wait_349_P1
と構築される。P1は現在のプロセスであり、ここから第2プロセスP2にジャンプする(この場合にはFORループ)。
例2:if-else文に対する並列処理方法
if-else文を見つける場合にはいつでも、コードを解析して実際の実行前に変数の依存関係を見つけるが、これはこのライン番号又は位置以降if-else文内で使用される変数が更新されていないことを意味する。多くの場合、if及びelseブロック内で使用される変数は、実際のif及びelseが始まるかなり前に最終更新された可能性がある。しかしif-elseの実際の実行を決める条件チェックは最新の変数で行われない。本発明では、if及びelse両方を実行して、条件文が準備できていれば、if又はelseのいずれかの結果を、条件文の結果に基づいて選択する。以下に示すコードセグメントでは、if-else依存関係はライン番号5で終了するため、ライン番号6からのif及びelseの実行を開始することができる。ライン番号7以降にのみif_condが見られるため、コアの1つでif部分(ライン9)の実行を開始し、他のものでelse部分(ライン11)の実行を開始する。メインコアはライン6−7の実行を続ける。ライン7が実行され、if_condの値がわかれば、関連するコアからの結果が採用され、他の結果は破棄される。
1. module main start
2. variables if_var, else_var,a,b, if_cond
3. if_var = prime()
4. else_var_prime1()
5. comment: No dependency after this line
6. Factorial(a,b)
7. If_cond = mod3()
8. If(if_cond) then
9. comment: if_var used here
10. else
11. comment: else_var used here
12. end if
13. module main end
例3:スイッチケース文に対する並列処理方法
同様の方法をスイッチケース分に対して使用できる。スイッチケース文の依存関係が終了する位置において、異なるケースの実行を異なるコアに対してスケジューリングすることができる。ケース文に対する条件変数がわかれば、関連する結果を保持することができるため、その他の結果は破棄すべきである。
要約すると、if-else文、スイッチケース文等(ただしそれらに限定されない)の逐次コンピュータプログラムコードにおける制御フロー文を並列処理する方法は、制御フロー文におけるデータ変数を識別するステップと、制御フロー文内の前記データ変数が最後に更新されたライン番号及び時間を識別するステップと、識別したライン番号を電子レポジトリに記憶するステップと、前記記憶したデータを用いてライン及び時間の依存関係を示すグラフをプロットし、前記データ変数を更新するステップと、ライン及び時間の依存関係の統計を使用して、関数全体又は関数の一部を識別して異なるプロセッサに送り、逐次コンピュータプログラムコードの並列処理を行うステップと、プロセッサによる要求があった際に前記メモリから呼び出すために変数名又はアドレスを使用して、前記制御フロー文の内部並列処理を行うステップと、を含む。
例4:ループに対する並列処理方法
時間前にループを実行するために、メインコアが現行コードを実行している間に、別のプロセッサコアでループの終了部分で使用される変数の依存関係をチェックし、ループ全体を実行する。例えば、ループがライン番号100において変数を使用し、その変数がライン番号30で最後に更新されたものであれば、ライン番号31から先は事前にループを実行することができる。よって、ライン番号31から99を1つのプロセッサで実行し、それと同時にライン100において始まるループを別のプロセッサで実行する。
要約すれば、逐次コンピュータプログラムコードにおけるループを並列処理する方法は、ループ文中のデータ変数を識別するステップと、文同士の依存関係をチェックするステップと、逐次コンピュータプログラムコード内の前記データ変数が最後に更新されたライン番号を識別するステップと、識別したライン番号をメモリに記憶するステップと、前記記憶したデータを使用して、前記データ変数の更新に関するライン依存関係を示すグラフをプロットするステップと、前記ライン依存関係の統計を使用して、コードの特定のセグメントを識別して異なるプロセッサに送り、逐次コンピュータプログラムコードの並列処理を行うステップと、を含む。
例5:反復プロセス
前掲の例のうちの一つで述べたモジュールF3について検討する。T3minは、変数の依存関係がない間のF3の実行時間とする。モジュールF1及びモジュールF2がプロセッサ及び利用可能性に基づいてスケジューリングされるとT3minがT3min’に変わる。ここでT3min<T3min’である。
これで第2の反復とT1min’、T2min’、T3min’等を計算する必要が始まる。これはN回反復され、全てのタイミングが無駄時間になると停止する。
例6:プログラムコードを実証する擬似コード
以下に示す擬似コードの例は、図4に示すようにマスクを使用したエッジ検出アルゴリズムの一例のコードである。想定実行−事前実行の基礎を、以下の例で説明する。なお、以下の例は多数の変数を考慮したものではないため、例としては完全なものではない。
1. module main start
2. datastructs originalImage, edgeImage, filterImage
3. variables X, Y, I, J, sumX, nColors, p, q, vectorSize
4. variables fileSize, mask, row, col, origcols, origrows
5. variables coeffhighpass, coefflowpass, Filttype, sum
6. q='0'
7. mask =(-1,0,1,-2,0,2,-1,0,1)
8. bmpInput = fileopen(mode, “in“)
9. bmpOutput = fileopen(mode, “out“)
10. fileSize = getImagelnfo()
11. originalImage.cols = getImagelnfo()
12. originalImage.rows = getImagelnfo()
13. edgeImage.rows = originalImage.rows
14. edgeImage.cols = originalImage.cols
15. loop from row =0 to row <= originalImage.rows-1
16. loop from col =0 to col <= originalImage.cols -1
17. pchar = read each pixel from bmpInput
18. originalImage.data = pChar
19. emd loop
20. end loop
21. nColors = getImagelnfo()
22. vectorSize = fileSize -(14+40+4*nColors)
23. copyImagelnfo (bmpInput, bmpOutput)
24. loop from Y=0 to Y<= originalImage.rows-1
25. loop from X=0 to X<= originalImage.cols-1
26. sumX =0
27. loop from I=-l to I<=1
28. loop from J=-l to J<=1
29. sumX = sumX + originalImage.data +X+I+
30. (Y+J)*originalImage.cols))*mask[I+1][J+1]
31. end loop
32. end loop
33. if sumX >255 then
34. sumX =255
35. Filttype = low
36. endif
37. if sumX <0 then
38. sumX =0
39. Filttype = high
40. endif
41. edgeImage.data +X+Y*originalImage.cols = 255 - sumX
42. end loop
43. end loop
44. if (Filetpe = low) then
45. filterImage = ApplyHighPassFilter(originalImage)
46. Else
47. filterImage = ApplyLowPassFilter(originalImage)
48. endif
49. loop from Y=0 to Y<=originalImage.rows-1
50. loop from X=0 to X<=originalImage.cols-1
51. resultImage.data = filterImage.data + EdgeImage.data
52. end loop
53. end loop
54. module main ends
55. function getImagelnfo start
56. variables numberOfChars ,value, dummy, i
57. dummy ='0'
58. loop form i=l to i<= numberOfChars
59. value = read value from file
60. end loop
61. module getImagelnfo end
62. module copyImagelnfo
63. variables numberOfChars ,value, dummy, i
64. dummy ='0'
65. loop from i=0 to i<=50
66. value = read value from file
67. bmpOutput = write 'value'
68. end loop
69. module copyImagelnfo end
70. module ApplyHighPassFilter
71. loop from ht =0 to row
72. loop form wd =0 to col
73. sum =0
74. loop from c =0 to coeffhighpass
75. sum = sum + coeffliighpass * originalImage.data
76. end loop
77. filterImage.data = sum
78. end loop
79. end loop
80. funciton ApplyHighPassFilter end
81. module ApplyLowPassFilter
82. loop from ht =0 to row
83. loop form wd =0 to col
84. sum =0
85. loop from c =0 to coefflowpass
86. sum = sum + coefflowpass * originalImage.data
87. end loop
88. filterImage.data = sum
89. end loop
90. end loop
91. funciton ApplyLowPassFilter end
事前実行:
変数‘Original Image rows’について検討すると、上記コードを解析することにより、この変数はライン番号12で更新されており、その後ライン番号13、15、24、50で使用されている。ライン番号24におけるループで使用される変数はいずれも、ライン13から23までで更新された変数を使用しない。そのため、上記コードがライン13から23を実行している間、ライン24から32におけるループを別のプロセッサで並列実行する。よって、ライン番号25から31におけるループの実行開始は、事前実行されることになる。
本発明の代表的な例である前掲の特定の実施形態、実施例、及び図面を参照することで、本発明をより容易に理解できる。ただし、それらは例示の目的で示したものであり、本発明はその主旨及び範囲を逸脱することなく、特定的に示した形態とは別の形態で実行可能であることは理解されよう。認識される通り、本発明は様々な他の実施形態が可能であり、そのいくつかの要素と関連する詳細は、すべて本発明の基本的な概念から逸脱することなく、種々の変更が可能である。従って、本明細書の記載は本質的に例示であり、いずれの形態にも限定されない。本明細書に記載したシステムと装置の変更及び変形は、当業者には明らかであろう。それらの変更及び変形は、添付の特許請求の範囲に含まれることを意図している。

Claims (5)

  1. 実行速度を高めるために逐次コンピュータプログラムコードを並列処理する方法であって、
    前記逐次コンピュータプログラムコードを自動並列処理システムに入力するステップと、
    前記逐次コンピュータプログラムコードの構造を解析して、機能性に影響を与えることなく前記逐次コンピュータプログラムコードに特別プログラム命令(SPI)を挿入する位置を識別するステップと、
    前記逐次コンピュータプログラムコードの各ラインと前記逐次コンピュータプログラムコードの各関数の実行に必要な時間との依存関係を判定するため、関数又はモジュールのコールグラフ、時間測定、及び時間表を作成することによって、前記逐次コンピュータプログラムコードをプロファイリングするステップと、
    前記逐次コンピュータプログラムコードを解析及びプロファイリングすることによって得た情報により前記逐次コンピュータプログラムコードの並列処理可能性を判定するステップと、
    並列処理可能性が判定されると、前記逐次コンピュータプログラムコードにSPIを挿入して、並列実行可能なコンピュータプログラムコードを得るステップと、
    前記並列実行可能なコンピュータプログラムコードを実行するために並列計算環境に送るステップと、
    を含んでおり、
    前記逐次コンピュータプログラムコードが、逐次実行されるソースコードの形態の関数を複数含み、
    前記逐次コンピュータプログラムコードを少なくとも一度実行することにより、前記逐次コンピュータプログラムコードをオフラインで解析し、解析及びプロファイリングのプロセスを通して並列可能なコードを判定し、学習モードにおいて前記ソースコードの形態の関数に含まれる変数を観測し、
    前記逐次コンピュータプログラムコードが、少なくとも、制御フロー文及びループ文をさらに含み、
    前記逐次コンピュータプログラムコードにおけるループを並列処理する方法は、
    前記ループ文中のデータ変数を識別するステップと、
    前記文同士の依存関係をチェックするステップと、
    前記逐次コンピュータプログラムコード内の前記データ変数が最後に更新されたライン番号を識別するステップと、
    前記識別したライン番号をメモリに記憶するステップと、
    前記記憶したデータを使用して、前記データ変数の更新に関するライン依存関係を示すグラフをプロットするステップと、
    前記ライン依存関係の統計を使用して、コードの特定のセグメントを識別して異なるプロセッサに送り、逐次コンピュータプログラムコードの並列処理を行うステップとを含むことを特徴とする方法。
  2. 前記逐次コンピュータプログラムコードを実行する実際のタイムスケールにおいて、異なる関数又はモジュールを実行するシーケンスをグラフで示した、前記逐次コンピュータプログラムコードの変数対時間、変数対ライン番号、及び関数対時間のグラフを、コールグラフが含み、
    実行に必要と識別した時間をコールグラフに重ねることによって、前記逐次コンピュータプログラムコードの各関数の無駄時間を判定する、請求項1に記載の方法。
  3. 前記並列実行可能なコンピュータプログラムコードを用いることで、逐次コンピュータプログラムコードの実行パターンによって実行を開始する実際の時間より前に、前記コンピュータプログラムコードを実行できる、請求項1に記載の方法。
  4. 前記方法が、逐次コンピュータプログラムコード内の特定の関数若しくはモジュール、又はその一部の実行を開始するため、絶対最短待機時間(AMWT)を評価する反復プロセスを提供する、請求項1に記載の方法。
  5. 複数のコードを並列処理する代替的方法が、逐次コンピュータプログラムコードをクラスタインデックスによってクラスタに分別することによるものであり、
    データ依存関係、オリジナルコードによる実行の時間表、及び実行の時間測定を含む複数のパラメータから、前記クラスタインデックスを得る、請求項1に記載の方法。
JP2015154050A 2008-12-01 2015-08-04 逐次コンピュータプログラムコードを並列処理する方法及びシステム Expired - Fee Related JP6141365B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN2513MU2008 2008-12-01
IN2513/MUM/2008 2008-12-01

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2011538103A Division JP2012510661A (ja) 2008-12-01 2009-12-01 逐次コンピュータプログラムコードを並列処理する方法及びシステム

Publications (2)

Publication Number Publication Date
JP2015207318A JP2015207318A (ja) 2015-11-19
JP6141365B2 true JP6141365B2 (ja) 2017-06-07

Family

ID=42232941

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2011538103A Pending JP2012510661A (ja) 2008-12-01 2009-12-01 逐次コンピュータプログラムコードを並列処理する方法及びシステム
JP2015154050A Expired - Fee Related JP6141365B2 (ja) 2008-12-01 2015-08-04 逐次コンピュータプログラムコードを並列処理する方法及びシステム

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2011538103A Pending JP2012510661A (ja) 2008-12-01 2009-12-01 逐次コンピュータプログラムコードを並列処理する方法及びシステム

Country Status (4)

Country Link
US (2) US8949786B2 (ja)
EP (1) EP2361408A4 (ja)
JP (2) JP2012510661A (ja)
WO (1) WO2010064260A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8495342B2 (en) * 2008-12-16 2013-07-23 International Business Machines Corporation Configuring plural cores to perform an instruction having a multi-core characteristic
US9003383B2 (en) * 2011-09-15 2015-04-07 You Know Solutions, LLC Analytic engine to parallelize serial code
US20130263139A1 (en) * 2012-03-28 2013-10-03 Lior Schejter Managing execution of applications in a runtime environment
DE102012015897A1 (de) * 2012-08-10 2014-02-13 Giesecke & Devrient Gmbh Verfahren zum Ausführen vom Programmcode
US9015673B2 (en) * 2012-08-17 2015-04-21 Ge Aviation Systems, Llc Method for developing software in a parallel computing environment
US10725897B2 (en) 2012-10-09 2020-07-28 Securboration, Inc. Systems and methods for automatically parallelizing sequential code
WO2014058854A1 (en) * 2012-10-09 2014-04-17 Securboration, Inc. Systems and methods for automatically parallelizing sequential code
US10466988B2 (en) * 2017-06-14 2019-11-05 ManyCore Corporation Systems and methods for automatic computer code parallelization
JP7259380B2 (ja) * 2019-02-12 2023-04-18 日本電気株式会社 情報処理実行制御装置、情報処理実行制御システム、情報処理実行制御方法、及び、情報処理実行制御プログラム
CN110780897B (zh) * 2019-08-26 2022-05-10 华为云计算技术有限公司 一种代码变更方法以及装置
US11841982B2 (en) 2021-10-20 2023-12-12 International Business Machines Corporation Partitioning circuits for execution of sequential secure computation code on multiple processors
CN114461198A (zh) * 2021-12-27 2022-05-10 上海交通大学四川研究院 基于可视化低代码的程序生成方法、装置、设备及介质

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3601341B2 (ja) 1999-02-09 2004-12-15 株式会社日立製作所 並列プログラム生成方法
JPH02199541A (ja) * 1989-01-30 1990-08-07 Fujitsu Ltd 最適化制御行自動生成方式
JP3039953B2 (ja) * 1989-04-28 2000-05-08 株式会社日立製作所 並列化装置
JPH03282826A (ja) * 1990-03-30 1991-12-13 Nec Corp 並列化翻訳方式
JPH0444181A (ja) * 1990-06-12 1992-02-13 Hitachi Ltd 並列変換処理方法
GB9023633D0 (en) * 1990-10-31 1990-12-12 Int Computers Ltd Predicting the performance of a computer system
US5765011A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
JPH0675786A (ja) * 1992-08-26 1994-03-18 Hitachi Ltd タスクスケジュリング方法
JP3208870B2 (ja) * 1992-10-30 2001-09-17 株式会社日立製作所 データ分割パタンの評価方法
JPH0736680A (ja) * 1993-07-23 1995-02-07 Omron Corp 並列化プログラム開発支援装置
US5860009A (en) * 1994-04-28 1999-01-12 Kabushiki Kaisha Toshiba Programming method for concurrent programs and program supporting apparatus thereof
JPH0916436A (ja) * 1995-06-30 1997-01-17 Hitachi Ltd 並列プログラム最適化支援方法
JP3305949B2 (ja) * 1996-02-08 2002-07-24 富士通株式会社 プログラム解析装置
US6339840B1 (en) 1997-06-02 2002-01-15 Iowa State University Research Foundation, Inc. Apparatus and method for parallelizing legacy computer code
JP2000122877A (ja) * 1998-10-19 2000-04-28 Nec Corp プログラムのコード配置方法
JP2001167060A (ja) 1999-12-07 2001-06-22 Hitachi Ltd タスク並列化方法
US6742083B1 (en) 1999-12-14 2004-05-25 Genesis Microchip Inc. Method and apparatus for multi-part processing of program code by a single processor
JP2002032229A (ja) * 2000-07-14 2002-01-31 Mitsubishi Electric Corp 並列処理プログラム作成方法、並列処理プログラム作成装置及び並列処理プログラム作成方法を記録した記録媒体
JP4019361B2 (ja) * 2002-06-24 2007-12-12 株式会社日立製作所 並列化変換システムと並列化変換方法およびプログラムならびにコンパイラ
US7159211B2 (en) * 2002-08-29 2007-01-02 Indian Institute Of Information Technology Method for executing a sequential program in parallel with automatic fault tolerance
JP4042604B2 (ja) * 2003-03-31 2008-02-06 日本電気株式会社 プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP2004310651A (ja) * 2003-04-10 2004-11-04 Fujitsu Ltd コスト解析に基づいてループの自動並列化処理を行う情報処理装置
US7793276B2 (en) * 2003-11-14 2010-09-07 Intel Corporation Apparatus and method for automatically parallelizing network applications through pipelining transformation
US7730460B1 (en) * 2004-06-18 2010-06-01 Apple Inc. Code execution visualization using software fingerprinting
US20060123401A1 (en) * 2004-12-02 2006-06-08 International Business Machines Corporation Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system
JP2006243838A (ja) 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading
US7757222B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
DE102005050561A1 (de) 2005-10-17 2007-04-19 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Element zur flächigen Beleuchtung
DE102005056186B4 (de) 2005-11-21 2010-07-01 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Steuerung von Rechenprozessen
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US20070192766A1 (en) 2006-02-13 2007-08-16 Ketan Padalia Apparatus and methods for parallelizing integrated circuit computer-aided design software
DE602007006467D1 (de) 2006-03-27 2010-06-24 Coherent Logix Inc Programmierung eines multiprozessorsystems
US7571301B2 (en) 2006-03-31 2009-08-04 Intel Corporation Fast lock-free post-wait synchronization for exploiting parallelism on multi-core processors
JP4784827B2 (ja) * 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US7779230B2 (en) * 2006-10-18 2010-08-17 Wisconsin Alumni Research Foundation Data flow execution of methods in sequential programs
US8307337B2 (en) * 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
JP4962564B2 (ja) * 2007-03-29 2012-06-27 富士通株式会社 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
US7983890B2 (en) * 2007-06-18 2011-07-19 Massachusetts Institute Of Technology Method and apparatus performing automatic mapping for a multi-processor system
JP2009048252A (ja) * 2007-08-14 2009-03-05 Oki Electric Ind Co Ltd プログラム変換装置及びコンパイラプログラム
JP2009129179A (ja) * 2007-11-22 2009-06-11 Toshiba Corp プログラム並列化支援装置およびプログラム並列化支援方法
US8645933B2 (en) * 2008-08-01 2014-02-04 Leon Schwartz Method and apparatus for detection and optimization of presumably parallel program regions
US8291408B1 (en) * 2010-03-10 2012-10-16 Google Inc. Visual programming environment for mobile device applications
US20130159892A1 (en) * 2011-08-17 2013-06-20 Weejot Ltd. Non-technical creation of mobile web applications

Also Published As

Publication number Publication date
JP2015207318A (ja) 2015-11-19
JP2012510661A (ja) 2012-05-10
WO2010064260A1 (en) 2010-06-10
US20150317140A1 (en) 2015-11-05
US9880822B2 (en) 2018-01-30
EP2361408A1 (en) 2011-08-31
US8949786B2 (en) 2015-02-03
EP2361408A4 (en) 2012-05-23
US20110239201A1 (en) 2011-09-29

Similar Documents

Publication Publication Date Title
JP6141365B2 (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
Abadi et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems
KR101279179B1 (ko) 병렬 프로그램 생성 방법
US20110119660A1 (en) Program conversion apparatus and program conversion method
JP2020518881A (ja) コンピュータに実装する方法、コンピュータ可読媒体および異種計算システム
US20120054722A1 (en) Trace generating unit, system, and program of the same
KR20080093108A (ko) 프로그램 병렬 실행 시스템 및 방법
Lutz et al. Helium: a transparent inter-kernel optimizer for opencl
Bahmann et al. Perfect reconstructability of control flow from demand dependence graphs
Falch et al. ImageCL: An image processing language for performance portability on heterogeneous systems
Bertolacci et al. Identifying and scheduling loop chains using directives
Olabi et al. A compiler framework for optimizing dynamic parallelism on GPUs
CN111124415B (zh) 一种开发循环代码中潜在可向量化循环的方法
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
Custers Algorithmic species: Classifying program code for parallel computing
Bridges The velocity compiler: Extracting efficient multicore execution from legacy sequential codes
Kandiah et al. Parsimony: Enabling SIMD/Vector Programming in Standard Compiler Flows
Matz et al. Automated partitioning of data-parallel kernels using polyhedral compilation
Shao et al. Map-reduce inspired loop parallelization on CGRA
Süß et al. And now for something completely different: running Lisp on GPUs
JP3551352B2 (ja) ループ分割方法
JP2007108838A (ja) コンパイル方法及びコンパイル装置
KR20230053509A (ko) 딥러닝 프로그램 실행 방법 및 장치
Almghawish et al. An automatic parallelizing model for sequential code using Python

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150826

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160817

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170327

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170502

R150 Certificate of patent or registration of utility model

Ref document number: 6141365

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees