JP2018206175A - コンパイラ、情報処理装置及びコンパイル方法 - Google Patents

コンパイラ、情報処理装置及びコンパイル方法 Download PDF

Info

Publication number
JP2018206175A
JP2018206175A JP2017112473A JP2017112473A JP2018206175A JP 2018206175 A JP2018206175 A JP 2018206175A JP 2017112473 A JP2017112473 A JP 2017112473A JP 2017112473 A JP2017112473 A JP 2017112473A JP 2018206175 A JP2018206175 A JP 2018206175A
Authority
JP
Japan
Prior art keywords
loop
value
code
instruction
conversion
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
JP2017112473A
Other languages
English (en)
Inventor
英樹 三輪
Hideki Miwa
英樹 三輪
優太 向井
Yuta Mukai
優太 向井
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017112473A priority Critical patent/JP2018206175A/ja
Priority to US15/997,738 priority patent/US10452368B2/en
Publication of JP2018206175A publication Critical patent/JP2018206175A/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
    • 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/51Source to source
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT

Abstract

【課題】XFILL命令の実行に伴う性能の向上を可能とするコンパイラ、情報処理装置及びコンパイル方法を提供する。【解決手段】 ソースコードに含まれる多重ループ毎に、第1の値と第2の値とを比較し、ソースコードに含まれる多重ループのうち、第1の値が第2の値よりも大きい多重ループを第1変換コードに変換し、ソースコードに含まれる多重ループのうち、第2の値が第1の値よりも大きい多重ループを第2変換コードに変換する。【選択図】図11

Description

