情報処理学会第 75 回全国大会

4A-8

4A-8

関数毎のプラグマ指定によるコンパイラの最適化オプションセット探索
大城 亮 † 石浦 菜岐佐 †† 関西学院大学 理工学部 情報科学科

はじめに1123456789101112131415

多くのコンパイラでは，実装されている最適化処理をオプションで制御できる．最適化の効果はソースコードの性質に依存するため，与えられたプログラムに対して最適なオプションセット (オプションの組み合わせ) を探索する研究が種々行われている．反復改善手法 [1, 2, 3] や機械学習 [4] により，プログラムの計算時間やメモリ使用量，消費電力等を最小化する試みが種々行われているが，いずれの研究においてもオプションセットはプログラム単位で指定されている．
これに対し本稿では，オプションセットを関数単位#include <stdio.h>void func1();
void func2();
int main(void){func();
return 0;}#pragma GCC optimize("align-jumps","gcse")
void func1(){··· ;}#pragma GCC optimize("no-inline-functions")
void func2(){··· ;}で指定する探索手法を提案する．コンパイラに実装されているプラグマ記述を利用することにより，関数単図 1: プラグマによる最適化オプションの指定例

位でのオプションセット指定を実現する．シミュレー
テッドアニーリングを利用した反復改善手法プログラ
ムを実装した結果，対象プログラムについてメモリ使

3

本稿では，プログラム単位ではなく関数単位でオプ用量を平均約 1.72% 削減できた．

ションセットを指定する手法を提案する．関数毎の最最適化オプションセットの探索

2

関数毎の最適化オプションセット指定

コンパイラには多くの最適化処理が実装されているが，その効果は対象となるプログラムやアーキテクチャの特徴に依存する．そのためコンパイラによっては個々の最適化処理をオプションで制御できるようにしている．例えば GCC バージョン 4.7 には 181 個の最適化オプションがあり，個々の最適化処理の適用/非適用をコマンドラインオプションで制御できる．
この最適化オプションセットをプログラムやアーキテクチャに合わせて調整することにより，計算時間やメモリ使用量，消費電力等の削減が図れる．オプションが多いと人手による調整は困難であるため，反復改善手法や機械学習を用いたオプションセット探索が研究されている [1, 2, 3, 4]．
これらの研究では，プログラム単位でオプションセットを指定することが前提となっている．しかし，プログラム中に性質の異なる関数が混在している場合には，適化オプションセット指定は，GCC 等に実装されているプラグマ記述により行う．
図 1 は GCC におけるプラグマ指定の例である．8行目と 12 行目のプラグマは，それぞれ直下にある関数

func1 と func2 に作用する．
「optimize」は最適化オプションの指定を意味し，関数 func1 に -falign-jumpsと -fgcse ，関数 func2 に -fno-inline-functionsが適用される．コマンドラインの指定とプラグマ指定が競合した時には，プラグマ指定が優先される．図 1のファイルに対して -finline-functions をコマンドラインから指定した場合，関数 func2 にはプラグマで該当処理の非適用 (no-inline-functions) が指定してあるため，インライン展開の処理は行われない．
このように各関数の冒頭にオプションセットを指定するプラグマを挿入することにより，関数単位で最適のオプションセットを設定することができる．

4

十分な効果が得られない可能性がある．

メモリ使用量最小化を目的とした探索
本 稿 で は ，シ ミュレ ー テッド ア ニ ー リ ン グ を 利††

Automatic Selection of Compiler Optimization Options for Individual Functions
Ryo OhkiNagisa Ishiura
School of Schiense and Technolgy. Kwansei Gakuin University (†)

用した反復改善手法によりメモリ使用量を最小化 す る オ プ ション セット を 求 め る ．オ プ ション の個 数 を m 個 ，関 数 の 個 数 を k 個 と し た 場 合 ，(s1 , · · · , sm , (t1,1 , · · · , t1,m ), · · · , (tk,1 , · · · , tk,m )) を

2-1 Gakuen, Sanda, Hyogo 669-1337, Japan

1-55

Copyright 2013 Information Processing Society of Japan.
All Rights Reserved.

情報処理学会第 75 回全国大会[5] の結果，そして「本手法」が提案手法による数値である．列「Total」がメモリ使用量で，本稿における最小化目標である．列「Ratio」は -Os の「Total」をシミュレーテッドアニーリングの一状態とする．ただし，si = 1(0) はコマンドラインに指定する i 番目オ
プションの適用 (非適用) を表し，tj,i は j 番目の関数
また si , tj,k いずれかの値の 0 → 1，0 → 1 変化を状100 としたときの比であり，列「CPU」は探索に要した CPU 時間である．提案手法では，従来手法と比較態遷移とする．

