JP2019219912A - 情報処理装置、コンパイラプログラム及びコンパイル方法 - Google Patents

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

Info

Publication number
JP2019219912A
JP2019219912A JP2018116777A JP2018116777A JP2019219912A JP 2019219912 A JP2019219912 A JP 2019219912A JP 2018116777 A JP2018116777 A JP 2018116777A JP 2018116777 A JP2018116777 A JP 2018116777A JP 2019219912 A JP2019219912 A JP 2019219912A
Authority
JP
Japan
Prior art keywords
dimensional
data
array
length array
stored
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018116777A
Other languages
English (en)
Other versions
JP7060803B2 (ja
Inventor
智子 新幸
Tomoko Shinko
智子 新幸
修一 千葉
Shuichi Chiba
修一 千葉
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 JP2018116777A priority Critical patent/JP7060803B2/ja
Priority to US16/421,534 priority patent/US11231917B2/en
Publication of JP2019219912A publication Critical patent/JP2019219912A/ja
Application granted granted Critical
Publication of JP7060803B2 publication Critical patent/JP7060803B2/ja
Active 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/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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
    • G06F8/4434Reducing the memory space required by the program code

Abstract

【課題】キャッシュヒット率の低下を抑制することを可能とするオブジェクトコードを生成することを可能とする情報処理装置、コンパイラプログラム及びコンパイル方法を提供する。【解決手段】ソースコードのコンパイルを実行してオブジェクトコードを生成する情報処理装置は、N(Nは2以上の整数)次元の可変長配列に対する特定データの格納を行う命令がソースコードに含まれている場合、N次元の可変長配列に代えて、N次元の固定長配列に対して特定データを格納するように、オブジェクトコードを生成する格納先変更部と、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令がソースコードに含まれている場合、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、オブジェクトコードを生成するアクセス先変更部と、を有する。【選択図】図6

Description

本発明は、情報処理装置、コンパイラプログラム及びコンパイル方法に関する。
例えば、C++によって記述されたソースコードのコンパイルを行うコンパイラ(以下、コンパイルプログラムとも呼ぶ)は、指定されたソースコードを入力とすることによってオブジェクトコードの生成を行う。具体的に、コンパイラは、例えば、ソースコードに含まれる構文や意味の解析を行うことによって、指定されたソースコードから中間言語の生成を行う。そして、コンパイラは、例えば、生成された中間言語の最適化を行い、最適化された中間言語からオブジェクトコードの生成を行う。これにより、コンパイルは、オブジェクトコードの実行時間の短縮や実行時における使用リソースの削減等を図ることが可能になる(例えば、特許文献1乃至3参照)。
特開2008−217134号公報 特開2007−328692号公報 特開2004−362216号公報
ここで、上記のようなソースコードには、例えば、不連続なメモリ領域に格納されたデータ(例えば、2次元以上の可変長配列に格納されたデータ)に対するアクセスを行う命令が含まれている場合がある。そして、このようなソースコードから生成されたオブジェクトコードが実行される場合、CPUでは、キャッシュミスが頻発して命令の実行効率が低下する可能性がある。
そのため、上記のようなコンパイラは、不連続なメモリ領域に格納されたデータのそれぞれに対するアクセスを要する命令が含まれているソースコードであっても、キャッシュヒット率の低下を抑制することを可能とするオブジェクトコードを生成することが好ましい。
そこで、一つの側面では、本発明は、キャッシュヒット率の低下を抑制することを可能とするオブジェクトコードを生成することを可能とする情報処理装置、コンパイラプログラム及びコンパイル方法を提供することを目的とする。
実施の形態の一態様では、ソースコードのコンパイルを実行してオブジェクトコードを生成する情報処理装置は、N(Nは2以上の整数)次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成する格納先変更部と、前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成するアクセス先変更部と、を有する。
一つの側面によれば、キャッシュヒット率の低下を抑制することを可能とするオブジェクトコードを生成することを可能とする。
図1は、情報処理システム10の構成を示す図である。 図2は、情報処理システム10の構成を示す図である。 図3は、情報処理システム10の構成を示す図である。 図4は、情報処理装置1のハードウエア構成を説明する図である。 図5は、情報処理装置1の機能のブロック図である。 図6は、第1の実施の形態におけるコンパイル処理の概略を説明するフローチャート図である。 図7は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。 図8は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。 図9は、2次元の可変長配列の具体例を説明する図である。 図10は、2次元の固定長配列の具体例を説明する図である。 図11は、1次元の固定長配列の具体例を説明する図である。 図12は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図13は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図14は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図16は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図17は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図18は、ソースコード131bの具体例を説明する具体例である。 図19は、S25の処理で更新された命令の実行時における具体例について説明する図である。 図20は、S25の処理で更新された命令の実行時における具体例について説明する図である。 図21は、アドレス情報135の具体例について説明する図である。 図22は、S32の処理で更新された命令の実行時における具体例について説明する図である。 図23は、S32の処理で更新された命令の実行時における具体例について説明する図である。 図24は、S32の処理で更新された命令の実行時における具体例について説明する図である。
[情報処理システムの構成]
図1から図3は、情報処理システム10の構成を示す図である。図1から図3に示す情報処理システム10は、情報処理装置1と、操作端末3とを有する。
情報処理装置1では、例えば、CPU(図示しない)と各種プログラムとが有機的に協働することにより、コンパイラ11と、リンカ12とを含む各種機能を実現する。
コンパイラ11は、例えば、情報格納領域130に記憶されたソースコード131からオブジェクトコード133を生成する。コンパイラ11は、例えば、ソースコード131に含まれる構文や字句の意味を解析することによって、ソースコード131から中間言語132を生成する解析部11aと、解析部11aが生成した中間言語132の最適化を行う最適化部11bと、最適化部11bが最適化を行った中間言語132からオブジェクトコード133を生成するコード生成部11cとを有する。
具体的に、解析部11aは、例えば、図1に示すように、ライブラリのソースコード131(以下、ソースコード131aとも呼ぶ)からライブラリの中間言語132(以下、中間言語132aとも呼ぶ)を生成する。そして、コード生成部11cは、最適化部11bが最適化を行った中間言語132aからライブラリのオブジェクトコード133(以下、オブジェクトコード133aとも呼ぶ)を生成して情報格納領域130に記憶する。
また、解析部11aは、例えば、図2に示すように、アプリケーションのソースコード131(以下、ソースコード131bとも呼ぶ)からアプリケーションの中間言語132(以下、中間言語132b)を生成する。そして、コード生成部11cは、最適化部11bが最適化を行った中間言語132bからアプリケーションのオブジェクトコード133(以下、オブジェクトコード133bとも呼ぶ)を生成して情報格納領域130に記憶する。
リンカ12は、例えば、図3に示すように、ソースコード131aから生成されたオブジェクトコード133aと、ソースコード131bから生成されたオブジェクトコード133bとをリンクさせることにより、実行ファイル134を生成する。
ここで、上記のようなソースコード131bには、例えば、不連続なメモリ領域に格納されたデータ(例えば、2次元以上の可変長配列に格納されたデータ)に対するアクセスを行う命令が含まれている場合がある。そして、このようなソースコード131bから生成されたオブジェクトコード133bが実行される場合、情報処理装置1のCPU(図示しない)では、キャッシュミスが頻発して命令の実行効率が低下する可能性がある。
そのため、上記のようなコンパイラ11は、不連続なメモリ領域に格納されたデータのそれぞれに対するアクセスを要する命令が含まれているソースコード131bであっても、キャッシュヒット率の低下を抑制することを可能とするオブジェクトコード133bを生成することが好ましい。
そこで、本実施の形態におけるコンパイラ11は、ソースコード131bのコンパイル時において、N(Nは2以上の整数)次元の可変長配列に対するデータ(以下、特定データとも呼ぶ)の格納を行う命令がソースコード131bに含まれている場合、N次元の可変長配列に代えて、N次元の固定長配列に対して特定データを格納するように、オブジェクトコード133bを生成する。
また、コンパイラ11は、ソースコード131bのコンパイル時において、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令がソースコード131bに含まれている場合、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納し、1次元の固定長配列に格納されたデータに対して順にアクセスが行われるように、オブジェクトコード133bを生成する。
すなわち、本実施の形態におけるコンパイラ11は、N次元の可変長配列に対してデータを格納する旨の命令がソースコード131に含まれている場合、N次元の可変長配列に対してデータを格納する旨の命令を、1次元の固定長配列に対して連続してデータを格納する旨の命令に変換してオブジェクトコード133を生成する。
これにより、コンパイラ11は、不連続なメモリ領域に格納されたデータに対するアクセスの発生を抑制したオブジェクトコード133bを生成することが可能になる。そのため、コンパイラ11は、実行時におけるキャッシュヒット率が高いオブジェクトコード133bを生成することが可能になる。
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。図4は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、プロセッサであるCPU101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、例えば、ソースコード131のコンパイルを行う処理(以下、コンパイル処理とも呼ぶ)を行うためのプログラム110を記憶するプログラム格納領域(図示しない)を有する。また、記憶媒体104は、例えば、コンパイル処理を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、記憶媒体104は、例えば、HDD(Hard Disk Drive)であってよい。
CPU101は、記憶媒体104からメモリ102にロードされたプログラム110を実行してコンパイル処理を行う。
また、外部インターフェース103は、例えば、操作端末3と通信を行う。
[情報処理システムの機能]
次に、情報処理システム10の機能について説明を行う。図5は、情報処理装置1の機能のブロック図である。
情報処理装置1は、図5に示すように、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、コンパイラ11の解析部11aの機能として、配列特定部111を実現する。また、情報処理装置1は、図5に示すように、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、コンパイラ11の最適化部11bの機能として、型変換部112と、格納先変更部113と、アクセス先変更部114を実現する。
さらに、情報処理装置1は、図5に示すように、ソースコード131と、中間言語132と、オブジェクトコード133と、実行ファイル134と、アドレス情報135とを情報格納領域130に記憶する。なお、以下、ソースコード131には、図1等で説明したソースコード131a及びソースコード131bが含まれ、中間言語132には、図1等で説明した中間言語132a及び中間言語132bが含まれ、オブジェクトコード133には、図1等で説明したオブジェクトコード133a及びオブジェクトコード133bが含まれるものとして説明を行う。
解析部11aの配列特定部111は、情報格納領域130に記憶されたソースコード131bの記述から、N次元の可変長配列の宣言と、N次元の可変長配列に対するデータの格納を行う命令と、N次元の可変長配列に格納されているデータに対して順にアクセスを行う命令とを特定する。
最適化部11bの型変換部112は、配列特定部111がN次元の可変長配列の宣言等を特定した場合、解析部11aがソースコード131bから生成した中間言語132bに含まれるN次元の可変長配列を、N次元の固定長配列に変換する。
最適化部11bの格納先変更部113は、配列特定部111がN次元の可変長配列の宣言等を特定した場合、N次元の可変長配列に代えて、N次元の固定長配列に対してデータを格納するように、解析部11aが生成した中間言語132bの更新を行う。
最適化部11bのアクセス先変更部114は、配列特定部111がN次元の可変長配列の宣言等を特定した場合、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納し、1次元の固定長配列に格納されたデータに対して順にアクセスが行われるように、解析部11aが生成した中間言語132bの更新を行う。アドレス情報135についての説明は後述する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。図6は、第1の実施の形態におけるコンパイル処理の概略を説明するフローチャート図である。また、図7及び図8は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。
コンパイラ11は、図6に示すように、ソースコード131bのコンパイルの開始タイミングになるまで待機する(S1のNO)。具体的に、コンパイラ11は、例えば、コンパイルを行う担当者(以下、単に担当者とも呼ぶ)が操作端末3を介してソースコード131bのコンパイルを行う旨の指示を入力するまで待機する。
そして、ソースコード131bのコンパイルの開始タイミングになった場合(S1のYES)、コンパイラ11は、N次元の可変長配列に対する特定データの格納を行う命令がソースコード131b(中間言語132b)に含まれているか否かを判定する(S2)。
その結果、N次元の可変長配列に対する特定データの格納を行う命令が含まれていると判定した場合(S3のYES)、コンパイラ11は、N次元の可変長配列に代えて、N次元の固定長配列に対して特定データを格納するように、ソースコード131b(中間言語132b)からオブジェクトコード133bを生成する(S4)。
続いて、コンパイラ11は、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令がソースコード131bに含まれているか否かを判定する(S5)。
その結果、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が含まれていると判定した場合(S6のYES)、コンパイラ11は、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納し、1次元の固定長配列に格納されたデータに対して順にアクセスが行われるように、オブジェクトコード133bを生成する(S7)。
すなわち、コンパイラ11の最適化部11bは、図7に示すように、コンパイラ11の解析部11aが生成した中間言語132bに、N次元の可変長配列に対する特定データの格納を行う命令が含まれている場合、N次元の固定長配列に対して特定データを格納するように、中間言語132bを更新する。
また、最適化部11bは、図8に示すように、解析部11aが生成した中間言語132bに、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が含まれている場合、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納し、1次元の固定長配列に格納されたデータに対して順にアクセスが行われるように、中間言語132bを更新する。
さらに、最適化部11bは、解析部11aが生成した中間言語132bに対し、その他の必要な最適化を行う。その後、コード生成部11cは、最適化部11bが最適化を行った中間言語132bからオブジェクトコード133bを生成する。
[S4の処理の具体例]
次に、S4の処理の具体例について説明を行う。
図9は、2次元の可変長配列の具体例を説明する図である。また、図10は、2次元の固定長配列の具体例を説明する図である。具体的に、図9は、C++におけるvector<vector<classT>>クラステンプレートの2次元の可変長配列である配列vを説明する図である。また、図10は、C++におけるArray<Array<classT>>クラステンプレートの2次元の固定長配列である配列data[100][100]を説明する図である。
なお、図9及び図10に示す例において、配列v及び配列data[100][100]には、それぞれ同じデータが格納されている。また、配列dataの大きさは、例えば、担当者によって予め決定される。
初めに、図9に示す配列vについて説明を行う。図9に示す配列vは、配列iv1、配列iv2及び配列iv3をそれぞれ有している。
そして、図9に示す配列iv1は、アドレス0x0100に対応する領域に格納されたData1−1と、アドレス0x0108に対応する領域に格納されたData1−2と、アドレス0x0116に対応する領域に格納されたData1−3と、アドレス0x0124に対応する領域に格納されたData1−4とを有している。
また、図9に示す配列iv2は、アドレス0x0200に対応する領域に格納されたData2−1と、アドレス0x0208に対応する領域に格納されたData2−2とを有している。
さらに、図9に示す配列iv3は、アドレス0x0300に対応する領域に格納されたData3−1と、アドレス0x0308に対応する領域に格納されたData3−2と、アドレス0x0316に対応する領域に格納されたData3−3とを有している。
次に、図10に示す配列dataについて説明を行う。図10に示す配列dataは、1次元目の要素として、アドレス0x0100に対応する領域に格納されたData1−1と、アドレス0x0108に対応する領域に格納されたData1−2と、アドレス0x0116に対応する領域に格納されたData1−3と、アドレス0x0124に対応する領域に格納されたData1−4とを有している。なお、図10に示す配列dataの1次元目の要素が格納される領域のうち、アドレス0x0132以降に対応する各領域には、要素が格納されていない。
また、図10に示す配列dataは、2次元目の要素として、アドレス0x0200に対応する領域に格納されたData2−1と、アドレス0x0208に対応する領域に格納されたData2−2とを有している。なお、図10に示す配列dataの2次元目の要素が格納される領域のうち、アドレス0x0216以降に対応する各領域には、要素が格納されていない。
さらに、図10に示す配列dataは、3次元目の要素として、アドレス0x0300に対応する領域に格納されたData3−1と、アドレス0x0308に対応する領域に格納されたData3−2と、アドレス0x0316に対応する領域に格納されたData3−3とを有している。なお、図10に示す配列dataの3次元目の要素が格納される領域のうち、アドレス0x0324に対応する領域には、要素が格納されていない。また、図10に示す配列dataの4次元目以降の要素が格納される領域には、要素が格納されていない。
そして、コンパイラ11は、例えば、配列vに対するデータの格納を行う旨の命令がソースコード131bに含まれている場合、配列vに対するデータの格納(図9で説明したデータの格納)を行わずに、配列dataに対するデータの格納(図10で説明したデータの格納)を行うように、中間言語132bの更新を行う(S4)。
[S7の処理の具体例]
次に、S7の処理の具体例について説明を行う。
図11は、1次元の固定長配列の具体例を説明する図である。図11は、C++におけるArray<classT>クラステンプレートの1次元の固定長配列である配列data2[8]を説明する図である。なお、配列data2の大きさは、例えば、図10で配列dataに格納された要素の数に対応して決定される。
コンパイラ11は、例えば、配列vに格納されたデータに対して順にアクセスを行う命令がソースコード131bに含まれている場合、図11に示すように、2次元の固定長配列である配列dataに格納されたデータ(図10で説明したデータの格納)を、1次元の固定長配列である配列data2に対して順に格納する。そして、コンパイラ11は、配列data2に格納されたデータに対して順にアクセスを行う(S7)。
すなわち、本実施の形態におけるコンパイラ11は、N次元の可変長配列に対してデータを格納する旨の命令がソースコード131に含まれている場合、N次元の可変長配列に対してデータを格納する旨の命令を、1次元の固定長配列に対して連続してデータを格納する旨の命令に変換してオブジェクトコード133を生成する。
これにより、コンパイラ11は、不連続なメモリ領域に格納されたデータに対するアクセスの発生を抑制したオブジェクトコード133bを生成することが可能になる。そのため、コンパイラ11は、実行時におけるキャッシュヒット率が高いオブジェクトコード133bを生成することが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図12から図17は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。また、図18から図24は、第1の実施の形態におけるコンパイル処理の詳細を説明する図である。
[コンパイラの解析部におけるコンパイル処理]
初めに、コンパイラ11の解析部11aにおけるコンパイル処理について説明を行う。図12は、解析部11aにおけるコンパイル処理を説明するフローチャート図である。
解析部11aは、図12に示すように、ソースコード131bのコンパイルの開始タイミングになるまで待機する(S11のNO)。
そして、コンパイルの開始タイミングになった場合(S11のYES)、解析部11aの配列特定部111は、S11の処理でコンパイルを開始したソースコード131bの記述から、N次元の可変長配列の宣言と、N次元の可変長配列に対するデータの格納を行う命令と、N次元の可変長配列に格納されているデータに対して順にアクセスを行う命令とを特定する(S12)。以下、S12の処理の具体例について説明を行う。
[S12の処理の具体例]
図18は、ソースコード131bの具体例を説明する具体例である。
図18に示すソースコード131bにおけるCODE1には、C++におけるvector<vector<classT>>クラステンプレートの2次元の可変長配列である配列vの宣言の記述である「vector<vector<double>> v」が含まれている。また、図18に示すソースコード131bにおけるCODE2には、N次元の可変長配列に対する特定データの格納を行う命令の記述である「v[i].push_back(<double>j*1.5);」が含まれている。さらに、図18に示すソースコード131bにおけるCODE3には、N次元の可変長配列に格納されているデータに対して順にアクセスを行う命令の宣言の記述である「vector<vector>::iterator inner_v;」が含まれている。そのため、配列特定部111は、この場合、S12の処理において、N次元の可変長配列の宣言と、N次元の可変長配列に対するデータの格納を行う命令と、N次元の可変長配列に格納されているデータに対して順にアクセスを行う命令との特定を行う。以下、S12の処理において、N次元の可変長配列等の全てが特定されたものとして説明を行う。
図12に戻り、解析部11aは、S11の処理でコンパイルを開始したソースコード131bから中間言語132bを生成する(S13)。
[コンパイラの最適化部におけるコンパイル処理]
次に、コンパイラ11の最適化部11bにおけるコンパイル処理について説明を行う。図13は、最適化部11bにおけるコンパイル処理を説明するフローチャート図である。
最適化部11bは、図13に示すように、解析部11aによって中間言語132bの生成が完了するまで待機する(S21のNO)。
そして、中間言語132bの生成が完了した場合(S21のYES)、最適化部11bは、S12の処理において、N次元の可変長配列の宣言と、N次元の可変長配列に対するデータの格納を行う命令と、N次元の可変長配列に格納されているデータに対して順にアクセスを行う命令との全てが特定されたか否かを判定する(S22)。
その結果、N次元の可変長配列等の全てが特定されたと判定した場合(S23のYES)、最適化部11bの型変換部112は、S13の処理で生成した中間言語132bに含まれるN次元の可変長配列の宣言をN次元の固定長配列の宣言に変換するように、S13の処理で生成した中間言語132bを更新する(S24)。
具体的に、型変換部112は、図18で説明したソースコード131bの記述のうち、vector<vector<classT>>クラステンプレートの配列vの宣言(CODE1に含まれる記述)を、Array<Array<classT>>クラステンプレートの配列data[100][100]の宣言に変換するように、中間言語132bの更新を行う。
続いて、最適化部11bの格納先変更部113は、S13の処理で生成した中間言語132bに含まれる命令のうち、N次元の可変長配列に対するデータの格納を行う命令を、N次元の固定長配列に対するデータの格納を行う命令と、N次元の固定長配列に格納されるデータのアドレスを示すアドレス情報135を生成する命令とに変換するように、S13の処理で生成した中間言語132bを更新する(S25)。アドレス情報135の具体例については後述する。
ここで、S24の処理において、S13の処理で生成した中間言語132bに含まれる配列v(N次元の可変長配列)の宣言が配列data(N次元の固定長配列)の宣言に変換されることによって、中間言語132bから生成されるオブジェクトコード133bの実行時において呼び出される関数であるpush_back(図18で説明したソースコード131bのCODE2に含まれる関数)は、vectorクラスのpush_backからArrayクラスのpush_backに変更される。
そのため、担当者は、例えば、本実施の形態におけるコンパイル処理を行う前に、STL(Standard Template Library)のArrayクラスを継承したArrayExtendクラスを生成し、配列data(N次元の固定長配列)に対するデータの格納を行う命令と、配列dataに格納されるデータのアドレスを示すアドレス情報135を生成する命令とを含む新たなメンバ関数であるArrayクラスのpush_backを予め追加することにより、S13の処理で生成した中間言語132bに含まれるCODE2に対応する部分を変更することなく、最適化部11bにS25の処理を行わせることが可能になる。
そして、最適化部11bのアクセス先変更部114は、図14に示すように、S25の処理で生成したアドレス情報135を参照し、N次元の固定長配列に格納されたデータのそれぞれを連続して格納する1次元の固定長配列に対応する領域をメモリ102上に確保するように、S13の処理で生成した中間言語132bを更新する(S31)。
具体的に、アクセス先変更部114は、図11で説明したように、例えば、配列data2に対応する領域として、配列dataに格納されているデータのそれぞれが格納可能な大きさ領域を確保するように、中間言語132bの更新を行う。
ここで、担当者は、例えば、本実施の形態におけるコンパイル処理を行う前に、Arrayクラスを継承したArrayExtendクラスを生成し、アドレス情報135を参照してS31以降の処理を行う新たな関数を新たなメンバ関数として予め追加するものであってよい。具体的に、担当者は、例えば、オブジェクトコード133bの実行時においてArrayクラスのメンバ関数であるbegin(図18で説明したソースコード131bのCODE3に含まれる関数)が呼び出された場合、アドレス情報135が生成済であることを条件として、beginの代わりに呼び出され、かつ、beginの呼び出しについても行う関数を、新たなメンバ関数としてArrayExtendクラスに追加する。
これにより、担当者は、例えば、S13の処理で生成した中間言語132bに含まれるCODE3のうち、ループで囲まれた部分についての変更を行うことなく、最適化部11bにS31以降の処理を行わせることが可能になる。
続いて、アクセス先変更部114は、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、S13の処理で生成した中間言語132bを更新する(S32)。
具体的に、アクセス先変更部114は、例えば、配列dataに格納されているデータのそれぞれを配列data2に連続して格納するように、中間言語132bの更新を行う。
以下、中間言語132bから生成されたオブジェクトコード133bの実行に伴って行われる処理(以下、オブジェクト実行処理とも呼ぶ)のうち、S32の処理で更新された中間言語132bに対応する部分の処理について説明を行う。
[オブジェクト実行処理]
図15から図17は、オブジェクト実行処理の一部を説明するフローチャート図である。なお、以下、オブジェクトコード133bが情報処理装置1(CPU101)によって実行される場合について説明を行う。
CPU101は、図15に示すように、例えば、変数i、変数j及び変数counterのそれぞれに、初期値として0を設定する(S41)。
そして、CPU101は、N次元の固定長配列における添え字が変数i及び変数jの値に対応する領域に格納されたデータを、1次元の固定長配列における添え字が変数counterの値に対応する領域に格納する(S42)。
続いて、CPU101は、情報格納領域130に格納したアドレス情報135のうち、vectorカウントに設定された値の最大値が変数i+1の値と等しく、かつ、vectorカウントに設定された値が変数iの値と等しい情報のデータ数が、変数j+1の値と等しいか否かを判定する(S43)。
その結果、各値の全てが等しくないと判定した場合(S44のNO)、CPU101は、情報格納領域130に格納したアドレス情報135のうち、vectorカウントに設定された値が変数iの値と等しい情報のデータ数が、変数j+1の値と等しいか否かを判定する(S44)。
そして、図18に示すように、各値の全てが等しいと判定した場合(S51のYES)、CPU101は、変数iの値及び変数counterの値に1を加算し、変数jの値を0に更新する(S52)。一方、各値の全てが等しくないと判定した場合(S51のNO)、CPU101は、変数jの値及び変数counterの値に1を加算する(S53)。その後、CPU101は、S42以降の処理を再度行う。
また、S44の処理において、各値の全てが等しいと判定した場合(S44のYES)、CPU101は、図17に示すように、新たなN次元の固定長配列を生成する(S61)。
そして、CPU101は、新たなN次元の固定長配列のうちのN次元目に、1次元の固定長配列に格納されているデータを格納し、新たなN次元の固定長配列のうちの1からN−1次元目に、それぞれの次元よりも1つ大きい次元に対応する領域の先頭アドレスを格納する(S62)。
その後、CPU101は、新たなN次元の固定長配列に格納されたデータをアクセス先のデータとして設定する(S63)。
すなわち、CPU101は、S42の処理においてデータが格納された1次元の固定長配列に代えて、S61の処理において生成された新たなN次元の固定長配列に格納されたデータをアクセス先のデータとして設定する。
これにより、担当者は、例えば、S13の処理で生成した中間言語132bに含まれるCODE3のうち、ループで囲まれた部分についての変更を行う必要がなくなる。
図14に戻り、最適化部11bは、S13の処理で生成した中間言語132bに対し、その他の必要な最適化を行う(S33)。そして、最適化部11bは、S13の処理で生成した中間言語132bの最適化を終了する。
なお、最適化部11bは、S22の処理において、N次元の可変長配列等のうちの少なくとも1つが特定されなかったと判定した場合(S23のNO)についても同様に、中間言語132bの最適化を終了する。
[S25の処理で更新された命令の実行時における具体例(1)]
次に、S25の処理で中間言語132bが更新された命令のうち、N次元の固定長配列に対するデータの格納を行う命令の実行時(オブジェクトコード133bの実行時)における具体例について説明を行う。図19及び図20は、S25の処理で中間言語132bが更新された命令の実行時における具体例について説明する図である。
初めに、配列vの具体例について説明を行う。図19は、配列vの具体例を説明する図である。
図19に示す配列vは、配列iv1、配列iv2及び配列iv3をそれぞれ有している。そして、図19に示す配列iv1は、アドレス0x0100に対応する領域に格納された「0」と、アドレス0x0108に対応する領域に格納された「1.5」と、アドレス0x0116に対応する領域に格納された「3.0」と、アドレス0x0124に対応する領域に格納された「4.5」とを有している。図19に含まれる他の情報についての説明は省略する。
次に、配列dataの具体例について説明を行う。図20は、配列dataの具体例を説明する図である。
図20に示す配列dataは、1次元目の要素として、アドレス0x0100に対応する領域に格納された「0」と、アドレス0x0108に対応する領域に格納された「1.5」と、アドレス0x0116に対応する領域に格納された「3」と、アドレス0x0124に対応する領域に格納された「4.5」とを有している。なお、図20に示す配列dataの1次元目の要素が格納される領域のうち、アドレス0x0132以降に対応する各領域には、要素が格納されていない。図20に含まれる他の情報についての説明は省略する。
そして、例えば、オブジェクトコード133bを実行するCPU101(以下、単にCPU101とも呼ぶ)は、S25の処理で更新された命令を実行する場合、図20に示すように、配列vに対するデータの格納(図19で説明したデータの格納)に代えて、配列dataに対するデータの格納(図20で説明したデータの格納)を行う。
[S25の処理で更新された命令の実行時における具体例(2)]
次に、S25の処理で中間言語132bが更新された命令のうち、アドレス情報135を生成する命令の実行時(ソースコード131bから生成されたオブジェクトコード133bの実行時)における具体例について説明を行う。図21は、アドレス情報135の具体例について説明する図である。
図21に示すアドレス情報135は、各データに対応する配列vに含まれる配列を示す情報が設定される「vectorカウント」と、各データの格納が行われる連続領域の先頭アドレスが設定される「アドレス」と、各データの格納が行われる連続領域に格納されたデータの数が設定される「データ数」とを項目として有する。「vectorカウント」には、例えば、図19で説明した配列vのうち、配列vi1、配列vi2及び配列vi3のそれぞれに対応する「1」、「2」及び「3」のいずれかが設定される。
具体的に、図20に示す配列dataには、1次元目の要素(配列vi1に対応する次元の要素)として、アドレス0x0100を先頭アドレスとする領域に格納された4つの要素が含まれており、2次元目の要素(配列vi2に対応する次元の要素)として、アドレス0x0200を先頭アドレスとする領域に格納された2つの要素が含まれており、3次元目の要素(配列vi3に対応する次元の要素)として、アドレス0x0300を先頭アドレスとする領域に格納された3つの要素が含まれている。
そのため、CPU101は、図21に示すように、「項番」が「1」である情報の「vectorカウント」として「1」を設定し、「アドレス」として「0x0100」を設定し、「データ数」として「4」を設定する。
また、CPU101は、「項番」が「2」である情報の「vectorカウント」として「2」を設定し、「アドレス」として「0x0200」を設定し、「データ数」として「2」を設定する。
さらに、CPU101は、「項番」が「3」である情報の「vectorカウント」として「3」を設定し、「アドレス」として「0x0300」を設定し、「データ数」として「3」を設定する。
[S31の処理で更新された命令の実行時における具体例]
次に、S31の処理で更新された命令の実行時(ソースコード131bから生成されたオブジェクトコード133bの実行時)における具体例について説明を行う。
図21で説明したアドレス情報135には、「vectorカウント」として「1」、「2」及び「3」が設定されており、「データ数」として「4」、「2」及び「3」が設定されている。そのため、CPU101は、例えば、「データ数」に設定された値の合計値である「9」と、各データ(例えば、double型のデータ)のサイズである「8(バイト)」とを乗算した値である「72(バイト)」を算出する。そのため、CPU101は、配列data2に対応する領域として「72(バイト)」の領域を確保する。
[S32の処理で更新された命令の実行時における具体例]
次に、S32の処理で更新された命令の実行時(ソースコード131bから生成されたオブジェクトコード133bの実行時)における具体例について説明を行う。図22から図24は、S32の処理で追加された命令の実行時における具体例について説明する図である。
図20で説明した配列dataには、1次元目の要素として、アドレス0x0100に対応する領域に格納された「0」と、アドレス0x0108に対応する領域に格納された「1.5」と、アドレス0x0116に対応する領域に格納された「3」と、アドレス0x0124に対応する領域に格納された「4.5」とが含まれている。
そのため、変数iの値が「0」、変数jの値が「0」及び変数counterの値が「0」である場合、CPU101は、図22に示すように、配列data[0][0]に格納されている「0」を、配列data2[0]に格納する(1回目のS42)。続いて、変数iの値が「0」、変数jの値が「1」及び変数counterの値が「1」である場合、CPU101は、図22に示すように、配列data[0][1]に格納されている「1.5」を、配列data2[1]に格納する(2回目のS42)。そして、変数iの値が「0」、変数jの値が「2」及び変数counterの値が「2」である場合、CPU101は、図22に示すように、配列data[0][2]に格納されている「3.0」を、配列data2[2]に格納する(3回目のS42)。さらに、変数iの値が「0」、変数jの値が「3」及び変数counterの値が「3」である場合、CPU101は、図22に示すように、配列data[0][3]に格納されている「4.5」を、配列data2[3]に格納する(4回目のS42)。
ここで、図21で説明したアドレス情報135における「vectorカウント」が「1」である情報(「項番」が「1」である情報)の「データ数」には、現在の変数jの値と同じ値である「3」に「1」を加算した値である「4」が設定されている(S44のNO、S51のYES)。そのため、CPU101は、変数iの値を「1」に更新し、変数counterの値を「4」に更新し、変数jの値を「0」に更新する(S52)。
そして、CPU101は、S42等の処理を繰り返し行うことにより、図22に示すように、図21で説明した配列dataに格納されたデータのそれぞれを、配列data2に格納する。
その後、CPU101は、S12の処理で特定された可変長配列が2次元の配列であるため、新たな2次元の固定長配列である配列data2_boxを生成する(S61)。
そして、CPU101は、図23に示すように、配列data2_boxの2次元目に、S42の処理で配列data2に格納されたデータのそれぞれを再格納する。また、CPU101は、この場合、配列data2_boxの1次元目に、配列data2_boxの2次元目に対応する領域の先頭アドレスである「0x3000」を格納する(S62)。
なお、CPU101は、S12の処理で特定された可変長配列が3次元以上の配列である場合、新たな3次元以上の固定長配列である配列dataN_boxを生成するものであってよい。
具体的に、CPU101は、例えば、S12の処理で特定された可変長配列が3次元の配列である場合、新たな3次元の固定長配列である配列data3_boxを生成する。そして、CPU101は、図24に示すように、配列data3_boxの3次元目に、S42の処理で配列data2に格納されたデータのそれぞれを再格納する。また、CPU101は、この場合、配列data3_boxの2次元目に、配列data3_boxの3次元目に対応する領域の先頭アドレスである「0x4000」を格納し、配列data3_boxの1次元目に、配列data3_boxの2次元目に対応する領域の先頭アドレスである「0x3000」を格納する。
このように、本実施の形態におけるコンパイラ11は、ソースコード131bのコンパイル時において、N次元の可変長配列に対する特定データの格納を行う命令がソースコード131bに含まれている場合、N次元の可変長配列に代えて、N次元の固定長配列に対して特定データを格納するように、オブジェクトコード133bを生成する。
また、コンパイラ11は、ソースコード131bのコンパイル時において、N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令がソースコード131bに含まれている場合、N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納し、1次元の固定長配列に格納されたデータに対して順にアクセスが行われるように、オブジェクトコード133bを生成する。
すなわち、本実施の形態におけるコンパイラ11は、N次元の可変長配列に対してデータを格納する旨の命令がソースコード131に含まれている場合、N次元の可変長配列に対してデータを格納する旨の命令を、1次元の固定長配列に対して連続してデータを格納する旨の命令に変換してオブジェクトコード133を生成する。
これにより、コンパイラ11は、不連続なメモリ領域に格納されたデータに対するアクセスの発生を抑制したオブジェクトコード133bを生成することが可能になる。そのため、コンパイラ11は、実行時におけるキャッシュヒット率が高いオブジェクトコード133bを生成することが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
ソースコードのコンパイルを実行してオブジェクトコードを生成する情報処理装置であって、
N(Nは2以上の整数)次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成する格納先変更部と、
前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成するアクセス先変更部と、を有する、
ことを特徴とする情報処理装置。
(付記2)
付記1において、さらに、
前記特定データの格納先のアドレスを示すアドレス情報を記憶する記憶部と、を有し、
前記アクセス先変更部は、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのそれぞれの格納位置を特定し、特定した前記格納位置に格納されたデータのそれぞれを前記1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
ことを特徴とする情報処理装置。
(付記3)
付記2において、
前記アクセス先変更部は、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのデータ長の合計値を算出し、前記N次元の固定長配列に格納されているデータのそれぞれを格納する前に、前記1次元の固定長配列に対応する領域として、算出した前記合計値に対応する領域を確保するように、前記オブジェクトコードを生成する、
ことを特徴とする情報処理装置。
(付記4)
付記2において、
前記アドレス情報は、前記N次元の固定長配列に対応する領域において、連続する領域に格納された複数の前記特定データが格納された領域の先頭アドレスを示す先頭アドレス情報と、連続する領域に格納された複数の前記特定データごとに、前記特定データの数を示す情報を示すデータ数情報とを含む、
ことを特徴とする情報処理装置。
(付記5)
付記1において、
前記アクセス先変更部は、前記N次元の固定長配列に格納されているデータのそれぞれを前記1次元の固定長配列に対して格納した後、前記N次元の新たな固定長配列を生成し、生成した前記新たな固定長配列における前記N次元のうち、1次元目からN−1次元目のそれぞれに対応する領域に、2次元目からN次元目に対応する領域の先頭アドレスを示すデータを格納し、前記新たな固定長配列における前記N次元のうち、N次元目に対応する領域に、前記1次元の固定長配列に格納されたデータのそれぞれを格納し、前記新たな固定長配列に格納されたデータのそれぞれに対して順にアクセスが行われるように、前記オブジェクトコードを生成する、
ことを特徴とする情報処理装置。
(付記6)
ソースコードのコンパイルを実行してオブジェクトコードを生成する処理をコンピュータに実行させるコンパイラプログラムであって、
N次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成し、
前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
ことを特徴とするコンパイラプログラム。
(付記7)
付記6において、さらに、
前記特定データの格納先のアドレスを示すアドレス情報を記憶部に記憶する、
処理をコンピュータに実行させ、
前記1次元の固定長配列に格納されたデータに対して順にアクセスが行われるようにオブジェクトコードを生成する処理では、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのそれぞれの格納位置を特定し、特定した前記格納位置に格納されたデータのそれぞれを前記1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
ことを特徴とするコンパイラプログラム。
(付記8)
ソースコードのコンパイルを実行してオブジェクトコードを生成するコンパイル方法であって、
N次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成し、
前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
ことを特徴とするコンパイル方法。
(付記9)
付記8において、さらに、
前記特定データの格納先のアドレスを示すアドレス情報を記憶部に記憶し、
前記1次元の固定長配列に格納されたデータに対して順にアクセスが行われるようにオブジェクトコードを生成する工程では、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのそれぞれの格納位置を特定し、特定した前記格納位置に格納されたデータのそれぞれを前記1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
ことを特徴とするコンパイル方法。
1:情報処理装置 3:操作端末
11:コンパイラ 11a:解析部
11b:最適化部 11c:コード生成部
12:リンカ 130:情報格納領域
131:ソースコード 132:中間言語
133:オブジェクトコード 134:実行ファイル

Claims (7)

  1. ソースコードのコンパイルを実行してオブジェクトコードを生成する情報処理装置であって、
    N(Nは2以上の整数)次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成する格納先変更部と、
    前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成するアクセス先変更部と、を有する、
    ことを特徴とする情報処理装置。
  2. 請求項1において、さらに、
    前記特定データの格納先のアドレスを示すアドレス情報を記憶する記憶部と、を有し、
    前記アクセス先変更部は、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのそれぞれの格納位置を特定し、特定した前記格納位置に格納されたデータのそれぞれを前記1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
    ことを特徴とする情報処理装置。
  3. 請求項2において、
    前記アクセス先変更部は、前記アドレス情報が記憶された前記記憶部を参照し、前記N次元の固定長配列に格納されているデータのデータ長の合計値を算出し、前記N次元の固定長配列に格納されているデータのそれぞれを格納する前に、前記1次元の固定長配列に対応する領域として、算出した前記合計値に対応する領域を確保するように、前記オブジェクトコードを生成する、
    ことを特徴とする情報処理装置。
  4. 請求項2において、
    前記アドレス情報は、前記N次元の固定長配列に対応する領域において、連続する領域に格納された複数の前記特定データが格納された領域の先頭アドレスを示す先頭アドレス情報と、連続する領域に格納された複数の前記特定データごとに、前記特定データの数を示す情報を示すデータ数情報とを含む、
    ことを特徴とする情報処理装置。
  5. 請求項1において、
    前記アクセス先変更部は、前記N次元の固定長配列に格納されているデータのそれぞれを前記1次元の固定長配列に対して格納した後、前記N次元の新たな固定長配列を生成し、生成した前記新たな固定長配列における前記N次元のうち、1次元目からN−1次元目のそれぞれに対応する領域に、2次元目からN次元目に対応する領域の先頭アドレスを示すデータを格納し、前記新たな固定長配列における前記N次元のうち、N次元目に対応する領域に、前記1次元の固定長配列に格納されたデータのそれぞれを格納し、前記新たな固定長配列に格納されたデータのそれぞれに対して順にアクセスが行われるように、前記オブジェクトコードを生成する、
    ことを特徴とする情報処理装置。
  6. ソースコードのコンパイルを実行してオブジェクトコードを生成する処理をコンピュータに実行させるコンパイラプログラムであって、
    N次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成し、
    前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
    ことを特徴とするコンパイラプログラム。
  7. ソースコードのコンパイルを実行してオブジェクトコードを生成するコンパイル方法であって、
    N次元の可変長配列に対する特定データの格納を行う命令が前記ソースコードに含まれている場合、前記N次元の可変長配列に代えて、N次元の固定長配列に対して前記特定データを格納するように、前記オブジェクトコードを生成し、
    前記N次元の可変長配列に格納されたデータに対して順にアクセスを行う命令が前記ソースコードに含まれている場合、前記N次元の固定長配列に格納されているデータのそれぞれを1次元の固定長配列に連続して格納するように、前記オブジェクトコードを生成する、
    ことを特徴とするコンパイル方法。
JP2018116777A 2018-06-20 2018-06-20 情報処理装置、コンパイラプログラム及びコンパイル方法 Active JP7060803B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018116777A JP7060803B2 (ja) 2018-06-20 2018-06-20 情報処理装置、コンパイラプログラム及びコンパイル方法
US16/421,534 US11231917B2 (en) 2018-06-20 2019-05-24 Information processing apparatus, computer-readable recording medium storing therein compiler program, and compiling method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018116777A JP7060803B2 (ja) 2018-06-20 2018-06-20 情報処理装置、コンパイラプログラム及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2019219912A true JP2019219912A (ja) 2019-12-26
JP7060803B2 JP7060803B2 (ja) 2022-04-27

Family

ID=68981784

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018116777A Active JP7060803B2 (ja) 2018-06-20 2018-06-20 情報処理装置、コンパイラプログラム及びコンパイル方法

Country Status (2)

Country Link
US (1) US11231917B2 (ja)
JP (1) JP7060803B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100620B (zh) * 2020-09-04 2024-02-06 百度在线网络技术(北京)有限公司 代码安全检测方法、装置、设备和可读存储介质
US11748075B2 (en) 2021-08-10 2023-09-05 Bank Of America Corporation Two-phase application development device
US11403072B1 (en) * 2021-08-10 2022-08-02 Bank Of America Corporation Mobile application development device

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
JP2010003031A (ja) * 2008-06-19 2010-01-07 Fujitsu Ltd コンパイル処理装置,ならびにアクセスパターン変更処理方法および処理プログラム
US20130007721A1 (en) * 2001-07-10 2013-01-03 Micron Technology, Inc. Dynamic arrays and overlays with bounds policies
JP2018092383A (ja) * 2016-12-05 2018-06-14 富士通株式会社 コンパイルプログラム、コンパイル方法および情報処理装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5586325A (en) * 1993-12-10 1996-12-17 Cray Research, Inc. Method for the dynamic allocation of array sizes in a multiprocessor system
US7127559B2 (en) * 2001-07-10 2006-10-24 Micron Technology, Inc. Caching of dynamic arrays
JP3992102B2 (ja) 2003-06-04 2007-10-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US8161464B2 (en) * 2006-04-11 2012-04-17 International Business Machines Corporation Compiling source code
JP2007328692A (ja) 2006-06-09 2007-12-20 Canon Inc 代数演算方法及びその装置、プログラム
US8015556B2 (en) * 2006-10-12 2011-09-06 International Business Machines Corporation Efficient method of data reshaping for multidimensional dynamic array objects in the presence of multiple object instantiations
JP5224498B2 (ja) 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
CA2820230A1 (en) * 2013-07-09 2015-01-09 Ibm Canada Limited - Ibm Canada Limitee Data splitting for multi-instantiated objects
US9250878B1 (en) * 2014-11-24 2016-02-02 Red Hat, Inc. Function attribute for dynamic stack allocation
US10416967B2 (en) * 2017-10-13 2019-09-17 Internationa Business Machines Corporation Method of optimizing vargs in object-oriented programming languages

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130007721A1 (en) * 2001-07-10 2013-01-03 Micron Technology, Inc. Dynamic arrays and overlays with bounds policies
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
JP2010003031A (ja) * 2008-06-19 2010-01-07 Fujitsu Ltd コンパイル処理装置,ならびにアクセスパターン変更処理方法および処理プログラム
JP2018092383A (ja) * 2016-12-05 2018-06-14 富士通株式会社 コンパイルプログラム、コンパイル方法および情報処理装置

Also Published As

Publication number Publication date
JP7060803B2 (ja) 2022-04-27
US20190391795A1 (en) 2019-12-26
US11231917B2 (en) 2022-01-25

Similar Documents

Publication Publication Date Title
US11442713B2 (en) Methods and apparatus to improve optimizing loops with predictable recurring memory reads
Hartono et al. Annotation-based empirical performance tuning using Orio
JP7060803B2 (ja) 情報処理装置、コンパイラプログラム及びコンパイル方法
US8352686B2 (en) Method and system for data prefetching for loops based on linear induction expressions
US9977759B2 (en) Parallel computing apparatus, compiling apparatus, and parallel processing method for enabling access to data in stack area of thread by another thread
US9430203B2 (en) Information processing apparatus and compilation method
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JP6665720B2 (ja) 情報処理装置、コンパイルプログラム、コンパイル方法、およびキャッシュ制御方法
US11733981B2 (en) Methods, systems, articles of manufacture and apparatus to automatically optimize software programs
Liang et al. Romou: Rapidly generate high-performance tensor kernels for mobile gpus
Hoshino et al. An openacc extension for data layout transformation
US10095494B2 (en) Systems and methods for footprint based scheduling
Shei et al. MATLAB parallelization through scalarization
Meister et al. Productivity via automatic code generation for pgas platforms with the r-stream compiler
Sharma et al. User-specified and automatic data layout selection for portable performance
Liu et al. Improving the performance of OpenMP by array privatization
Eimouri et al. Using field access frequency to optimize layout of objects in the JVM
Baloukas et al. Mapping embedded applications on MPSoCs: the MNEMEE approach
JP7035751B2 (ja) コード変換装置、コード変換方法、及びコード変換プログラム
Hornung et al. A case for improved C++ compiler support to enable performance portability in large physics simulation codes
JP2009265708A (ja) コンパイラ及びそのコード生成方法
Wende C++ data layout abstractions through proxy types
US11734003B2 (en) Non-transitory computer-readable recording medium, compilation method, and compiler device
JP6898556B2 (ja) 情報処理装置、コンパイル方法及びコンパイルプログラム
US20220405110A1 (en) Non-transitory computer-readable recording medium and compilation method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220224

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220328

R150 Certificate of patent or registration of utility model

Ref document number: 7060803

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150