本発明は、コンパイラ、情報処理装置及びコンパイル方法に関する。
例えば、キャッシュメモリを搭載した計算機(以下、情報処理装置とも呼ぶ)上において、レジスタの値をメインメモリに書き込む場合、情報処理装置のCPU(Central Processing Unit)は、書き込み先のアドレスを含むキャッシュラインがキャッシュメモリ上に存在するか否かの判定を行う。そして、書き込み先のアドレスを含むキャッシュラインがキャッシュメモリ上に存在しないと判定した場合、CPUは、書き込み動作を行う前に、書き込み先のアドレスを含むキャッシュラインをメインメモリから読み出し、読み出したキャッシュラインをキャッシュメモリ上に配置する。その後、CPUは、キャッシュメモリに配置されたキャッシュラインに対して書き込み動作を行う。
ここで、メインメモリに対するアクセスに要する時間は、計算機に搭載されるCPUの性能向上に伴い、CPUにおける処理時間に対して相対的に長い。そのため、CPUは、上記の場合、データの書き込みを行うまでに長時間待機することになり、CPUそのものの性能を十分に発揮することができない場合がある。
この点、書き込み先のアドレスを含むキャッシュラインがキャッシュメモリ上に予め存在する場合、すなわち、キャッシュヒットする場合、CPUは、書き込み先のアドレスを含むキャッシュラインに対して書き込み動作をすぐに開始することができる。そのため、CPUが書き込み動作を行う前に書き込み先のアドレスを含むキャッシュラインをメインメモリから読み出し、キャッシュメモリ上に予め配置する技術(プリフェッチ技術)の研究が継続的に行われている(例えば、特許文献1乃至3参照)。
特表2005−535055号公報 特開平10−207772号公報 特開2011−138213号公報
ここで、連続する配列要素の書き込み動作のように、キャッシュライン上の全データの上書きが行われる場合、メインメモリからキャッシュメモリへのキャッシュラインの転送に不要である。そして、一般的にメインメモリとキャッシュメモリ間の帯域幅は狭いことから、CPUは、このような不要なキャッシュラインの転送を行わないことが好ましい。
そこで、近年の情報処理装置には、キャッシュライン充填命令(以下、XFILL命令とも呼ぶ)を使用することによって、要求メモリスループットを削減する機能が搭載されている場合がある。XFILL命令は、キャッシュラインをメインメモリから読み出す代わりに、キャッシュメモリ上に確保した領域に不定値を埋める動作を行う命令である。この命令を使用することによって、CPUは、データの書き込み動作の際に、メインメモリからキャッシュメモリへキャッシュラインを読み出すことなく、キャッシュメモリ上にキャッシュラインを確保することが可能になる。そして、CPUは、このように確保したキャッシュラインに対し、データ書き込み命令を実行することで、キャッシュヒットした場合と同様に、キャッシュラインに対する書き込み動作を大幅な待ち時間なく開始することが可能になる。そのため、CPUは、キャッシュラインに対する書き込み動作に要する処理時間を短縮することが可能になる。さらに、メインメモリからキャッシュメモリへのキャッシュラインの転送が発生しないため、CPUは、要求メモリスループットを下げることによる性能向上を実現することが可能になる。
しかしながら、XFILL命令は、キャッシュメモリ上におけるキャッシュラインの確保に一定のレイテンシを要する。そのため、CPUは、現在アクセスしているキャッシュラインよりも数個先のキャッシュラインをXFILL命令の対象とする必要がある。したがって、CPUは、XFILL命令を含むループのイタレーション数によっては、XFILL命令を実行することによる効果が十分に得られない場合がある。
そこで、一つの側面では、XFILL命令の実行に伴う性能の向上を可能とするコンパイラ、情報処理装置及びコンパイル方法を提供することを目的とする。
実施の形態の一つの態様によれば、ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換するコンパイラであって、前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出し、前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出し、前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較し、前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換する、処理をコンピュータに実行させる。
一つの側面によれば、XFILL命令の実行に伴う性能の向上を可能とする。
図1は、情報処理システム10の全体構成を示す図である。 図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。 図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。 図4は、ソースコード134の具体例について説明する図である。 図5は、ソースコード134から生成される変換コードの具体例について説明を行う。 図6は、変換コードの具体例について説明する図である。 図7は、変換コードの具体例について説明する図である。 図8は、情報処理装置1のハードウエア構成を説明する図である。 図9は、情報処理装置1の機能のブロック図である。 図10は、情報格納領域130に記憶された情報のブロック図である。 図11は、S3及びS4の処理の概略について説明するフローチャートである。 図12は、第1の実施の形態におけるコンパイル処理及びコード実行処理の詳細を説明するフローチャートである。 図13は、第1の実施の形態におけるコンパイル処理及びコード実行処理の詳細を説明するフローチャートである。 図14は、第1の実施の形態におけるコンパイル処理及びコード実行処理の詳細を説明するフローチャートである。 図15は、第1の実施の形態におけるコンパイル処理及びコード実行処理の詳細を説明するフローチャートである。 図16は、図3で説明したS12の処理の詳細について説明するフローチャートである。 図17は、図3で説明したS12の処理の詳細について説明するフローチャートである。 図18は、図3で説明したS12の処理の詳細について説明するフローチャートである。 図19は、第2の実施の形態におけるコンパイル処理を説明するフローチャートである。
[情報処理システムの構成]
図1は、情報処理システム10の全体構成を示す図である。図1に示す情報処理システム10は、情報処理装置1と、記憶装置2と、操作端末3とを含む。図1に示す操作端末3は、操作端末3a、3b及び3cが含まれている。
情報処理装置1(情報処理装置1のCPU)は、コンパイルを開始するタイミング(以下、コンパイル開始タイミングとも呼ぶ)になった場合、例えば、記憶装置2に記憶されたソースコード134を取得し、取得したソースコード134のコンパイルを行う処理(以下、コンパイル処理とも呼ぶ)を行うことにより、オブジェクトコードを生成する。コンパイル開始タイミングは、例えば、操作端末3からコンパイルを行う旨の指示を受け付けたタイミングであってよい。
また、情報処理装置1は、オブジェクトコードを実行するタイミング(以下、コード実行タイミングとも呼ぶ)になった場合、コンパイル処理によって生成されたオブジェクトコードを実行する処理(以下、コード実行処理とも呼ぶ)を行う。以下、情報処理装置1が行うコンパイル処理及びコード実行処理について説明を行う。
[情報処理装置によるコンパイル処理]
初めに、情報処理装置1が行うコンパイル処理について説明を行う。図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。
情報処理装置1は、図2に示すように、コンパイル開始タイミングまで待機する(S1のNO)。そして、コンパイル開始タイミングになった場合(S1のYES)、情報処理装置1は、ソースコード134の字句解析及び構文解析を行う(S2)。具体的に、情報処理装置1は、例えば、ソースコード134の内容をループ単位の表現に変換する。
その後、情報処理装置1は、S2の処理における解析結果に基づいて、ソースコード134の最適化を行う(S3)。具体的に、情報処理装置1は、ソースコード134に含まれるループの変形等を行うことにより、ソースコード134を変換したコード(以下、変換コードとも呼ぶ)の生成を行う。さらに、情報処理装置1は、S3の処理で最適化を行ったソースコード134(変換コード)をマシン語に変換し、オブジェクトコードの生成を行う(S4)。そして、情報処理装置1は、例えば、生成したオブジェクトコードを記憶装置2に記憶する。
これにより、情報処理装置1は、オブジェクトコードの実行時における性能の最適化を図ることが可能になる。
[情報処理装置によるコード実行処理]
次に、情報処理装置1が行うコード実行処理について説明を行う。図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。
情報処理装置1は、図3に示すように、コード実行タイミングまで待機する(S11のNO)。そして、コード実行タイミングになった場合(S11のYES)、情報処理装置1は、コンパイル処理によって生成されたオブジェクトコードの実行を行う(S12)。具体的に、情報処理装置1は、例えば、記憶装置2に記憶されたオブジェクトコード(コンパイル処理によって生成されたオブジェクトコード)を取得して実行する。
[ソースコードの具体例]
続いて、ソースコード134の具体例について説明を行う。図4は、ソースコード134の具体例について説明する図である。図4に示すソースコード134は、Fortranプログラムによって記述されたプログラムである。
なお、以下、ソースコード134から生成したオブジェクトコードが、富士通株式会社製のスーパーコンピュータである京コンピュータやPRIMEHPC FX10、FX100(以下、単にスーパーコンピュータとも呼ぶ)によって実行される場合について説明を行う。また、キャッシュラインサイズが128バイトであり、倍精度実数型の配列aが1つのキャッシュライン上に16要素を配置されるものとして説明を行う。また、配列aの先頭アドレスが128バイトの境界にアラインされ、かつ、現在アクセスしているキャッシュラインよりも4ライン先(64イタレーション先)のキャッシュラインをXFILL命令の対象とするものとして説明を行う。さらに、nが16の倍数であって64以上の数であるものとして説明を行う。
具体的に、図4に示すソースコード134には、配列a(i,j)のそれぞれに、配列b(i,j)のそれぞれに設定された値を順次設定する処理が記述されている。
[変換コードの具体例]
次に、図4で説明したソースコード134から生成される変換コードの具体例について説明を行う。図5は、ソースコード134から生成される変換コードの具体例について説明を行う。
図5に示す変換コードには、データの書き込み動作が行われる際に、メインメモリからキャッシュメモリへキャッシュラインへの読出し動作が行われる頻度を抑制するため、XFILL命令が記述されている。具体的に、図5に示す変換コードにおけるXFILL(a(i+64,j))では、配列a(i+64,j)のアドレスを含むキャッシュラインに対してXFILL命令を実行することにより、キャッシュメモリ上において配列a(i+64,j)のアドレスを含むキャッシュラインを確保する処理を行う。
なお、図5に示す変換コードでは、XFILL命令が1ラインについて1回のみ実行されるように、16アンロールが行われている。
また、図5に示す変換コードでは、図4で説明したソースコード134に含まれるループを、iが1からn−64までのイタレーションに対応するループと、iがn−64+1からnまでのイタレーションに対応するループとに分割されている。これにより、CPUは、例えば、図5に示すように、配列aの1次元目の要素数がn+p(p>0、かつ、pは16の倍数)となっている場合、配列a(n+i)(i>0)の領域のデータがXFILL命令の実行によって破壊されることを防止することが可能になる。また、CPUは、例えば、配列aの1次元目の要素数がnである場合においても、配列aの次の領域(例えば、他の配列の領域)のデータがXFILL命令の実行によって破壊されることを防止することが可能になる。
ここで、図5に示す変換コードにおいて、nを384と仮定すると、iが1から64までの処理においては、配列aをキャッシュメモリから一旦読み出す必要があるが、iが65から384までの処理においては、XFILL命令の実行に伴って配列aのアドレスを含むキャッシュラインがキャッシュメモリ上に確保されるため、メインメモリからのキャッシュラインの読出しを省くことが可能になる。具体的に、この場合、メインメモリからの読出しを省くことが可能になるキャッシュラインの割合は約83(%)になる。そのため、CPUは、図5で説明した変換コードから生成されたオブジェクトコードを実行した場合、処理時間を大幅に短縮することが可能になる。
しかしながら、図5に示す変換コードにおいて、nが64である場合、CPUは、配列aのアドレスを含むキャッシュラインのすべてをメインメモリに読み出す必要がある。そのため、CPUは、この場合、XFILL命令を実行することによる効果を得ることができない。
さらに、近年、スーパーコンピュータでは、1つの命令で複数のデータを処理可能なSIMD(Single Instruction Multiple Data)命令のデータパス幅拡大に伴い、キャッシュラインサイズが2倍の256バイトに大型化している。そのため、CPUでは、ループのイタレーション数が数百回程度と比較的長い場合であっても、XFILL命令の実行に伴う効果を十分に得られない状況が発生するようになっている。以下、キャッシュラインサイズが256バイトである場合に生成される変換コードの具体例について説明を行う。
[キャッシュラインサイズが256バイトである場合の変換コードの具体例]
図6は、変換コードの具体例について説明する図である。具体的に、キャッシュラインサイズが256バイトである場合に生成される変換コードの具体例について説明する図である。以下、キャッシュラインサイズが256バイトであり、倍精度実数型の配列aが1つのキャッシュライン上に32要素を配置されるものとして説明を行う。また、配列aの先頭アドレスが256バイトの境界にアラインされ、かつ、現在アクセスしているキャッシュラインよりも6ライン先(96イタレーション先)のキャッシュラインをXFILL命令の対象とするものとして説明を行う。
図6に示す変換コードにおいて、nを384と仮定すると、iが193から384までの処理においては、XFILL命令の実行に伴って配列aのアドレスを含むキャッシュラインがキャッシュメモリ上に確保されるが、iが1から192までの処理においては、配列aのアドレスを含むキャッシュラインをメインメモリから一旦読み出す必要がある。そのため、この場合、配列aの50(%)にあたるキャッシュラインをメインメモリから読み出す必要があり、XFILL命令の実行による効果が少なくなる。
そこで、情報処理装置1は、例えば、最内ループの1つ外側のループ(以下、外側ループとも呼ぶ)のイタレーションを対象としてXFILL命令を生成する。以下、外側ループのイタレーションを対象としてXFILL命令を生成した変換コードの具体例について説明を行う。
[外側ループのイタレーションが対象のXFILL命令を生成した変換コードの具体例]
図7は、変換コードの具体例について説明する図である。具体的に、図7は、外側ループのイタレーションを対象としてXFILL命令を生成した変換コードの具体例を説明する図である。
図7に示すように、最内ループのイタレーション数が192イタレーション(6ライン相当)であれば、j+1以降のイタレーションで書き込まれる配列aのアドレスを含むキャッシュラインをキャッシュメモリ上に確保することが可能になる。そして、例えば、jが2である場合、CPUは、配列aの50(%)にあたるキャッシュラインの読み出し動作を削減することが可能になる。さらに、jがより大きい値であれば、CPUは、メインメモリからのキャッシュラインの読出し動作の削減割合をより大きくすることが可能になる。
また、例えば、最内ループのイタレーション数が96イタレーションと少ない場合であっても、XFILL対象とするjのイタレーションをj+1からj+3に伸ばすことで6ライン確保できる。そのため、CPUは、この場合、XFILL命令のレイテンシを隠蔽することが可能になる。
ここで、例えば、最内ループのイタレーション数が比較的多い場合等、図6で説明した変換コードから生成したオブジェクトコードを実行した方が、図7で説明した変換コードから生成したオブジェクトコードを実行するよりも処理性能を向上させることができる場合も存在する。そのため、ソースコード134の記述されたループ等の処理の内容に応じて、図6で説明した変換コードから生成したオブジェクトコードと、図7で説明した変換コードから生成したオブジェクトコードとを使い分けることが好ましい。
そこで、本実施の形態における情報処理装置1(情報処理装置1のCPU)は、XFILL命令の対象のキャッシュラインの特定を、ソースコード134に含まれる多重ループにおける最内ループの現在までのイタレーション数(繰返し回数)に基づいて行うXFILL命令を含む変換コード(以下、第1変換コードとも呼ぶ)が実行された場合に、メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す値(以下、第1の値とも呼ぶ)を、ソースコード134に含まれる多重ループ毎に算出する。
具体的に、CPUは、図6で説明した変換方法によってソースコード134に含まれる多重ループを変換した第1変換コードを実行した場合における、メインメモリからのキャッシュラインの読み出し回数の削減割合を、第1の値として算出する。
また、本実施の形態におけるCPUは、XFILL命令の対象のキャッシュラインの特定を、ソースコード134に含まれる多重ループにおける最内ループの外側ループの現在までのイタレーション数に基づいて行うXFILL命令を含む変換コード(以下、第2変換コードとも呼ぶ)が実行された場合に、メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す値(以下、第2の値とも呼ぶ)を、ソースコード134に含まれる多重ループ毎に算出する。
具体的に、CPUは、図7で説明した変換方法によってソースコード134に含まれる多重ループを変換した第2変換コードを実行した場合における、メインメモリからのキャッシュラインの読み出し回数の削減割合を、第2の値として算出する。
さらに、本実施の形態におけるCPUは、ソースコード134に含まれる多重ループ毎に、第1の値と第2の値とを比較する。そして、CPUは、ソースコード134に含まれる多重ループのうち、第1の値が第2の値よりも大きい多重ループを第1変換コードに変換し、ソースコードに含まれる多重ループのうち、第2の値が第1の値よりも大きい多重ループを第2変換コードに変換する。
これにより、本実施の形態におけるCPUは、ソースコード134に含まれる多重ループのイタレーション数に応じて、各多重ループの変換方法を選択することが可能になる。そのため、CPUは、ソースコード134に含まれる多重ループのイタレーション数によらず、メインメモリからのキャッシュラインの読出し頻度を抑えることが可能になる。したがって、CPUは、キャッシュラインに対する書き込み動作に要する処理時間を短縮することが可能になる。また、CPUは、要求メモリスループットを下げることに伴う性能向上を実現することが可能になる。
[情報処理装置のハードウエア構成]
次に、情報処理装置1のハードウエア構成について説明する。図8は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、図8に示すように、プロセッサであるCPU101と、メインメモリ102(以下、単にメモリ102とも呼ぶ)と、外部インターフェース(I/Oユニット)103と、記憶媒体(ストレージ)104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、コンパイル処理及びコード実行処理を行うプログラム110を記憶する。
CPU101は、図8に示すように、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ102にロードし、プログラム110と協働することによってコンパイル処理を行う。
記憶媒体104は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、コンパイル処理等を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。
また、外部インターフェース103は、ネットワークを介して操作端末3と通信を行う。
[情報処理装置のソフトウエア構成]
次に、情報処理装置1のソフトウエア構成について説明する。図9は、情報処理装置1の機能のブロック図である。図10は、情報格納領域130に記憶された情報のブロック図である。
CPU101は、図9に示すように、プログラム110と協働することにより、第1情報算出部111と、第2情報算出部112と、情報判定部113と、コード変換部114と、情報管理部115と、コード生成部116と、コード実行部117として動作する。また、情報格納領域130には、図10に示すように、第1の値131と、第2の値132と、ループ情報133と、ソースコード134と、オブジェクトコード135が記憶されている。
なお、以下、第1情報算出部111、第2情報算出部112、情報判定部113、コード変換部114及び情報管理部115が、図2で説明したS3の処理の少なくとも一部を行うものとして説明を行う。また、コード生成部116が、図2で説明したS4の処理の少なくとも一部を行うものとして説明を行う。さらに、コード実行部117が、図3で説明したS12の処理の少なくとも一部を行うものとして説明を行う。
第1情報算出部111は、XFILL命令の対象のキャッシュラインの特定を、ソースコード134に含まれる多重ループにおける最内ループの現在までのイタレーション数に基づいて行うXFILL命令を含む変換コード(以下、第1変換コード134aとも呼ぶ)が実行された場合に、メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値131を、ソースコード134に含まれる多重ループ毎に算出する。
第2情報算出部112は、XFILL命令の対象のキャッシュラインの特定を、ソースコード134に含まれる多重ループにおける最内ループの外側ループの現在までのイタレーション数に基づいて行うXFILL命令を含む変換コード(以下、第2変換コード134bとも呼ぶ)が実行された場合に、メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値132を、ソースコード134に含まれる多重ループ毎に算出する。なお、最内ループの外側ループは、例えば、最内ループよりも1つ外側のループである。
情報判定部113は、ソースコード134に含まれる多重ループ毎に、第1情報算出部111が算出した第1の値131と、第2情報算出部112が算出した第2の値132との比較を行う。また、情報判定部113は、ソースコード134に含まれる多重ループ毎に、第1の値131及び第2の値132のそれぞれが所定の閾値よりも小さいか否かの判定を行う。
コード変換部114は、ソースコード134に含まれる多重ループのうち、情報判定部113が第2の値132よりも第1の値131の方が大きいと判定した多重ループのそれぞれを変換することによって、第2の値132よりも第1の値131の方が大きいと判定した多重ループ毎の第1変換コード134aを生成する。また、コード変換部114は、ソースコード134に含まれる多重ループのうち、情報判定部113が第1の値131よりも第2の値132の方が大きいと判定した多重ループのそれぞれを変換することによって、第1の値131よりも第2の値132の方が大きいと判定した多重ループ毎の第2変換コード134bを生成する。なお、コード変換部114は、ソースコード134に含まれる多重ループのうち、情報判定部113が第1の値131及び第2の値132のそれぞれが所定の閾値よりも小さいと判定した多重ループについては変換を行わない。
また、コード変換部114は、ソースコード134に含まれる多重ループに、第1の値131または第2の値132の算出に必要な全ての情報がソースコード134のコンパイル時(翻訳時)に取得できない多重ループが存在する場合、存在した多重ループ毎に、第1変換コード134aと、第2変換コード134bと、第1の値131及び第2の値132の算出を行う命令を含むコード(以下、情報算出コード134cとも呼ぶ)とを生成する。
情報管理部115は、例えば、情報格納領域130に記憶された各種情報の読み出し等を行う。
コード生成部116は、第1変換コード134aが生成されている場合、生成された第1変換コード134aのそれぞれからオブジェクトコード(以下、第1オブジェクトコード135aとも呼ぶ)を生成する。また、コード生成部116は、第2変換コード134bが生成されている場合、生成された第2変換コード134bのそれぞれからオブジェクトコード(以下、第2オブジェクトコード135bとも呼ぶ)を生成する。また、コード生成部116は、ソースコード134に含まれる多重ループのうち、必要な多重ループのそれぞれからオブジェクトコード(以下、第3オブジェクトコード135cとも呼ぶ)を生成する。さらに、コード生成部116は、情報算出コード134cが生成されている場合、生成された情報算出コード134cのそれぞれからオブジェクトコード135(以下、第4オブジェクトコード135dとも呼ぶ)を生成する。そして、コード生成部116は、例えば、生成した各オブジェクトコード135を情報格納領域130に記憶する。
コード実行部117は、例えば、コード実行タイミングになった場合、情報格納領域130に記憶された各オブジェクトコード135を実行する。なお、ループ情報133については後述する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。具体的に、図2で説明したS3及びS4の処理の概略について説明する。図11は、S3及びS4の処理の概略について説明するフローチャートである。
情報処理装置1のCPU101は、対象領域(XFILL命令の対象領域)の特定を、最内ループによる第1の命令(最内ループに含まれる命令)の現在までのイタレーション数に基づいて行う第2の命令(XFILL命令)を含む第1変換コード134aが実行された場合における第1の値131を、ソースコード134に含まれる多重ループ毎に算出する(S21)。
そして、CPU101は、対象領域の特定を、最内ループの外側ループに含まれる第1の命令の現在までのイタレーション数に基づいて行う第2の命令を含む第2変換コード134bが実行された場合における第2の値132を、ソースコード134に含まれる多重ループ毎に算出する(S22)。
その後、情報処理装置1は、ソースコード134に含まれる多重ループ毎に、S11の処理で算出した第1の値131が、S12の処理で算出した第2の値132よりも大きいか否かの判定を行う(S23)。
そして、CPU101は、ソースコード134に含まれる多重ループのうち、第1の値131が第2の値132よりも大きい多重ループのそれぞれを第1変換コード134aに変換し、ソースコード134に含まれる多重ループのうち、第2の値132が第1の値131よりも大きい多重ループのそれぞれを第2変換コード134bに変換する(S24)。
これにより、本実施の形態におけるCPUは、ソースコード134に含まれる多重ループのイタレーション数に応じて、各多重ループの変換方法を選択することが可能になる。そのため、CPUは、ソースコード134に含まれる多重ループのイタレーション数によらず、メモリ102からのキャッシュラインの読出し頻度を抑えることが可能になる。したがって、CPUは、キャッシュラインに対する書き込み動作に要する処理時間を短縮することが可能になる。また、CPUは、要求メモリスループットを下げることに伴う性能向上を実現することが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図12から図15は、第1の実施の形態におけるコンパイル処理及びコード実行処理の詳細を説明するフローチャートである。
[コンパイル処理(S3の処理)の詳細]
初めに、コンパイル処理の詳細について説明を行う。具体的に、図12から図14は、図2で説明したS3の処理の詳細について説明するフローチャートである。
情報処理装置1の情報管理部115は、図12に示すように、情報格納領域130に記憶されたループ情報133を参照し、ソースコード134に含まれるループを1つ特定する(S31)。ループ情報133は、ソースコード134に含まれるループのそれぞれを示す情報である。なお、ループ情報133は、例えば、ソースコード134から自動的に生成されて情報格納領域130に記憶されるものであってよい。
そして、情報管理部115は、S31の処理で特定したループのイタレーション数の特定が可能であるか否かの判定を行う(S32)。具体的に、情報管理部115は、例えば、S31の処理で特定したループのイタレーション数が定数である場合、S31の処理で特定したループのイタレーション数の特定が可能であると判定するものであってよい。
その結果、ループのイタレーション数の特定が可能でない場合(S32のNO)、情報管理部115は、ループ情報133に含まれる全ループの特定が行われたか否かの判定を行う(S35)。そして、ループ情報133に含まれる全ループの特定が行われていると判定した場合(S35のYES)、情報処理装置1は、S3の処理を終了する。
一方、ループ情報133に含まれる全ループの特定がまだ行われていないと判定した場合(S35のNO)、情報管理部115は、S31以降の処理を再度行う。すなわち、コード変換部114は、S31の処理で特定したループがイタレーション数を特定することができないループである場合、S31の処理で特定したループの変形を行わない旨の判定を行う。
また、S32の処理において、ループのイタレーション数の特定が可能である場合(S32のYES)、情報管理部115は、S31の処理で特定したループが多重ループであるか否かの判定を行う(S33)。
そして、S31の処理で特定したループが多重ループでないループ(1重ループ)であると判定した場合(S33のNO)、コード変換部114は、S31の処理で特定した多重ループから第1変換コード134aを生成し、情報格納領域130に記憶する(S34)。具体的に、コード変換部114は、例えば、図6で説明した変換方法に従って、XFILL命令の生成及び多重ループの分割を行う。
一方、S31の処理で特定したループが多重ループである場合(S33のYES)、コード変換部114は、図13に示すように、S31の処理で特定したループがコンパイル時にイタレーション数を特定することが可能なループであるか否かを判定する(S41)。具体的に、コード変換部114は、例えば、S31の処理で特定したループのイタレーション数がソースコード134に含まれる他の命令の実行に伴って決定する場合、S31の処理で特定したループがコンパイル時にイタレーション数を特定することが可能でないループであると判定するものであってよい。
その結果、S31の処理で特定したループがコンパイル時にイタレーション数を特定することが可能なループであると判定した場合(S41のYES)、第1情報算出部111は、第1の値131を算出する(S42)。以下、第1の値131の算出方法の具体例について説明を行う。
[第1の値の算出方法の具体例]
第1情報算出部111は、S42の処理において、例えば、以下の式(1)を用いることによって第1の値131の算出を行う。なお、式(1)において、hは、XFILL命令の実行に伴うレイテンシを隠蔽するために必要なイタレーション数を示す。さらに、nは、最内ループのイタレーション数を示す。
第1の値 = (n−h>0)?(n−h)/n:0 ・・・ (1)
具体的に、例えば、nが96であり、hが192である場合、第1情報算出部111は、第1の値131として0を算出する。
図13に戻り、第2情報算出部112は、第2の値132を算出する(S43)。以下、第2の値132の算出方法の具体例について説明を行う。
[第2の値の算出方法の具体例]
第2情報算出部112は、S43の処理において、例えば、以下の式(2)を用いることによって第2の値132の算出を行う。なお、式(2)において、hは、XFILL命令の実行に伴うレイテンシを隠蔽するために必要なイタレーション数を示す。また、nは、最内ループのイタレーション数を示す。また、mは、外側ループのイタレーション数を示す。さらに、ceil(x)は、x以上の最小の整数を算出する関数である。
第2の値 = (m−ceil(h/n))/m ・・・ (2)
具体的に、例えば、nが96であり、mが96であり、hが192である場合、第2情報算出部112は、第2の値132として0.969(有効数字小数点以下3桁)を算出する。
図13に戻り、情報判定部113は、S42の処理で算出した第1の値131と、S43の処理で算出した第2の値132とが所定の閾値以上であるか否かを判定する(S44)。
その結果、S42の処理で算出した第1の値131と、S43の処理で算出した第2の値132とが所定の閾値以上でないと判定した場合(S44のNO)、情報管理部115は、S35以降の処理を行う。すなわち、コード変換部114は、この場合、ループの変形を行うことによる効果が少ないと判定し、S31の処理で特定されたループの変換を行わない旨の判定を行う。
一方、S42の処理で算出した第1の値131と、S43の処理で算出した第2の値132とが所定の閾値以上であると判定した場合(S44のYES)、情報判定部113は、S43の処理で算出した第2の値132が、S42の処理で算出した第1の値131を上回っているか否かを判定する(S45)。
そして、S43の処理で算出した第2の値132が、S42の処理で算出した第1の値131を上回っていると判定した場合(S45のYES)、コード変換部114は、S31の処理で特定した多重ループから第2変換コード134bを生成し、情報格納領域130に記憶する(S46)。具体的に、コード変換部114は、例えば、図7で説明した変換方法に従って、XFILL命令の生成及び多重ループの分割を行う。その後、情報管理部115は、S35以降の処理を行う。
一方、S43の処理で算出した第2の値132が、S42の処理で算出した第1の値131を上回っていないと判定した場合(S45のNO)、コード変換部114は、S34以降の処理を行う。
すなわち、コード変換部114は、ソースコード134に含まれる多重ループ毎に、第1変換コード134aと第2変換コード134bとのうち、コードの変換による効果がより大きいと予測される変換コードの生成を行う。以下、S46の処理において行われるXFILL命令の生成の具体例について説明を行う。
[XFILL命令の生成の具体例]
コード変換部114は、S46の処理において、例えば、以下の式(3)及び(4)を用いることによって、XFILL命令の生成を行う。なお、式(3)及び(4)において、sは、キャッシュラインのサイズを示し、eは、sを多重ループに含まれる変数型サイズの最大値によって除算した値を示す。また、iは、最内ループのイタレーション数のカウンタ変数を示し、jは、外側ループのイタレーション数のカウンタ変数を示す。また、nは、最内ループのイタレーション数を示し、mは、外側ループのイタレーション数を示し、a(i,j)は、配列aのi,j要素のアドレスを示す。また、Dは、現在のイタレーションの配列先頭アドレスのsバイトアラインメントと、次のイタレーションの配列先頭アドレスのsバイトアラインメントとのずれの差分を示す。さらに、Mは、配列先頭アドレスのsバイトアラインメントとのずれを示す。
D=(mod(a(1,j+1),s)−mod(a(1,j),s))/多重ループに含まれる変数型サイズの最大値 ・・・ (3)
M=mod(a(1,1),s)/多重ループに含まれる変数型サイズの最大値 ・・・ (4)
そして、D=0であってM=0である場合、毎回先頭アラインメントがsバイトであるため、i=e*(k−1)+1、k=1,2,・・・,n/eの要素に対し、j+1に対応するアドレスを指定してXFILL命令を実行する。
また、D=0であってM!=0である場合、先頭ではないがアラインメントが毎回同じなので、i=(e−M)+e*(k−1)+1、k=1,2,・・・,(n−M)/eの要素に対し、j+1に対応するアドレスを指定してXFILL命令を実行する。
さらに、D!=0である場合、先頭アドレスにおいてsバイトアラインメントが保証されないので、i=(e−M)+mod(D*(j−1),e)+e*(k−1)+1、k=1,2,・・・,(n−M+mod(D*(m−1),e)−e)/eの要素に対し、j+1に対応するアドレスを指定してXFILL命令を実行する。
具体的に、s=256、e=32、n=96、m=96、D=0、かつ、M=0である場合、図7で説明した例のように、i=1,33,65、かつ、j+1となるa(i,j+1)に対してXFILL命令を実行する。
また、s=256、e=32、n=96、D=0、かつ、M=16である場合、i=17,49、かつ、j+1となるa(i,j+1)に対してXFILL命令を実行する。
さらに、s=256、e=32、n=96、D=3、かつ、M=16である場合、i={17,49}+mod(3(j−1),32)、かつ、j+1となるa(i,j+1)に対してXFILL命令を実行する。
図13に戻り、S31の処理で特定したループがコンパイル時にイタレーション数を特定することが可能でないループである場合(S41のNO)、コード変換部114は、図14に示すように、第1の値131及び第2の値132を生成する命令からなる情報算出コード134cを生成し、情報格納領域130に記憶する(S51)。また、コード変換部114は、第1変換コード134aを生成し、情報格納領域130に記憶する(S52)。さらに、コード変換部114は、第2変換コード134bを生成し、情報格納領域130に記憶する(S53)。
すなわち、この場合、情報処理装置1は、オブジェクトコード135の実行時においてソースコード134の変換方法を決定する必要がある。そのため、コード変換部114は、第1変換コード134a及び第2変換コード134bのそれぞれを予め生成する。また、コード変換部114は、第1の値131及び第2の値132を算出するために用いられる情報算出コード134cを予め生成する。
これにより、情報処理装置1は、コンパイル時においてソースコード134の変換方法を決定することができない場合であっても、メモリ102からのキャッシュラインの読出し頻度を抑えることが可能になる。
[コンパイル処理(S4の処理)の詳細]
次に、コンパイル処理の詳細について説明を行う。具体的に、図15は、図2で説明したS4の処理の詳細について説明するフローチャートである。
コード生成部116は、図15に示すように、情報格納領域130に記憶された第1変換コード134a、第2変換コード134b及び情報算出コード134cのそれぞれから、第1オブジェクトコード135a、第2オブジェクトコード135b及び第4オブジェクトコード135dを生成し、情報格納領域130に記憶する(S61)。
そして、コード生成部116は、例えば、情報格納領域130に記憶されたソースコード134に含まれるループのうち、コンパイル時にイタレーション数が特定できないループと、第1の値131及び第2の値132が閾値以上でないループとから、第3オブジェクトコード135cを生成し、情報格納領域130に記憶する(S62)。
これにより、コード生成部116は、第1オブジェクトコード135a、第2オブジェクトコード135b及び第4オブジェクトコード135dだけでなく、ソースコード134に含まれる多重ループ(コード変換部114によって変換されていない多重ループ)から生成される第3オブジェクトコード135cについても併せて生成することが可能になる。
[コード実行処理の詳細]
次に、コード実行処理の詳細について説明を行う。具体的に、図16から図18は、図3で説明したS12の処理の詳細について説明するフローチャートである。
コード実行部117は、図16に示すように、情報格納領域130に記憶されたループ情報133を参照し、ソースコード134に含まれるループを1つ特定する(S71)。
そして、S71の処理で特定したループのイタレーション数がコンパイル時に特定されているか否かを判定する(S72)。
その結果、S71の処理で特定したループのイタレーション数がコンパイル時に特定されていると判定した場合(S72のYES)、コード実行部117は、S61及びS62の処理で生成されたオブジェクトコード135のうち、S71の処理で特定したループに対応するオブジェクトコード135を実行する(S73)。
すなわち、S71の処理で特定したループのイタレーション数がコンパイル時に特定されている場合、情報格納領域130には、S71の処理で特定したループに対応するオブジェクトコード135として、第1オブジェクトコード135a、第2オブジェクトコード135b及び第3オブジェクトコード135cのうちのいずれか1つが記憶されている。そのため、コード実行部117は、この場合、第1オブジェクトコード135a、第2オブジェクトコード135b及び第3オブジェクトコード135cのうちのいずれか1つを実行する。
その後、コード実行部117は、S71の処理において、ループ情報133に含まれる全ループの特定が行われたか否かの判定を行う(S74)。
その結果、ループ情報133に含まれる全ループの特定が行われたと判定した場合(S74のYES)、情報処理装置1は、S12の処理を終了する。一方、ループ情報133に含まれる全ループの特定がまだ行われていないと判定した場合(S74のNO)、コード実行部117は、S71以降の処理を再度行う。
また、S72の処理において、S71の処理で特定したループのイタレーション数がコンパイル時に特定されていないと判定した場合(S72のNO)、コード実行部117は、図17に示すように、S61の処理において情報算出コード134cから生成された第4オブジェクトコード135dのうち、S71の処理で特定したループに対応するオブジェクトコード135を実行する(S81)。
すなわち、S71の処理で特定したループのイタレーション数がコンパイル時に特定されていない場合、情報格納領域130には、S71の処理で特定したループに対応するオブジェクトコード135として、第1オブジェクトコード135a、第2オブジェクトコード135b、第3オブジェクトコード135c及び第4オブジェクトコード135dが記憶されている。そのため、コード実行部117は、コード実行処理における他のオブジェクトコードの実行等に伴って、第1の値131及び第2の値132を算出するために必要な全ての情報が特定された場合、S71の処理で特定したループに対応する第4オブジェクトコード135dの実行を行う。
これにより、コード実行部117は、コンパイル時においては算出することができなかった第1の値131及び第2の値132の算出を行うことが可能になる。
その後、コード実行部117は、S81の処理で算出した第1の値131と第2の値132とが所定の閾値以上であるか否かを判定する(S82)。
その結果、算出した第1の値131と第2の値132とが所定の閾値以上でないと判定した場合(S82のNO)、コード実行部117は、S62の処理で生成した第3オブジェクトコード135cのうち、S71の処理で特定したループに対応する第3オブジェクトコード135cを実行する(S83)。
一方、S81の処理で算出した第1の値131と第2の値132とが所定の閾値以上であると判定した場合(S82のYES)、コード実行部117は、図18に示すように、S81の処理で算出した第2の値132が第1の値131を上回っているか否かを判定する(S91)。
そして、第2の値132が第1の値131を上回っていないと判定した場合(S91のNO)、コード実行部117は、S61の処理において第1変換コード134aから生成された第1オブジェクトコード135aのうち、S71の処理で特定したループに対応する第1オブジェクトコード135aを実行する(S92)。
一方、第2の値132が第1の値131を上回っていると判定した場合(S91のYES)、コード実行部117は、S61の処理において第2変換コード134bから生成された第2オブジェクトコード135bのうち、S71の処理で特定したループに対応する第2オブジェクトコード135bを実行する(S93)。
これにより、本実施の形態におけるCPUは、ソースコード134に含まれる多重ループのイタレーション数に応じて、各多重ループの変換方法を選択することが可能になる。そのため、CPUは、ソースコード134に含まれる多重ループのイタレーション数によらず、メモリ102からのキャッシュラインの読出し頻度を抑えることが可能になる。したがって、CPUは、キャッシュラインに対する書き込み動作に要する処理時間を短縮することが可能になる。また、CPUは、要求メモリスループットを下げることに伴う性能向上を実現することが可能になる。
[第2の実施の形態]
次に、第2の実施の形態におけるコンパイル処理について説明を行う。図19は、第2の実施の形態におけるコンパイル処理を説明するフローチャートである。
第2の実施の形態における情報処理装置1のCPU101は、多重ループ(以下、第1ループとも呼ぶ)における書き込み領域サイズがキャッシュラインサイズよりも大きい場合、第1ループにおける書き込み領域サイズがキャッシュラインに収まるループ(以下、第2ループとも呼ぶ)と、第2ループ以外のループ(以下、第3ループとも呼ぶ)とに分割する。そして、CPU101は、この場合、第2ループの書き込み領域サイズに対してのみ、XFILL命令の生成を行う。
これにより、CPU101は、XFILL命令の実行に伴って、メモリ102に記憶されたデータが破壊されることを防止することが可能になる。
以下、第2の実施の形態におけるコンパイラ処理について説明を行う。なお、第1の実施の形態におけるコンパイラ処理と第2の実施の形態におけるコンパイラ処理とは、例えば、図13で説明したS46の処理のみが異なる。そのため、以下、第2の実施の形態におけるS46の処理についてのみ説明を行う。
[第2の実施の形態におけるS46の処理]
コード変換部114は、図19に示すように、S31の処理で特定した第1ループにおける書き込み領域サイズを特定する(S101)。
そして、S101の処理で特定した書き込み領域サイズがキャッシュラインよりも大きい場合(S102のYES)、コード変換部114は、S31の処理で特定した第1ループを、S101の処理で特定した書き込み領域サイズが1以上のキャッシュラインサイズで収まる第2ループと、第2ループ以外の第3ループとに分割する(S103)。その後、コード変換部114は、S103の処理で分割した第2ループに対して実行されるXFILL命令を含む第2変換コード134bを生成し、情報格納領域130に記憶する(S104)。
一方、S101の処理で特定した書き込み領域サイズがキャッシュラインよりも大きくない場合(S102のNO)、コード変換部114は、S103及びS104の処理を行わない。
具体的に、キャッシュラインサイズが256バイトである場合、第1ループに含まれる倍精度実数型の配列aの要素は、1つのキャッシュライン上に32要素配置される。そのため、例えば、配列aの1次元目の要素数が126である場合、コード変換部114は、1つのキャッシュライン上に配置される32要素の整数倍の要素である96要素に対応する第2ループと、1つのキャッシュライン上に配置される32要素未満の要素である30要素に対応する第3ループとに分割する。そして、コード変換部114は、第2ループに対してのみXFILL命令を生成する。
これにより、CPU101は、XFILL命令の実行に伴って、メモリ102に記憶されたデータ(配列a以外のデータ)が破壊されることを防止することが可能になる。
以上の実施の形態をまとめると、以下の付記の通りである。
(付記1)
ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換するコンパイラであって、
前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出し、
前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出し、
前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較し、
前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換する、
処理をコンピュータに実行させることを特徴するコンパイラ。
(付記2)
付記1において、
前記変換する処理では、前記ソースコードに含まれる多重ループのうち、前記第1の値と前記第2の値とが等しい多重ループを前記第1変換コードまたは前記第2変換コードに変換する、
ことを特徴するコンパイラ。
(付記3)
付記1において、
前記変換する処理では、前記ソースコードに含まれる多重ループのうち、前記第1の値及び前記第2の値が所定の閾値よりも小さい多重ループの変換を行わない、
ことを特徴するコンパイラ。
(付記4)
付記1において、
前記第1変換コードに含まれる前記第2の命令は、前記最内ループによる前記第1の命令の現在までの繰返し回数よりも第1の回数後の前記第1の命令に対応するキャッシュラインが書き込まれる前記対象領域に対し、前記所定のデータを書き込む命令であり、
前記第1の値を算出する処理では、前記第1の回数を前記最内ループによるループ回数で除算することにより、前記第1の値を算出する、
ことを特徴するコンパイラ。
(付記5)
付記1において、
前記第2変換コードに含まれる前記第2の命令は、前記外側ループによる前記第1の命令の現在までの繰返し回数よりも第2の回数後の前記第1の命令に対応するキャッシュラインが書き込まれる前記対象領域に対し、前記所定のデータを書き込む命令であり、
前記第1の値を算出する処理では、前記第1の回数を前記最内ループによるループ回数で除算することにより、前記第1の値を算出する、
ことを特徴するコンパイラ。
(付記6)
付記1において、
前記第1の値を算出する処理では、前記第1の値の算出に要する情報の全てが取得可能である場合に、前記第1の値の算出を行い、
前記第2の値を算出する処理では、前記第2の値の算出に要する情報の全てが取得可能である場合に、前記第2の値の算出を行い、
前記変換する処理では、前記第1の値または前記第2の値の算出が行われていない場合、前記ソースコードに含まれる多重ループ毎に、前記第1変換コードと、前記第2変換コードと、前記第1の値及び前記第2の値の算出を行う命令を含む情報算出コードと、を生成する、
ことを特徴するコンパイラ。
(付記7)
付記1において、
前記変換する処理では、
前記ソースコードに含まれる多重ループ毎に、前記多重ループの書き込み領域サイズと、前記キャッシュラインのサイズとを比較し、
前記ソースコードに含まれる多重ループ毎のうち、書き込み領域サイズが前記キャッシュラインのサイズより大きい第1ループを、前記第1ループの書き込み領域サイズが1以上の前記キャッシュラインのサイズに収まる第2ループと、前記第2ループ以外の第3ループとに分割し、
前記第2ループの書き込み領域サイズに対して前記第2の命令を実行するように、前記第1ループを前記第1変換コードまたは前記第2変換コードに変換する、
ことを特徴するコンパイラ。
(付記8)
ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換する情報処理装置であって、
前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出する第1情報算出部と、
前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出する第2情報算出部と、
前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較する情報判定部と、
前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換するコード変換部と、を有する、
ことを特徴する情報処理装置。
(付記9)
付記8において、
前記コード変換部は、
前記ソースコードに含まれる多重ループ毎に、前記多重ループの書き込み領域サイズと、前記キャッシュラインのサイズとを比較し、
前記ソースコードに含まれる多重ループ毎のうち、書き込み領域サイズが前記キャッシュラインのサイズより大きい第1ループを、前記第1ループの書き込み領域サイズが1以上の前記キャッシュラインのサイズに収まる第2ループと、前記第2ループ以外の第3ループとに分割し、
前記第2ループの書き込み領域サイズに対して前記第2の命令を実行するように、前記第1ループを前記第1変換コードまたは前記第2変換コードに変換する、
ことを特徴する情報処理装置。
(付記10)
ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換するコンパイル方法であって、
前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出し、
前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出し、
前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較し、
前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換する、
ことを特徴するコンパイル方法。
(付記11)
付記10において、
前記変換する工程では、
前記ソースコードに含まれる多重ループ毎に、前記多重ループの書き込み領域サイズと、前記キャッシュラインのサイズとを比較し、
前記ソースコードに含まれる多重ループ毎のうち、書き込み領域サイズが前記キャッシュラインのサイズより大きい第1ループを、前記第1ループの書き込み領域サイズが1以上の前記キャッシュラインのサイズに収まる第2ループと、前記第2ループ以外の第3ループとに分割し、
前記第2ループの書き込み領域サイズに対して前記第2の命令を実行するように、前記第1ループを前記第1変換コードまたは前記第2変換コードに変換する、
ことを特徴するコンパイル方法。
1:情報処理装置 2:記憶装置
3:操作端末 101:CPU
102:メモリ 103:I/Oユニット
104:記憶媒体 130:情報格納領域

Claims (9)

  1. ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換するコンパイラであって、
    前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出し、
    前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出し、
    前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較し、
    前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換する、
    処理をコンピュータに実行させることを特徴するコンパイラ。
  2. 請求項1において、
    前記変換する処理では、前記ソースコードに含まれる多重ループのうち、前記第1の値と前記第2の値とが等しい多重ループを前記第1変換コードまたは前記第2変換コードに変換する、
    ことを特徴するコンパイラ。
  3. 請求項1において、
    前記変換する処理では、前記ソースコードに含まれる多重ループのうち、前記第1の値及び前記第2の値が所定の閾値よりも小さい多重ループの変換を行わない、
    ことを特徴するコンパイラ。
  4. 請求項1において、
    前記第1変換コードに含まれる前記第2の命令は、前記最内ループによる前記第1の命令の現在までの繰返し回数よりも第1の回数後の前記第1の命令に対応するキャッシュラインが書き込まれる前記対象領域に対し、前記所定のデータを書き込む命令であり、
    前記第1の値を算出する処理では、前記第1の回数を前記最内ループによるループ回数で除算することにより、前記第1の値を算出する、
    ことを特徴するコンパイラ。
  5. 請求項1において、
    前記第2変換コードに含まれる前記第2の命令は、前記外側ループによる前記第1の命令の現在までの繰返し回数よりも第2の回数後の前記第1の命令に対応するキャッシュラインが書き込まれる前記対象領域に対し、前記所定のデータを書き込む命令であり、
    前記第1の値を算出する処理では、前記第1の回数を前記最内ループによるループ回数で除算することにより、前記第1の値を算出する、
    ことを特徴するコンパイラ。
  6. 請求項1において、
    前記第1の値を算出する処理では、前記第1の値の算出に要する情報の全てが取得可能である場合に、前記第1の値の算出を行い、
    前記第2の値を算出する処理では、前記第2の値の算出に要する情報の全てが取得可能である場合に、前記第2の値の算出を行い、
    前記変換する処理では、前記第1の値または前記第2の値の算出が行われていない場合、前記ソースコードに含まれる多重ループ毎に、前記第1変換コードと、前記第2変換コードと、前記第1の値及び前記第2の値の算出を行う命令を含む情報算出コードと、を生成する、
    ことを特徴するコンパイラ。
  7. 請求項1において、
    前記変換する処理では、
    前記ソースコードに含まれる多重ループ毎に、前記多重ループの書き込み領域サイズと、前記キャッシュラインのサイズとを比較し、
    前記ソースコードに含まれる多重ループ毎のうち、書き込み領域サイズが前記キャッシュラインのサイズより大きい第1ループを、前記第1ループの書き込み領域サイズが1以上の前記キャッシュラインのサイズに収まる第2ループと、前記第2ループ以外の第3ループとに分割し、
    前記第2ループの書き込み領域サイズに対して前記第2の命令を実行するように、前記第1ループを前記第1変換コードまたは前記第2変換コードに変換する、
    ことを特徴するコンパイラ。
  8. ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換する情報処理装置であって、
    前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出する第1情報算出部と、
    前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出する第2情報算出部と、
    前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較する情報判定部と、
    前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換するコード変換部と、を有する、
    ことを特徴する情報処理装置。
  9. ソースコードに含まれる多重ループのうちの最内ループに含まれる第1の命令が実行される際に、前記最内ループによる所定回数先の前記第1の命令の実行に伴ってメインメモリから読み出されるキャッシュラインが書き込まれるキャッシュメモリ内の対象領域に対し、所定のデータを書き込む第2の命令が実行されるように、前記ソースコードを変換するコンパイル方法であって、
    前記対象領域の特定を、前記最内ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第1変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第1の値を、前記ソースコードに含まれる多重ループ毎に算出し、
    前記対象領域の特定を、前記最内ループの外側ループによる前記第1の命令の現在までの繰返し回数に基づいて行う前記第2の命令を含む第2変換コードが実行された場合に、前記メインメモリからのキャッシュラインの読み出し回数が削減される割合を示す第2の値を、前記ソースコードに含まれる多重ループ毎に算出し、
    前記ソースコードに含まれる多重ループ毎に、前記第1の値と前記第2の値とを比較し、
    前記ソースコードに含まれる多重ループのうち、前記第1の値が前記第2の値よりも大きい多重ループを前記第1変換コードに変換し、前記ソースコードに含まれる多重ループのうち、前記第2の値が前記第1の値よりも大きい多重ループを前記第2変換コードに変換する、
    ことを特徴するコンパイル方法。
