(57)【要約】【課題】ボラタイル変数のロード命令を通常のロード命令と同様に基本ブロックを超えて移動すること。【解決手段】トランザクション化部３１がボラタイル変数のロード命令を（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令に置き換え、スケジューリング部３２が（ＸＢＥＧＩＮ＋通常ロード）命令を前方へ移動する。そして、生成部３３が、移動された（ＸＢＥＧＩＮ＋通常ロード）命令をＸＢＥＧＩＮ命令と通常ロード命令に置き換える。【選択図】図３
2016189165.tif 000002
【特許請求の範囲】
【請求項１】
複数の単位処理を並列に実行するプログラムをコンパイルするコンパイルプログラムにおいて、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し、
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
【請求項２】
前記移動する処理は、前記先頭ロード命令を先行の合流基本ブロックに移動することを特徴とする請求項１に記載のコンパイルプログラム。
【請求項３】
前記移動する処理は、前記先頭ロード命令を基本ブロック内の先頭に移動することを特徴とする請求項１又は２に記載のコンパイルプログラム。
【請求項４】
前記移動する処理は、前記先頭ロード命令と前記終了命令の間に所定の個数の命令が含まれるように前記先頭ロード命令を移動することを特徴とする請求項１、２又は３に記載のコンパイルプログラム。
【請求項５】
複数の単位処理を並列に実行するプログラムをコンパイルするコンパイル方法において、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理をコンピュータが実行することを特徴とするコンパイル方法。
【請求項６】
複数の単位処理を並列に実行するプログラムをコンパイルするコンパイル装置において、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換える置換部と、
前記置換部により置き換えられた先頭ロード命令を命令スケジューリングにより移動する移動部と、
前記移動部により移動された前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する生成部と
を有することを特徴とするコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイルプログラム（コンパイラ）、コンパイル方法及びコンパイル装置に関する。
【背景技術】
【０００２】
コンピュータによりプログラムを実行する場合、メモリのアクセス速度はＣＰＵ（Central  Processing  Unit）の処理速度より遅いため、メモリからのロード命令をできるだけ先行して実行することが行われる。このため、コンパイラは、命令スケジューリングにより、ロード命令ができるだけ先に実行されるようにロード命令を命令列の前の方向に移動する。
【０００３】
また、コンパイラは、将来使用することが予想されるデータを予めキャッシュメモリに読み込むプリフェッチ命令を埋め込むことによって、メモリアクセスを高速化することも行う。
【０００４】
なお、マルチスレッドアプリケーションの実行を、決定論的数の操作を指定する２つ以上の量子に分割し、スレッドが２つ以上の量子を実行する決定論的順序を指定する従来技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１１−５０７１１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ロード命令ができるだけ先に実行されるようにロード命令を命令列の前の方向に移動する従来の命令スケジューリングには、ボラタイル（volatile）変数に対するロード命令を基本ブロックを超えて移動することができないという問題がある。
【０００７】
ここで、ボラタイル変数とは、マルチスレッド型プログラムにおいて、他スレッドによって書き換えられる可能性のある変数である。また、基本ブロックとは、命令列のブロックであって、入口と出口が１つであり、内部に分岐を含まないブロックである。また、スレッドとはＣＰＵの利用単位であり、１つのプログラムが複数のスレッドで並列に実行されることがある。
【０００８】
図１０は、従来の命令スケジューリングを説明するための図である。図１０に示すように、「命令＃１」、「命令＃２（条件分岐命令Ｌ＃２）」、「命令＃３」、「命令＃４」、「Ｌ＃２：ロード命令→ボラタイル変数」、「ＵＳＥ  ボラタイル変数」の順に命令が並んでいるとする。
【０００９】
ここで、「Ｌ＃２」は、ラベルであり、「条件分岐命令Ｌ＃２」は、条件が成立すると「Ｌ＃２」へ分岐することを表す。また、「ロード命令→ボラタイル変数」は、ボラタイル変数のロード命令であることを表し、「ＵＳＥ  ボラタイル変数」は、ロードされたボラタイル変数が使用されることを表す。
【００１０】
図１０において、「命令＃３」と「命令＃４」が１つの基本ブロックを構成し、「ロード命令→ボラタイル変数」と「ＵＳＥ  ボラタイル変数」が別の基本ブロックを構成する。したがって、従来の命令スケジューリングでは、「ロード命令→ボラタイル変数」を移動することができない。また、従来の命令スケジューリングでは、メモリ命令を超えて命令を移動することもできない。ここで、メモリ命令とは、メモリをアクセスする命令である。
【００１１】
本発明は、１つの側面では、命令スケジューリングにおいてボラタイル変数に対するロード命令を基本ブロックを超えて移動することができるコンパイルプログラム、コンパイル方法及びコンパイル装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示するコンパイルプログラムは、１つの態様において、複数の単位処理を並列に実行するプログラムをコンパイルする。前記コンパイルプログラムは、他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換える。そして、前記コンパイルプログラムは、前記先頭ロード命令を命令スケジューリングにより移動し、移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する。
【発明の効果】
【００１３】
１実施態様によれば、命令スケジューリングにおいてボラタイル変数に対するロード命令を基本ブロックを超えて移動することができる。
【図面の簡単な説明】
【００１４】
【図１Ａ】図１Ａは、ロック方式を説明するための図である。
【図１Ｂ】図１Ｂは、ＨＴＭを説明するための図である。
【図２】図２は、実施例に係るコンパイル装置が生成するコードを説明するための図である。
【図３】図３は、実施例に係るコンパイル装置の機能構成を示す図である。
【図４】図４は、トランザクション化部による処理のフローを示すフローチャートである。
【図５】図５は、スケジューリング部による処理のフローを示すフローチャートである。
【図６】図６は、先行の合流基本ブロックを説明するための図である。
【図７】図７は、ブロック内スケジュール処理のフローを示すフローチャートである。
【図８】図８は、生成部による処理のフローを示すフローチャートである。
【図９】図９は、実施例に係るコンパイルプログラムを実行するコンピュータのハードウェア構成を示す図である。
【図１０】図１０は、従来の命令スケジューリングを説明するための図である。
【発明を実施するための形態】
【００１５】
以下に、本願の開示するコンパイルプログラム、コンパイル方法及びコンパイル装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１６】
まず、実施例に係るコンパイル装置により生成されるコードを実行するＣＰＵについて説明する。実施例に係るコンパイル装置により生成されるコードを実行するＣＰＵは、ＨＴＭ（Hardware  Transactional  Memory）を有する。ＨＴＭは、排他制御をサポートする機構である。排他制御方式には、ロック（lock）方式があるが、ＨＴＭは、命令の投機的実行により、ロック方式よりも高い並列性を実現する。
【００１７】
図１Ａは、ロック方式を説明するための図であり、図１Ｂは、ＨＴＭを説明するための図である。図１Ａ及び図１Ｂにおいて、thread#1及びthread#2はスレッドであり、Critical  section（クリティカルセクション）は排他制御が行われるリソース（メモリ領域等）である。また、timeは時間を表す。
【００１８】
図１Ａに示すように、ロック方式では、thread#1がクリティカルセクションで処理を実行する間クリティカルセクションはロックされ、thread#2はクリティカルセクションで処理を実行することができない。thread#2は、thread#1のクリティカルセクションでの処理が完了した後で、クリティカルセクションで処理を実行することができる。
【００１９】
一方、ＨＴＭは、図１Ｂに示すように、thread#1及びthread#2がクリティカルセクションで並列して処理を実行することを可能とし、高性能化を実現する。ただし、クリティカルセクションでの並列実行により矛盾（conflict）が生じた場合、ＨＴＭは、処理をやり直す（Abort  &  roll  back）ことで一貫性を保障する。
【００２０】
実施例に係るコンパイル装置は、ＨＴＭを利用するコードを生成することで、ボラタイル変数のロードを先行して実行することを可能とする。具体的には、実施例に係るコンパイル装置はボラタイル変数のロード命令をトランザクション化する。トランザクション化されたロード命令は、実行時に矛盾が発生すると、命令が再実行される。
【００２１】
図２は、実施例に係るコンパイル装置が生成するコードを説明するための図である。図２において、ＨＴＭは、ＸＢＥＧＩＮ命令とＸＥＮＤ命令で挟まれた範囲で、ボラタイル変数の排他制御を行う。したがって、実施例に係るコンパイル装置は、ボラタイル変数のロード命令をＸＢＥＧＩＮ命令とＸＥＮＤ命令で挟むコードを生成することで、ボラタイル変数へのロード命令を基本ブロックを超えて前方へ移動することができる。図２では、「命令＃４」の後にあった「ロード命令→ボラタイル変数」が「命令＃１」の前に移動されている。
【００２２】
このように、実施例に係るコンパイル装置は、ＨＴＭを利用するコードを生成することで、ボラタイル変数のロードを先行して実行することを可能とし、マルチスレッド型プログラムの高速実行を実現する。
【００２３】
次に、実施例に係るコンパイル装置の機能構成について説明する。図３は、実施例に係るコンパイル装置の機能構成を示す図である。図３に示すように、実施例に係るコンパイル装置２は、記憶部２ａと、受付部２０と、字句解析部２１と、構文解析部２２と、最適化部２３と、命令スケジューリング部２４と、コード生成部２５とを有する。
【００２４】
記憶部２ａは、字句解析結果、構文解析結果、最適化結果、命令スケジューリング結果等のコンパイル途中情報を記憶する。また、記憶部２ａは、字句解析、構文規則等のコンパイル処理で使用される情報を記憶する。
【００２５】
受付部２０は、キーボード、マウス等の入力装置を用いたユーザによるコンパイル指示を受け付ける。字句解析部２１は、ソースプログラムをソースファイル１から読み込んで字句解析を行い、字句解析結果を記憶部２ａに書き込む。
【００２６】
構文解析部２２は、字句解析結果に基づいてソースプログラムの構文解析を行い、構文解析結果を記憶部２ａに書き込む。最適化部２３は、構文解析結果に対して、ループ最適化等の最適化を行い、プログラムの高速化等を行う。最適化部２３は、最適化が行われた命令列を記憶部２ａに書き込む。
【００２７】
命令スケジューリング部２４は、最適化結果に対して、命令スケジューリングを行う。すなわち、命令スケジューリング部２４は、ロード命令が先行実行されるように、ロード命令を前方へ移動し、移動した結果を記憶部２ａに書き込む。命令スケジューリング部２４は、トランザクション化部３１と、スケジューリング部３２と、生成部３３とを有する。
【００２８】
トランザクション化部３１は、ボラタイル変数のロード命令をトランザクション化する。具体的には、トランザクション化部３１は、ボラタイル変数のロード命令を、（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令に置き換える。ここで、（ＸＢＥＧＩＮ＋通常ロード）命令は、ＸＢＥＧＩＮ命令と「ロード命令→ボラタイル変数」から構成される命令である。
【００２９】
スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令との間に一定数の命令が実行されるように、（ＸＢＥＧＩＮ＋通常ロード）命令を前方に移動する。ここで、一定数は、変数のアクセス遅延量に基づいて決定される。（ＸＢＥＧＩＮ＋通常ロード）命令は、通常のロード命令と同様に命令スケジューリングされる。
【００３０】
また、ＸＥＮＤ命令は、移動されない。ただし、ＸＥＮＤ命令は、ボラタイル変数のロード命令と同じ制約で命令スケジューリングされてもよい。すなわち、ＸＥＮＤ命令は、基本ブロックを超えない範囲で移動されてよく、また、他のメモリアクセス命令との順序入れ替えがない範囲で移動されてもよい。
【００３１】
生成部３３は、スケジューリング部３２により移動された（ＸＢＥＧＩＮ＋通常ロード）命令をＸＢＥＧＩＮ命令と通常ロード命令に置き換える。
【００３２】
このように、命令スケジューリング部２４は、（ＸＢＥＧＩＮ＋通常ロード）命令を通常のロード命令と同様に命令スケジューリングして移動し、移動後にＸＢＥＧＩＮ命令と通常ロード命令に置き換える。したがって、命令スケジューリング部２４は、ボラタイル変数のロード命令を先行実行するとともにボラタイル変数にＨＴＭによる排他制御を適用させるコードを生成することができる。
【００３３】
コード生成部２５は、ロード命令が移動された結果に基づいて、命令コードを生成し、コードファイル３として出力する。コードファイル３の命令コードは、アセンブラにより機械語列に変換された後、ＣＰＵ４１にＨＴＭ４２を有する情報処理装置４により実行される。
【００３４】
次に、命令スケジューリング部２４の各処理部のフローについて図４〜図８を用いて説明する。図４は、トランザクション化部３１による処理のフローを示すフローチャートである。なお、記憶部２ａには、最適化部２３により最適化された命令列が記憶されている。
【００３５】
図４に示すように、トランザクション化部３１は、記憶部２ａに読み出す命令があるか否かを判定する（ステップＳ１）。その結果、読み出す命令がない場合には、トランザクション化部３１は、処理を終了する。
【００３６】
一方、読み出す命令がある場合には、トランザクション化部３１は、命令を読み出し（ステップＳ２）、読み出した命令がボラタイル変数のロードか否かを判定する（ステップＳ３）。その結果、ボラタイル変数のロードでない場合には、トランザクション化部３１は、ステップＳ１に戻る。
【００３７】
一方、ボラタイル変数のロードである場合には、トランザクション化部３１は、ロード命令を（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令に置き換え（ステップＳ４）、ステップＳ１に戻る。
【００３８】
このように、トランザクション化部３１がボラタイル変数のロード命令を（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令に置き換えることで、コンパイル装置２は、ＨＴＭを利用するコードを生成することができる。
【００３９】
図５は、スケジューリング部３２による処理のフローを示すフローチャートである。図５に示すように、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令をＩとする（ステップＳ１１）。
【００４０】
そして、スケジューリング部３２は、Ｉは基本ブロックの先頭命令であるか否かを判定し（ステップＳ１２）、先頭命令でない場合には、Ｉを基本ブロックの先頭に移動するブロック内スケジュール処理を行う（ステップＳ１３）。
【００４１】
そして、スケジューリング部３２は、ＩとＸＥＮＤ命令の間にＫ個以上の命令があるか否かを判定する（ステップＳ１４）。ここで、Ｋは、（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令との間に実行すべき命令の数である。そして、ＩとＸＥＮＤ命令の間にＫ個以上の命令がある場合には、スケジューリング部３２は、処理を終了する。
【００４２】
一方、ＩとＸＥＮＤ命令の間にＫ個以上の命令がない場合には、スケジューリング部３２は、Ｉの基本ブロックの先行の合流基本ブロックがあるか否かを判定する（ステップＳ１５）。その結果、スケジューリング部３２は、先行の合流基本ブロックがない場合には、処理を終了し、先行の合流基本ブロックがある場合には、先行の合流基本ブロックにＩを移動し（ステップＳ１６）、ステップＳ１２に戻る。
【００４３】
ここで、２つの基本ブロックＢ＃ｘとＢ＃ｙに以下の関係がある場合に、Ｂ＃ｘはＢ＃ｙの先行の合流基本ブロックと呼ばれる。その関係とは、「Ｂ＃ｘを実行した後、いかなるパスを通ってもＢ＃ｘとＢ＃ｙを除く任意の基本ブロックが任意の回数実行され、Ｂ＃ｙが実行される」かつ「Ｂ＃ｙを実行する前には必ずＢ＃ｘが実行される」である。
【００４４】
図６は、先行の合流基本ブロックを説明するための図である。図６において、Ｂ＃０〜Ｂ＃４は、基本ブロックである。図６のケースＡでは、Ｂ＃４の先行の合流基本ブロックはＢ＃１である。Ｂ＃１が実行されると必ずＢ＃４も実行される。一方、Ｂ＃２、Ｂ＃３の先行の合流基本ブロックはない。Ｂ＃１が実行された後、必ずしもＢ＃２が実行されるわけではない。このように、先行の合流基本ブロックはない場合もある。
【００４５】
図６のケースＢでは、Ｂ＃２の先行の合流基本ブロックはない。また、Ｂ＃３の先行の合流基本ブロックはない。Ｂ＃１にＸＢＥＧＩＮ命令があり、Ｂ＃３にＸＥＮＤ命令があるとＸＢＥＧＩＮ命令は何度も実行されてしまう。また、Ｂ＃０は、Ｂ＃３の先行の合流基本ブロックである。
【００４６】
図７は、ブロック内スケジュール処理のフローを示すフローチャートである。図７に示すように、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令との間にＫ個以上の命令があるか否かを判定し（ステップＳ２１）、Ｋ個以上の命令がある場合には、処理を終了する。
【００４７】
一方、Ｋ個以上の命令がない場合には、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令が基本ブロックの先頭命令か否かを判定し（ステップＳ２２）、先頭命令である場合には、処理を終了する。
【００４８】
一方、先頭命令でない場合には、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令が直前の命令と同じアドレスへのメモリアクセス命令であるかを判定し（ステップＳ２３）、同じアドレスへのメモリアクセス命令である場合には、処理を終了する。
【００４９】
一方、（ＸＢＥＧＩＮ＋通常ロード）命令が直前の命令と同じアドレスへのメモリアクセス命令でない場合は、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令の読み出し先が直前の命令で、参照又は更新されているかを判定する（ステップＳ２４）。その結果、（ＸＢＥＧＩＮ＋通常ロード）命令の読み出し先が直前の命令で、参照又は更新されている場合には、スケジューリング部３２は、処理を終了する。
【００５０】
一方、（ＸＢＥＧＩＮ＋通常ロード）命令の読み出し先が直前の命令で、参照又は更新されていない場合には、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令を直前の命令と入れ替え（ステップＳ２５）、ステップＳ２１に戻る。
【００５１】
このように、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令を一定の制約のもとで直前の命令と入れ替えることで、可能な限り（ＸＢＥＧＩＮ＋通常ロード）命令を基本ブロック内で移動することができる。
【００５２】
図８は、生成部３３による処理のフローを示すフローチャートである。図８に示すように、生成部３３は、記憶部２ａに読み出す命令があるか否かを判定する（ステップＳ３１）。その結果、読み出す命令がない場合には、生成部３３は、処理を終了する。
【００５３】
一方、読み出す命令がある場合には、生成部３３は、命令を読み出し（ステップＳ３２）、読み出した命令が（ＸＢＥＧＩＮ＋通常ロード）命令か否かを判定する（ステップＳ３３）。その結果、（ＸＢＥＧＩＮ＋通常ロード）命令でない場合には、生成部３３は、ステップＳ３１に戻る。
【００５４】
一方、（ＸＢＥＧＩＮ＋通常ロード）命令である場合には、生成部３３は、命令をＸＢＥＧＩＮ命令と通常ロード命令に置き換え（ステップＳ３４）、ステップＳ３１に戻る。
【００５５】
このように、生成部３３が（ＸＢＥＧＩＮ＋通常ロード）命令をＸＢＥＧＩＮ命令と通常ロード命令に置き換えることで、コンパイル装置２は、ＨＴＭを利用するコードを生成することができる。
【００５６】
上述してきたように、実施例では、トランザクション化部３１がボラタイル変数のロード命令を（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤ命令に置き換え、スケジューリング部３２が（ＸＢＥＧＩＮ＋通常ロード）命令を前方へ移動する。そして、生成部３３が、移動された（ＸＢＥＧＩＮ＋通常ロード）命令をＸＢＥＧＩＮ命令と通常ロード命令に置き換える。したがって、コンパイル装置２は、ボラタイル変数のロード命令を通常のロード命令と同様に基本ブロックを超えて移動することができる。
【００５７】
また、実施例では、スケジューリング部３２は、（ＸＢＥＧＩＮ＋通常ロード）命令を先行の合流基本ブロックに移動するので、ＸＢＥＧＩＮ命令とＸＥＮＤ命令の対応関係を正しく保つことができる。
【００５８】
また、実施例では、スケジューリング部３２は（ＸＢＥＧＩＮ＋通常ロード）命令を基本ブロック内の先頭に移動するので、コンパイル装置２はボラタイル変数のロード命令を基本ブロック内で先行して実行するコードを生成することができる。
【００５９】
また、実施例では、スケジューリング部３２は（ＸＢＥＧＩＮ＋通常ロード）命令とＸＥＮＤの間に所定の数の命令が含まれるように（ＸＢＥＧＩＮ＋通常ロード）命令を移動する。したがって、コンパイル装置２はメモリアクセスの遅延量に基づく先行ロードを行うコードを生成することができる。
【００６０】
なお、実施例では、コンパイル装置２について説明したが、コンパイル装置２が有する構成をソフトウェアによって実現することで、同様の機能を有するコンパイルプログラムを得ることができる。そこで、コンパイルプログラムを実行するコンピュータについて説明する。
【００６１】
図９は、実施例に係るコンパイルプログラムを実行するコンピュータのハードウェア構成を示す図である。図９に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００６２】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００６３】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００６４】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００６５】
そして、コンピュータ５０において実行されるコンパイルプログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、コンパイルプログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたコンパイルプログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００６６】
また、実施例では、コンパイル装置２と情報処理装置４が別の装置である場合について説明したが、本発明はこれに限定されるものではなく、情報処理装置４で実施例に係るコンパイルプログラムを実行する場合にも同様に適用することができる。
【００６７】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００６８】
（付記１）複数の単位処理を並列に実行するプログラムをコンパイルするコンパイルプログラムにおいて、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し、
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
【００６９】
（付記２）前記移動する処理は、前記先頭ロード命令を先行の合流基本ブロックに移動することを特徴とする付記１に記載のコンパイルプログラム。
【００７０】
（付記３）前記移動する処理は、前記先頭ロード命令を基本ブロック内の先頭に移動することを特徴とする付記１又は２に記載のコンパイルプログラム。
【００７１】
（付記４）前記移動する処理は、前記先頭ロード命令と前記終了命令の間に所定の個数の命令が含まれるように前記先頭ロード命令を移動することを特徴とする付記１、２又は３に記載のコンパイルプログラム。
【００７２】
（付記５）複数の単位処理を並列に実行するプログラムをコンパイルするコンパイル方法において、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し、
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理をコンピュータが実行することを特徴とするコンパイル方法。
【００７３】
（付記６）複数の単位処理を並列に実行するプログラムをコンパイルするコンパイル装置において、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換える置換部と、
前記置換部により置き換えられた先頭ロード命令を命令スケジューリングにより移動する移動部と、
前記移動部により移動された前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する生成部と
を有することを特徴とするコンパイル装置。
【００７４】
（付記７）複数の単位処理を並列に実行するプログラムをコンパイルするコンパイルプログラムを記憶したコンピュータ読み取り可能記憶媒体において、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し、
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理をコンピュータに実行させることを特徴とするコンパイルプログラムを記憶したコンピュータ読み取り可能記憶媒体。
【００７５】
（付記８）メモリと該メモリに接続されたプロセッサとを有し、複数の単位処理を並列に実行するプログラムをコンパイルするコンパイル装置において、
前記プロセッサに、
他の単位処理により書き換えられる可能性がある変数であるボラタイル変数のロード命令をハードウェアトランザクションメモリによるトランザクション化の範囲の先頭及びロードを示す先頭ロード命令と終了を示す終了命令とに置き換え、
前記先頭ロード命令を命令スケジューリングにより移動し、
移動した前記先頭ロード命令から前記トランザクション化の範囲の先頭を示す先頭命令と前記ボラタイル変数のロード命令とを生成する
処理を実行させることを特徴とするコンパイル装置。
【符号の説明】
【００７６】
１    ソースファイル
２    コンパイル装置
２ａ    記憶部
３    コードファイル
４    情報処理装置
２０    受付部
２１    字句解析部
２２    構文解析部
２３    最適化部
２４    命令スケジューリング部
２５    コード生成部
３１    トランザクション化部
３２    スケジューリング部
３３    生成部
４１    ＣＰＵ
４２    ＨＴＭ
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１Ａ】
2016189165.tif 000003
【図１Ｂ】
2016189165.tif 000004
【図２】
2016189165.tif 000005
【図３】
2016189165.tif 000006
【図４】
2016189165.tif 000007
【図５】
2016189165.tif 000008
【図６】
2016189165.tif 000009
【図７】
2016189165.tif 000010
【図８】
2016189165.tif 000011
【図９】
2016189165.tif 000012
【図１０】
2016189165.tif 000013