マルチコアで処理時間短縮の前にやるべきこと組み込みマルチコア進化論(1)(2/4 ページ)

» 2008年11月05日 00時00分 公開
[塚田 雄一 キャッツ,@IT MONOist]

並列化可能部分のソフトウェア性能見積もり

 組み込みソフトウェアの性能見積もりは、次の2つに着目します。

  1. 性能要求を満たすためのリアルタイム性を十分に確保する
  2. 特別に時間のかかる処理がある部分について高速化を検討する

 このような性能要求に対しては、ターゲットで動作させてみなくては分かりません。ターゲットが完成する前には、CoSimulation環境などの仮想環境を用意するか、もしくはWindows(パソコン)環境などにおいてある程度の性能見積もりを行うことなどが考えられます。

 ここでは、コアの数を決定する際に必要な性能見積もりについて記します。見積もりを行うには、まず次に記す「アムダールの法則(注)」の知識が必要です。

式
注:アムダールの法則
ジーン・アダムール(Gene Amdahl)氏によって1967年に提唱されたもので、並列化によるコンピュータの処理性能の向上は、並列化できず逐次実行するしかないタスクに制約を受けてしまう。従って並列化可能な部分が多い場合は、使用するコアの数を増やし並列処理を行うことで性能アップが望めるが、並列化できない部分が多い場合は、使用するコアの数を増やしても大きな性能アップは望めない。


 ここで重要なのは「コアの数を決定するには、並列化可能な部分の比率が重要である」ということです。むやみにコアの数を増やしても、ソフトウェアにおいて並列化可能でなければその性能を生かすことはできません。コアの数を決定するには、ソフトウェア開発における並列化可能部分の割合見積もりが必要になります。

並列化可能な部分が全体の80%の場合

 並列化が可能な部分が80%で、それを4分割した場合を考えてみましょう。並列化可能な部分が80%なので、並列化不可能な部分は全体の20%ということになります。並列化可能な部分のコアを4分割して4倍の性能アップを行うと、80%が4倍に性能アップするため、20%の時間で処理が完了します。そして、並列化不可能な部分を加えた全体の処理時間は40%となり、並列化以前と比べ2.5倍の性能になります。

80%並列化可能な場合の性能向上率 図3 80%並列化可能な場合の性能向上率

並列化可能な部分が全体の40%の場合

 次に、並列化が可能な部分が40%で、それを4分割した場合を考えてみましょう。並列化可能部分が40%なので、並列化不可部分は全体の60%ということになります。並列化可能部分を4分割し4倍の性能アップを行うと、40%が4倍に性能アップするため、10%の時間で処理が完了します。そして、並列化不可部分を加えた全体の処理時間は70%となり、並列化以前と比べる約1.429倍の性能になります。

40%並列化可能な場合の性能向上率 図4 40%並列化可能な場合の性能向上率

 よって並列化を4分割で行う場合、上記の結果から分かるように、並列化可能な部分が80%なら2.5倍の性能が望めますが、並列化可能な部分が40%なら約1.429倍の性能アップしか望めません。並列化可能な部分の割合がいかに重要であり、全体のシステム性能を考えた場合に単にコアの数を増やしただけでは性能アップは困難だということが分かります。性能UPにはソフトウェアの構造が大きく影響し、またシステムにおけるコアの数を決定するにはソフトウェアにおける並列化可能部分の見積もりが必要だということになります。

並列化による処理時間カイゼン効果

 全体の性能を考えた場合、最も効果のあるポイントで分割を行うことが重要となってきます。それらの一例を紹介します。まず、ソースコードの繰り返し処理の部分では繰り返し処理が実行されるため、実際の実行ステップは多くなり、その結果処理時間は長くなります。こうした実際の処理時間が多くかかっている部分を高速化した方が性能アップの効果が期待できます。

処理時間の長い部分の並列化による効果 図5 処理時間の長い部分の並列化による効果
処理時間の短い部分の並列化による効果 図6 処理時間の短い部分の並列化による効果

 全体の処理時間が60%の部分を4つに並列化することで、45%の高速化が期待できます。しかし、全体の処理時間が10%部分を4つに並列化した場合は、7.5%の高速化しか期待できません。つまり、処理時間の長い部分について高速化を検討した方高速化による効果が期待できます。

Copyright © ITmedia, Inc. All Rights Reserved.