JP2017112473A 2017-06-07 2017-06-07 コンパイラ、情報処理装置及びコンパイル方法 Pending JP2018206175A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017112473A JP2018206175A (ja) 2017-06-07 2017-06-07 コンパイラ、情報処理装置及びコンパイル方法
US15/997,738 US10452368B2 (en) 2017-06-07 2018-06-05 Recording medium having compiling program recorded therein, information processing apparatus, and compiling method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017112473A JP2018206175A (ja) 2017-06-07 2017-06-07 コンパイラ、情報処理装置及びコンパイル方法

Publications (1)

Publication Number Publication Date
JP2018206175A true JP2018206175A (ja) 2018-12-27

Family

ID=64564112

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017112473A Pending JP2018206175A (ja) 2017-06-07 2017-06-07 コンパイラ、情報処理装置及びコンパイル方法

Country Status (2)

Country Link
US (1) US10452368B2 (ja)
JP (1) JP2018206175A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112394940A (zh) * 2020-11-18 2021-02-23 平安普惠企业管理有限公司 转换代码语法的方法、装置和计算机设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282231A (ja) * 1996-04-17 1997-10-31 Toshiba Corp ライトバック型キャッシュ装置
JP2005322110A (ja) * 2004-05-11 2005-11-17 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP2010128960A (ja) * 2008-11-28 2010-06-10 Internatl Business Mach Corp <Ibm> プリフェッチ命令生成方法、コンパイラ、及びプログラム
JP2011138213A (ja) * 2009-12-25 2011-07-14 Fujitsu Ltd 演算処理装置、情報処理装置及びキャッシュメモリ制御方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10207772A (ja) 1997-01-23 1998-08-07 Hitachi Ltd キャッシュミス予測方法
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US7949831B2 (en) * 2007-11-02 2011-05-24 Oracle America, Inc. Maintaining cache coherence using load-mark metadata to deny invalidation of load-marked cache lines
JP5157424B2 (ja) * 2007-12-26 2013-03-06 富士通セミコンダクター株式会社 キャッシュメモリシステム及びキャッシュメモリの制御方法
WO2010010515A1 (en) * 2008-07-23 2010-01-28 Nxp B.V. Adjustment of a processor frequency
US8131931B1 (en) * 2008-10-22 2012-03-06 Nvidia Corporation Configurable cache occupancy policy
US10713202B2 (en) * 2016-05-25 2020-07-14 Samsung Electronics Co., Ltd. Quality of service (QOS)-aware input/output (IO) management for peripheral component interconnect express (PCIE) storage system with reconfigurable multi-ports

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282231A (ja) * 1996-04-17 1997-10-31 Toshiba Corp ライトバック型キャッシュ装置
JP2005322110A (ja) * 2004-05-11 2005-11-17 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP2010128960A (ja) * 2008-11-28 2010-06-10 Internatl Business Mach Corp <Ibm> プリフェッチ命令生成方法、コンパイラ、及びプログラム
JP2011138213A (ja) * 2009-12-25 2011-07-14 Fujitsu Ltd 演算処理装置、情報処理装置及びキャッシュメモリ制御方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112394940A (zh) * 2020-11-18 2021-02-23 平安普惠企业管理有限公司 转换代码语法的方法、装置和计算机设备
CN112394940B (zh) * 2020-11-18 2024-02-20 内蒙古九有信创科技有限公司 转换代码语法的方法、装置和计算机设备

