LSIマルチコア時代のソフトウェア開発の落とし穴とその対策 ―― 電力や性能が改善しない,まさにデスマーチのこの状態にどう対処するか
●学術的な施策もあるけど,製品開発者のジレンマもある
これらの課題を解決するため,コンパイラやプログラミング・モデル,評価分析メソッドなど,古くからさまざまな研究が行われています.ここでは,これらの解説は割愛します.
さて,実際の開発現場ではスクラッチからすべてのコード開発を行う場合はまれで,多くの場合,「ソフトウェアは流用するもの」という観点から,既存のソース・コードを改造していくことになります.その一方で,「ソフトウェアはハードウェアよりも硬い」と言われるほど,ソフトウェアの改版には慎重を期する必要があります.多くのエンジニアはマルチコア環境への移行にあたって,こうしたジレンマに直面しています.
いろいろな対策手法が考えられますが,「アプリケーションは基本的にいじらない」という条件のもとで,対策を考察していこうと思います.
そもそも並列処理とは,ソフトウェアを負荷分散して並列に実行することです.しかし,やみくもにソフトウェアを並列化しても,落とし穴にはまるという話をこれまで述べてきました.それでは思い切って,負荷分散を行わないマルチコア運用環境というものを考えてみましょう.
前述したセンテンスを振り返ると,「シングル・コアのときは電力制御が容易だった」,「マルチコア環境の非明示的なオーバヘッド」という表現がありました.図6をイメージしてもらうと,負荷分散を行わないケースでは,この二つの課題を一気に解決しています.しかし,あくまでもマルチコア環境なので,並列動作させることが有効な範囲もあるはずですから,図6のような二つの状態の切り分けポイントを探すことになります.
図6 負荷分散を行わないマルチコア運用環境
実際のインプリメンテーションでは,この切り分け部分をしきい値として,OSなどのスケジューリング機構に手を入れることになります.ただし,直接OSを改造しなくても,OSのアフィニティ(関係)などの設定を変えて強制的にコアを指定することで,任意のスレッドやプロセスに対して効力が及び,基本的にアプリケーション構造をいじることなく間接的に負荷分散を行わない状態を作ることができます.
先ほど非明示的オーバヘッドを評価したときに,メモリ・アクセスの領域(フットプリント)をパラメータにとったので,ここでもフットプリントをパラメータに用いてみます.図7はこれらを実機のボードで実行した結果になります.インプリメンテーションの方法としては,新たに生成されるスレッドやプロセスのフットプリントをあらかじめプロファイラなどで把握しておき,実際にディスパッチされるタイミングで,強制的に1個所のコアに集めるか(負荷分散を行わない),あるいは通常のOSのスケジューラに任せるか(負荷分散を行う)を切り分けただけです.
メカニズムとしては,任意に生成されるスレッドやプロセスに対しても,オーバヘッド特性に悪影響が及ぶケースでは,シングル・コアで動作している状態にしてしまえ,というものです.
図7 負荷分散 vs 負荷分散しない実行結果
この結果をみると,実は負荷分散しないほうが有効なケースが見えてきました.性能比でみると,ほぼ何もしていないのに最大で約2割向上していることになります.
これは対策の一例に過ぎませんが,落とし穴から脱出する一つの方策として,「マルチコアだから並列処理しなければいけない」という考え方を,いったん忘れてみようということです.
すなわち,定石的アプローチが対策ではない,ということですね.
ほかにも,メモリ・フットプリントを抑えることがチューニングの定石であれば,あえてメモリ利用を冗長化することで性能改善する仕組みなどがあります.詳しくは,またの機会,あるいはセミナなどで解説を行っていきたいと思います.
●参考文献
(1) 笠原博徳;「並列処理技術」コロナ社 ISBN-10:4339022969
(2) Koichiro Yamashita; "A software centric system design for multicore SoC in the upstream phase" 2010年 IEEE ISBN 987-1-60558-837-7
(3) 栗原,山下他;「次世代携帯端末向けSMPスケジューリング技術」2011年電子情報通信学会集積回路研究会
(4) 寺西,山下他;「冗長性を許容したハード・ソフト強調の最適設計と検証」2011年電子情報通信学会集積回路研究会
(5) 大友,山下他;「メモリの冗長化とパワーゲーティングによる高信頼・低消費電力・高性能実装の提案」2012年情報処理学会アーキテクチャ研究会
やました・こういちろう
(株)富士通研究所
プラットフォームテクノロジー研究所 主管研究員