自動チューニングソフトウエア工学
2005年9月14日 片桐孝洋
2006年8月15日 改訂
1.はじめに
自動チューニングソフトウエア工学とはなんであろうか。私は、この新分野はソフトウエア工学の範疇にあると考える。では、ソフトウエア工学とはどのような分野であろうか。元京都大学教授の松本吉弘氏が著した、「ソフトウェアの考え方・作り方」(電気書院、1981)からの引用をすると、ソフトウエア工学の活動形態の定義は以下である:
『一般に工学とは科学によって発見された普遍的法則を工業生産に応用し、生産を質的、量的に向上させるための体系化技術と考えられている。ソフトウェア工学が工学と称するからには、他の工学とある深さで目的を同じくするものを扱う必要がある。しかしソフトウェアにおける普遍的法則とは自然法則に関するものではなくて、人の思考なり、理念というような抽象世界における普遍的法則であることを考慮せねばならない。
つまるところ、ソフトウェア工学とは、ソフトウェアの問題分析・設計・製作・運用・維持という過程における人の知的活動の中から、他の工学分野における自然法則(たとえば発電工学におけるファラディの電磁誘導方程式)に匹敵する普遍則を見出し、これをもとにした工学体系を作り上げ、工業生産に応用する活動形態であるという考えが妥当と考えられる。
ソフトウェア工学によって体系化された知識が、ソフトウェアの問題分析・設計・製作・運用・維持といった各段階で、どのように使われるのであろうか、その方法を体系化したものが方法論(methodology)である。方法論もソフトウェア工学の重要な一分野である。(p.11)』
この定義は、著者らが提唱してきた「ソフトウエア自動チューニング」の概念と一致する。松本吉弘氏の定義を拝借するなら、自動チューニングソフトウエア工学の活動形態の定義は、以下のようになる:
自動チューニングソフトウエア工学とは、高性能を達成するソフトウェアの問題分析・設計・製作・運用・維持という過程における人の知的活動の中から、他の工学分野における自然法則(たとえば発電工学におけるファラディの電磁誘導方程式)に匹敵する普遍則を見出し、これをもとにした工学体系を作り上げ、工業生産に応用する活動形態である。
自動チューニングソフトウェア工学によって体系化された知識が、高性能なソフトウェアの問題分析・設計・製作・運用・維持といった各段階で、どのように使われるのであろうか、その方法を体系化したものが方法論(methodology)である。方法論も自動チューニングソフトウェア工学の重要な一分野である。
しかしながら、従来のソフトウエア工学の主な対象は大規模ソフトウエア開発であり、自動チューニングソフトウエア工学のそれは性能チューニングであるという違いを認めなくてはならない。この性能チューニングは、従来のソフトウエア工学が直接の対象にせず、後回しの課題にしたテーマであるといえる。この事実は、多くのソフトウエア工学の教科に出てくる以下のような記述に総括される:
高速なプログラムを作成するために、アルゴリズムがわからなくなるような、複雑なコーディングやソフトウエア設計は避けるべきである。バグのないプログラミングや、シンプルな設計をまず行ったうえで、それから性能チューニングをおこなうべきである。
ところが、近年注目を浴びている組み込みハートウエア上のソフトウエア(組み込みソフトウエア)の開発では、この定石は成り立たなくなってきた。つまり、性能(処理の実行時間)の要因が、ソフトウエア開発が成功するか失敗するかという中心的課題となったのである。
2.自動チューニングソフトウエア工学の全体像
図1に、自動チューニングソフトウエア工学の全体像を示す。
図1 自動チューニングソフトウエア工学の全体像
図1から、自動チューニングソフトウエア工学には、
1.仕様設計フェーズ
2.プログラミングフェーズ
3.最適化フェーズ
4.チューニング知識探索・データベース化フェーズ
がある。
この自動チューニングソフトウエア工学におけるソフトウエア開発サイクルにおいて、高性能を達成するソフトウエアを、(1)いかに効率良く、かつ(2)どのような計算機環境においても高性能である(性能可搬性を保証する)ように構築するか、という学問体系が「自動チューニングソフトウエア工学」なのである。
自動チューニングソフトウエア工学は、横断的な工学技術を必要とする。
たとえば、1.仕様設計フェーズ、2.プログラミングフェーズのためには、計算機言語工学が必要である。3.の最適化フェーズのためには、数理工学、計算機言語処理工学、計算機システム工学(OS、コンパイラ、ミドルウエア)が必要である。また、4.チューニング知識探索・データベース化フェーズのためには、知識システム工学(データベースからの知識発見・機械学習)およびデータベース工学が必要となる。さらに他人が利用したチューニング知識(チューニング知識データベース)の活用を2.最適化フェーズで利用することを考慮すると、P2P技術に代表されるネットワーク工学が必要となる。
また、過去のチューニング知識を仕様設計に生かすこと(4.チューニング知識探索・データベース化フェーズ → 1.仕様設計フェーズ へのフィードバック)も、自動チューニングソフトウエア工学の重要な技術要項である。このフィードバックを伴うソフトウエア開発サイクルは、従来のソフトウエア開発サイクルと異なるものであり、自動チューニングソフトウエア工学で要請される、新しいソフトウエア開発モデルと考えられる。
以上のように、自動チューニングソフトウエア工学を実現するためには幅広い工学の要素技術を必要とするばかりでなく、ソフトウエア工学的観点からみても挑戦的で新規性のある技術を必要とする。
3.既存技術
以下、著者らが関連した自動チューニングソフトウエア工学技術をまとめる。
方法論:
自動チューニングソフトウエア構成方式 FIBER;
自動チューニングポリシー;
性能安定化機構;
問題分析: なし
設計:
自動チューニング機能記述言語 ABCLibScript
製作:
自動チューニング機能プログラム自動生成ソフトウエア ABCLibCodeGen:ABCLibScriptのプリプロセッサ
運用: なし
維持:
実行時自動チューニングミドルウエア RAO-SS
自動チューニングソフトウエア工学を真に達成するには、まだまだ多くの要素技術の新規開発が必要となる。
4.おわりに
本稿では、著者らが従来から提唱してきた「ソフトウエア自動チューニング」の研究分野は、ソフトウエア工学の範疇にあることを示した。この新分野を、「自動チューニングソフトウエア工学」とよぶ。
従来のソフトウエア工学は大規模ソフトウエア開発を焦点にしているのに対して、自動チューニングソフトウエア工学のそれは性能チューニングにある。この点において、学術的観点からの再検討が必要である。
現在重要な工学技術の1つである組み込みソフトウエアの開発技術においては、処理時間における工学的制約がはいるため、自動チューニングソフトウエア工学の技術が活用できる可能性がある。
また、自動チューニングソフトウエア工学を実現するためには、幅広い工学の要素技術を必要とするばかりでなく、ソフトウエア工学的観点からみて新規性のある技術を必要とする。挑戦的な技術分野である。