Also Published As

Publication number Publication date
US20180357053A1 (en) 2018-12-13
US10452368B2 (en) 2019-10-22

Similar Documents

Publication Publication Date Title
US9996696B2 (en) Systems and methods to optimize execution of a software program using a type based self assembling control flow graph
KR101081090B1 (ko) 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
US9465675B2 (en) Communication control device, information processing apparatus, parallel computer system, and control method for parallel computer system
US20150331677A1 (en) Compiling method and compiling device
US10496408B2 (en) Information processing apparatus and conversion method
US20150293768A1 (en) Compiling method and compiling apparatus
US10353682B2 (en) Information processing device, storage medium, and method
JP7060803B2 (ja) 情報処理装置、コンパイラプログラム及びコンパイル方法
JP2018206175A (ja) コンパイラ、情報処理装置及びコンパイル方法
US11307991B2 (en) Apparatus and method and computer program product for generating a storage mapping table
US10353708B2 (en) Strided loading of non-sequential memory locations by skipping memory locations between consecutive loads
US20140157248A1 (en) Conversion apparatus, method of converting, and non-transient computer-readable recording medium having conversion program stored thereon
JP2019021070A (ja) 情報処理装置、情報処理方法、及びプログラム
US9535826B2 (en) Automatic communication and optimization of multi-dimensional arrays for many-core coprocessor using static compiler analysis
US20090019225A1 (en) Information processing apparatus and information processing system
JP2018124877A (ja) コード生成装置、コード生成方法、およびコード生成プログラム
US20220405110A1 (en) Non-transitory computer-readable recording medium and compilation method
JP6898556B2 (ja) 情報処理装置、コンパイル方法及びコンパイルプログラム
JP2020140284A (ja) ベクトル演算処理装置、ベクトル演算処理装置による配列変数初期化方法、及び、ベクトル演算処理装置による配列変数初期化プログラム
US9552197B2 (en) Computer-readable recording medium storing information processing program, information processing apparatus, and information processing method
JP2019185486A (ja) コード変換装置、コード変換方法、及びコード変換プログラム
JP7239827B2 (ja) 情報処理装置及びコンパイラプログラム
JP7168731B1 (ja) メモリアクセス制御装置、メモリアクセス制御方法、及び、メモリアクセス制御プログラム
JP2014099108A (ja) 実行時間算出装置、実行時間算出方法、およびプログラム
JP6974722B2 (ja) コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210302

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210308

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210810

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20220301