して 3 倍から 100 倍の探索時間が必要となるが，対象に対する i 番目のオプションの適用 (非適用) を表す．

プログラムに対して平均約 1.72% メモリ使用量を削

本稿では，[5] と同様に探索目的をメモリ使用量の最小化とする．メモリ使用量は ROM と RAM の使用量減できた．の合計値とする．ROM の使用量は text セクション，6

data セクションおよび rodata セクションのサイズの本稿では，関数毎プラグマ指定によるコンパイラの和であり，RAM の使用量は data セクション，bss セ最適化オプション探索手法を提案した．4 つのプログクションおよびスタックのサイズの和である．各セクラムについて探索した結果，メモリ使用量を平均約

ションのサイズはオブジェクトコードのヘッダから取1.72% 削減できた．

得できる．スタックサイズはアセンブリ命令列から算今後の課題としては，探索収束までの時間の短縮や，出する．

5むすび実行時間の短縮への適用などが挙げられる．

実装と実験

参考文献
[1] Z. Pan and R. Eigenmann: “Fast and effective orchestration of compiler optimizations for automatic performance tuning,” in Proc. CGO, pp. 319–332 (Mar.
2006).

以上の手法に基づき，与えられたプログラムに対する最適なオプションセットを探索するプログラムを

Perl 5.10 で実装した．探索アルゴリズムには適応的温度調節機能を持つ温度並列シミュレーテッドアニー
リング [6] を利用した．コンパイラには arm 用 GCC[2] R. P. J. Pinkers, P. M. W. Knijnenburg, M. Haneda,
and H. A. G. Wijshoff: “Statistical selection of compiler options,” in Proc. MASCOTS, pp. 494–501(Oct. 2004).のバージョン 4.7.0 を使用した．このコンパイラの最適化オプションは全部で 181 個あるが，プラグマを使[3] M. Haneda, P. M. W. Knijnenburg, and H. A. G.
Wijshoff: “Code size reduction by compiler tuning,”
in Proc. SAMOS, pp. 186–195 (July 2006).

用した際にエラーが発生する 13 個を除外した 168 個で探索を行った．

[4] E. Park, S. Kulkarni, and Johne Cavazos: “An evaluation of different modeling techniques for iterativecompilation,” in Proc. CASES, pp. 65–74 (Oct. 2011).

実験結果を表 1 に示す．列「Prog」は対象プログラ
ム名である．
「 sha 」，「 rijndael 」，「 blowfish 」 はMiBench のセキュリティ部門に，vfprintf は「 newlib[5] 大城亮，石浦 菜岐佐: “メモリ使用量最小化を目的としたコンパイラの最適化オプションセットの探索,” 信学ソ
大 A-3-14 (Sept. 2011).

」に含まれるプログラムである．列「Func」が対象プ
ログラム中に含まれる関数の個数である．列「OP」の[6] 三木光範, 廣安知之, 輪湖純也, 吉田武史: “適応的温度調節機能を持つ温度並列シミュレーテッドアニーリング,”
65 回情報処理学会全国大会, 5Y–6 (Mar. 2003).

うち「-Os」が GCC の -Os オプションの結果であり「従来」が同じ探索手法でプログラム単位に指定する

表 1: 実験結果
Prog

Func

sha2

rijndaelAES

4

blowfish9

vfprintf

2

OP-Os
従来
本手法
-Os
従来
本手法
-Os
従来
本手法
-Os
従来
本手法text
1240
1100
1076
33310
32794
32682
5192
9160
8988
6616
5976
5854

data
0
0
0
8
88
4172
4
4
0
00

bss
0
0
0
12
12
12
0
0
0
0
00

Size[B]
stack
ROM
52
1240
52
1100
44
1076
60
33318
68
32802
68
32690
172
9364
180
9164
168
8992
36
6616
36
5976
36
5854

1-56

RAM
52
52
44
80
88
88
4344
184
172
36
36
36

Total
1292
1152
1120
33398
32890
32778
13708
9348
9164
6652
6012
5890

Ratio
100.0
89.1
86.6
100.0
98.4
98.1
100.0
71.0
66.8
100.0
90.3
88.6

CPU[s]3544.9
11187.4
19441.9871415.9
0.320860.2
201368.6
1385.7142237.3

Copyright 2013 Information Processing Society of Japan.
All Rights Reserved.