JP6718119B2 - コンパイルプログラム、コンパイル方法および情報処理装置 - Google Patents
コンパイルプログラム、コンパイル方法および情報処理装置 Download PDFInfo
- Publication number
- JP6718119B2 JP6718119B2 JP2016235497A JP2016235497A JP6718119B2 JP 6718119 B2 JP6718119 B2 JP 6718119B2 JP 2016235497 A JP2016235497 A JP 2016235497A JP 2016235497 A JP2016235497 A JP 2016235497A JP 6718119 B2 JP6718119 B2 JP 6718119B2
- Authority
- JP
- Japan
- Prior art keywords
- array
- code
- length
- vec
- variable
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
[第1の実施の形態]
第1の実施の形態を説明する。
第1の実施の形態の情報処理装置10は、C++などの高級言語で記述されたソースコードをコンパイルし、プロセッサに実行させる実行プログラムを生成する。実行プログラムは、例えば、機械可読なオブジェクトコードで記述される。情報処理装置10をコンパイル装置と言うこともできる。情報処理装置10は、ソフトウェアとしてのコンパイラを実行するコンピュータであってもよい。また、情報処理装置10は、ユーザが操作するクライアント装置でもよいし、クライアント装置からアクセスされるサーバ装置でもよい。
次に、第2の実施の形態を説明する。
第2の実施の形態のコンパイル装置100は、高級言語で記述されたソースコードをコンパイルし、機械可読なオブジェクトコードを生成する。コンパイル装置100は、ユーザが操作するクライアント装置(端末装置と言うこともある)でもよいし、クライアント装置からアクセスされるサーバ装置でもよい。コンパイル装置100はコンピュータであり、ソフトウェアとしてのコンパイラおよびリンカを実行する。
コンパイル装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。上記ユニットはバス108に接続される。
コンパイル装置100は、ファイル記憶部120、コンパイラ130およびリンカ140を有する。ファイル記憶部120は、例えば、RAM102またはHDD103に確保した記憶領域を用いて実装される。コンパイラ130およびリンカ140は、例えば、CPU101が実行するプログラムモジュール(コンパイルプログラムおよびリンクプログラム)を用いて実装される。ただし、コンパイラ130およびリンカ140の機能の一部または全部を、ソフトウェアでなく電子回路として実装することも可能である。
ソースコードには二次元配列が記述されることがある。特に、科学技術計算に用いるソースコードでは、大規模な二次元配列が記述されることがある。二次元配列は、同一種類の複数の単位データ(例えば、整数や浮動小数点型実数など)を体系的に格納するデータ構造であって、行番号と列番号によって各単位データを指定できるものである。二次元配列には、行数および列数が変数宣言時に固定される固定長二次元配列と、行数および列数を変数宣言後に変えることができる可変長二次元配列とが存在する。固定長二次元配列の典型例は、プログラミング言語の仕様で定義されているarray型二次元配列である。可変長二次元配列の典型例は、vectorライブラリを利用して作成するvector型二次元配列である。固定長二次元配列と可変長二次元配列とでは、ソースコードの記述方法やオブジェクトコード実行時のメモリ領域の使用方法が異なる。
ソースコード151は、3行3列の固定長二次元配列array_matを宣言している。array_matの要素のデータ型は整数型である。ソースコード151に記述された固定長二次元配列は、論理構造161に対応する。論理構造161は、行番号0〜2および列番号0〜2によって特定される3行3列の行列である。(0,0)には整数#1が格納される。(0,1)には整数#2が格納される。(0,2)には整数#3が格納される。(1,0)には整数#4が格納される。(1,1)には整数#5が格納される。(1,2)には整数#6が格納される。(2,0)には整数#7が格納される。(2,1)には整数#8が格納される。(2,2)には整数#9が格納される。
ソースコード152は、可変長二次元配列vec_matを宣言している。vec_matは、プログラミング言語の仕様で用意された標準ライブラリの中のvectorライブラリを利用して作成されたvector型二次元配列である。vectorライブラリによって定義されたvector型配列は一次元配列であるが、vector型配列の要素にvector型配列を代入することで二次元配列を作成することができる。
コンパイル装置100は、次のような動作を行うオブジェクトコードを生成する。
ソースコード152に記述されたvector型二次元配列に対して、最初はメモリに以下の6個の領域が確保される。図5と同様、vec_mat実体領域172b、vec_x1管理領域172c、vec_x2管理領域172dおよびvec_x3管理領域172eが確保される。また、vec_mat管理領域173およびmatrix領域174が確保される。vec_x1実体領域172f、vec_x2実体領域172gおよびvec_x3実体領域172hは、最初は確保しなくてよい。
ソースコード153は、ユーザによって記述されたオリジナルのソースコードであり、最適化前の処理手順を示している。ソースコード153は、vectorライブラリをincludeすることでvectorライブラリを参照している。ソースコード153は、整数を格納可能なvector型配列vec_x1,vec_x2,vec_x3を宣言している。また、ソースコード153は、整数を格納可能なvector型配列を要素とするvector型配列vec_matを宣言している。
ソースコード154は、前述のソースコード153を最適化した後の処理手順を示している。ソースコード154は、vec_x1,vec_x2,vec_x3,vec_matに加えて、array型二次元配列matrixを宣言している。matrixの行数および列数は、ソースコード153の記載からvector型二次元配列vec_matに初期値を格納する処理を静的に解析することで決定することができる。
ソースコード155,156は、ユーザによって記述されたオリジナルのソースコードであり、最適化前の処理手順を示している。ソースコード155は、図7に示したソースコード153とは異なる関数に含まれるものであり、ソースコード153と同じソースファイルに記載されてもよいし異なるソースファイルに記載されてもよい。ソースコード156は、ソースコード155から呼び出されるものであり、ソースコード155と同じソースファイルに記載されてもよいし異なるソースファイルに記載されてもよい。
ソースコード157は、前述のソースコード155を最適化した後の処理手順を示している。ソースコード157では、resize()が呼び出される直前に、matrixフラグをOFFに書き換える処理が挿入されている。また、resize()が呼び出される直前に、matrixからvec_matに整数をコピーする処理が挿入されている。matrixとvec_matは共に3行3列の行列として扱うことができるため、matrixのi行j列の整数がvec_matのi行j列にコピーされる。
図11は、コンパイルの手順例を示すフローチャートである。
(S10)コンパイラ130は、ソースファイル121からソースコードを読み出し、ソースコードの1回目のコンパイルを行い、生成したオブジェクトコードをオブジェクトファイル122に書き込む。1回目のコンパイルでは、コンパイラ130は、可変長二次元配列を固定長二次元配列に変換する最適化を行わなくてよい。
(S14)最適化部135は、ステップS13で検索されたvector型二次元配列の中からvector型二次元配列を1つ選択する。
(S16)最適化部135は、vector型二次元配列が宣言された位置に、メモリにmatrix領域174を確保するための命令およびmatrixフラグをONに設定する命令を挿入する。このとき、matrix領域174の先頭要素のアドレスが、vec_mat管理領域173にmatrixポインタとして格納される。なお、matrixフラグおよびmatrixポインタは、ソースコードで宣言されたvector型二次元配列1つにつき1つずつ用意される。複数の関数が1つのvector型二次元配列を共有する場合、同じmatrixフラグおよびmatrixポインタが参照される。
(S18)最適化部135は、vector型二次元配列に初期値が格納された後、サイズを変更せずにvector型二次元配列を使用する配列演算の命令を検出する。最適化部135は、検出した配列演算の位置に、vector型二次元配列の代わりにmatrix領域174を使用する配列演算の命令を挿入する。また、最適化部135は、vec_mat管理領域173のmatrixフラグを確認し、matrixフラグに応じて上記2種類の配列演算を選択的に実行させる命令を挿入する。例えば、最適化部135は、matrixフラグがONの場合はmatrix領域174を使用し、matrixフラグがOFFの場合はvector型二次元配列を使用する分岐命令を挿入する。
(S20)最適化部135は、ステップS14で全てのvector型二次元配列を選択したか判断する。全てのvector型二次元配列を選択した場合は処理が終了し、未選択のvector型二次元配列がある場合はステップS14に処理が進む。
この二次元配列検索は、前述のステップS13で実行される。
(S30)最適化部135は、コンパイル対象の関数を1つ選択する。
(S33)最適化部135は、ステップS32で選択した変数宣言のデータ型がvectorであるか判断する。データ型がvectorである場合、ステップS34に処理が進む。vectorでない場合、ステップS32で選択した変数宣言によって特定される変数がvector型二次元配列でないと判定され、ステップS36に処理が進む。
(S36)最適化部135は、ステップS32で関数内の全ての変数宣言を選択したか判断する。全ての変数宣言を選択した場合はステップS37に処理が進み、未選択の変数宣言がある場合はステップS32に処理が進む。
このフラグ変更処理挿入は、前述のステップS19で実行される。
(S40)最適化部135は、コンパイル単位(例えば、着目している関数)の中から、vector型二次元配列のサイズが変わるようなvectorライブラリ関数の呼び出しを検索する。vector型二次元配列のサイズが変わるとは、行数および列数の少なくとも一方が変わることであり、行数または列数が増加する場合と行数または列数が減少する場合とを含む。サイズが変わるようなvectorライブラリ関数には、サイズを明示的に指定するresize()、末尾に要素を追加するpush_back()、要素を削除するclear()、途中に要素を追加するinsert()などが含まれる。
(S42)最適化部135は、ステップS41で選択したvectorライブラリ関数呼び出しの直前に、matrixフラグをOFFに設定する命令を挿入する。また、最適化部135は、vectorライブラリ関数呼び出しの直前に、matrix領域174からvector型二次元配列の領域に要素をコピーし、matrix領域174を削除する命令を挿入する。matrixフラグを書き換える命令と要素をコピーする命令は、何れを先に実行するようにしてもよい。matrixフラグを書き換える命令と要素をコピーする命令は、matrixフラグがONであるときに高々1回実行されるようにする。このために、最適化部135は、現在のmatrixフラグを確認しmatrixフラグに応じて分岐する制御構造を挿入するようにしてもよい。
(S46)最適化部135は、ステップS45で選択したユーザ関数呼び出しの呼び出し先ユーザ関数を、ステップS11で取得した呼び出し関係グラフを参照して特定する。最適化部135は、呼び出し先ユーザ関数内でのvector型二次元配列の使用状況を示す情報を取得する。なお、呼び出し先ユーザ関数が更に別のユーザ関数を呼び出している場合、最適化部135は再帰的に呼び出し先ユーザ関数を追跡する。
11 記憶部
12 処理部
13 ソースコード
13a,13c 配列処理
13b サイズ変更処理
14 実行プログラム
14a,14b,14c コード
15 可変長配列
16 固定長配列
Claims (6)
- コンピュータに、
可変長配列を使用する第1の配列処理と、前記第1の配列処理の開始後に前記可変長配列のサイズを変更するサイズ変更処理とが記述されたソースコードを取得し、
前記第1の配列処理の記述に基づいて、前記可変長配列に対応する固定長配列を使用する第2の配列処理と前記第1の配列処理とを選択的に実行させる第1のコードを生成し、また、前記第1のコードの初期状態として前記第1および第2の配列処理のうち前記第2の配列処理が選択されるよう制御する第2のコードを生成し、
前記サイズ変更処理が記述された位置に対応させて、前記固定長配列に格納されているデータを前記可変長配列に移動させ、前記第1のコードにおいて前記第2の配列処理から前記第1の配列処理に切り替えられるよう制御する第3のコードを生成し、
前記第1、第2および第3のコードを含む実行プログラムを生成する、
処理を実行させるコンパイルプログラム。 - 前記第1のコードは、所定のメモリ領域に記憶されたフラグが第1の値のとき前記第1の配列処理を実行させ、前記フラグが第2の値のとき前記第2の配列処理を実行させ、
前記第2のコードは、前記フラグを前記第2の値に設定し、
前記第3のコードは、前記フラグを前記第1の値に変更する、
請求項1記載のコンパイルプログラム。 - 前記所定のメモリ領域は、前記可変長配列に割り当てられる他のメモリ領域を基準として所定の相対位置に存在するメモリ領域である、
請求項2記載のコンパイルプログラム。 - 前記可変長配列は、少なくとも1つの次元の要素数が可変である可変長多次元配列であり、前記固定長配列は、各次元の要素数が不変である固定長多次元配列である、
請求項1記載のコンパイルプログラム。 - コンピュータが実行するコンパイル方法であって、
可変長配列を使用する第1の配列処理と、前記第1の配列処理の開始後に前記可変長配列のサイズを変更するサイズ変更処理とが記述されたソースコードを取得し、
前記第1の配列処理の記述に基づいて、前記可変長配列に対応する固定長配列を使用する第2の配列処理と前記第1の配列処理とを選択的に実行させる第1のコードを生成し、また、前記第1のコードの初期状態として前記第1および第2の配列処理のうち前記第2の配列処理が選択されるよう制御する第2のコードを生成し、
前記サイズ変更処理が記述された位置に対応させて、前記固定長配列に格納されているデータを前記可変長配列に移動させ、前記第1のコードにおいて前記第2の配列処理から前記第1の配列処理に切り替えられるよう制御する第3のコードを生成し、
前記第1、第2および第3のコードを含む実行プログラムを生成する、
コンパイル方法。 - 可変長配列を使用する第1の配列処理と、前記第1の配列処理の開始後に前記可変長配列のサイズを変更するサイズ変更処理とが記述されたソースコードを記憶する記憶部と、
前記第1の配列処理の記述に基づいて、前記可変長配列に対応する固定長配列を使用する第2の配列処理と前記第1の配列処理とを選択的に実行させる第1のコードを生成し、また、前記第1のコードの初期状態として前記第1および第2の配列処理のうち前記第2の配列処理が選択されるよう制御する第2のコードを生成し、前記サイズ変更処理が記述された位置に対応させて、前記固定長配列に格納されているデータを前記可変長配列に移動させ、前記第1のコードにおいて前記第2の配列処理から前記第1の配列処理に切り替えられるよう制御する第3のコードを生成し、前記第1、第2および第3のコードを含む実行プログラムを生成する処理部と、
を有する情報処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016235497A JP6718119B2 (ja) | 2016-12-05 | 2016-12-05 | コンパイルプログラム、コンパイル方法および情報処理装置 |
US15/785,480 US10101980B2 (en) | 2016-12-05 | 2017-10-17 | Compilation method and information processing apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016235497A JP6718119B2 (ja) | 2016-12-05 | 2016-12-05 | コンパイルプログラム、コンパイル方法および情報処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018092383A JP2018092383A (ja) | 2018-06-14 |
JP6718119B2 true JP6718119B2 (ja) | 2020-07-08 |
Family
ID=62243852
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016235497A Active JP6718119B2 (ja) | 2016-12-05 | 2016-12-05 | コンパイルプログラム、コンパイル方法および情報処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10101980B2 (ja) |
JP (1) | JP6718119B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868912B2 (en) | 2020-02-06 | 2024-01-09 | Samsung Electronics Co., Ltd. | Multi-device based inference method and apparatus |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10509653B2 (en) * | 2017-02-10 | 2019-12-17 | Intel Corporation | Vector processing system |
JP7060803B2 (ja) * | 2018-06-20 | 2022-04-27 | 富士通株式会社 | 情報処理装置、コンパイラプログラム及びコンパイル方法 |
CN111580828B (zh) * | 2020-04-30 | 2021-08-27 | 腾讯科技(深圳)有限公司 | 机器学习模型的编译优化方法和装置 |
US11899588B2 (en) * | 2020-09-14 | 2024-02-13 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for discarding inactive intermediate render targets |
US11748251B2 (en) * | 2021-01-08 | 2023-09-05 | Microsoft Technology Licensing, Llc | Storing tensors in memory based on depth |
US11847435B2 (en) * | 2021-12-20 | 2023-12-19 | International Business Machines Corporation | Feedback-directed pass pipeline optimization in static compilation |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2988394B2 (ja) * | 1995-10-19 | 1999-12-13 | 日本電気株式会社 | 可変長オブジェクトのデータベース処理装置、データベース処理方法、およびデータベース処理プログラムを記憶する記憶媒体 |
JPH10177566A (ja) * | 1996-10-18 | 1998-06-30 | Fujitsu Ltd | メモリアクセスの高速化処理装置および記録媒体 |
JP3551353B2 (ja) | 1998-10-02 | 2004-08-04 | 株式会社日立製作所 | データ再配置方法 |
JP3355602B2 (ja) | 1999-01-27 | 2002-12-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 多次元配列オブジェクトの処理方法及び装置 |
JP2007328692A (ja) | 2006-06-09 | 2007-12-20 | Canon Inc | 代数演算方法及びその装置、プログラム |
JP2008003882A (ja) | 2006-06-23 | 2008-01-10 | Fujitsu Ltd | コンパイラプログラム,リストベクトルの領域割当て最適化方法,コンパイル処理装置およびコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US8782613B2 (en) * | 2008-08-12 | 2014-07-15 | Hewlett-Packard Development Company, L.P. | Optimizing applications using source code patterns and performance analysis |
US9535826B2 (en) * | 2013-08-30 | 2017-01-03 | Nec Corporation | Automatic communication and optimization of multi-dimensional arrays for many-core coprocessor using static compiler analysis |
-
2016
- 2016-12-05 JP JP2016235497A patent/JP6718119B2/ja active Active
-
2017
- 2017-10-17 US US15/785,480 patent/US10101980B2/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868912B2 (en) | 2020-02-06 | 2024-01-09 | Samsung Electronics Co., Ltd. | Multi-device based inference method and apparatus |
Also Published As
Publication number | Publication date |
---|---|
JP2018092383A (ja) | 2018-06-14 |
US20180157470A1 (en) | 2018-06-07 |
US10101980B2 (en) | 2018-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6718119B2 (ja) | コンパイルプログラム、コンパイル方法および情報処理装置 | |
KR100384905B1 (ko) | 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 | |
JP5147280B2 (ja) | 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法 | |
JP6572610B2 (ja) | 情報処理装置、コンパイル方法およびコンパイルプログラム | |
JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
US8423589B2 (en) | Copy collector with efficient abort-on-copy transition to mark collector | |
US20090187896A1 (en) | Compiler device, program, and recording medium | |
Tofte et al. | Programming with regions in the ML Kit (for version 4) | |
JP2013206291A (ja) | プログラム、コード生成方法および情報処理装置 | |
Prokopec et al. | Making collection operations optimal with aggressive JIT compilation | |
US20210165643A1 (en) | User Interface Resource File Optimization | |
US6925636B2 (en) | Method and apparatus for refining an alias set of address taken variables | |
US5745749A (en) | Method and system of file version clustering of object blocks using a compiler and database and having a predetermined value | |
Barua et al. | Ompmemopt: Optimized memory movement for heterogeneous computing | |
Bik et al. | The automatic generation of sparse primitives | |
Liu et al. | Improving the performance of OpenMP by array privatization | |
JP2022140995A (ja) | 情報処理装置、コンパイルプログラムおよびコンパイル方法 | |
Bartell et al. | Guided linking: dynamic linking without the costs | |
Hnat et al. | A modular and extensible macroprogramming compiler | |
JP2019144857A (ja) | 情報処理装置、コンパイル方法およびコンパイルプログラム | |
JPH10275088A (ja) | リンク最適化方法 | |
EP0180077A2 (en) | A data processing machine for compiling computer programs | |
KR100763199B1 (ko) | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 | |
JP7225900B2 (ja) | コンパイラ装置、プログラム、及び情報処理方法 | |
van der Spek et al. | Automatic restructuring of linked data structures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190807 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20190815 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20190815 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20200416 |
|
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: 20200512 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20200525 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6718119 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |