とぴやまのブログ(アーカイブ)

元はてなダイアリー

リアルタイムシステムでマルチコアプロセッサをどう動かそうか、それが問題だ。

既に、先週の事になってしまったが、 ARM セミナー 2005 に行ってきた。

「組み込み用マルチコア用コンパイラ技術」を聞きたくて参加した。OpenMP、並列化処理について、とても濃い内容だが時間が無くて駆け足だったのが悔やまれる。「OpenMP」についてはネットからでも情報を入手できるだろうから、そちらに任せて、ここでは書かない。

ARM についても、私は仕事で触っていないので、詳しい事情は殆ど知らない。下記URLの記事にあるとおりだろうから、素人の私はここでは書かない。
http://www.atmarkit.co.jp/fsys/zunouhoudan/058zunou/arm_biz.html
■頭脳放談 第58回 好調なARMの次なる一手


でここでの本題は、セミナを受けて、組み込みソフト、しかも制御・リアルタイムOSで扱う組み込みプロセッサのマルチコア化がいよいよ迫ってきた、それをどう使っていこうか? ということだ。(以下、「マルチコア」という単語はSMP(対称型マルチプロセッサ) の意味で使う。)


マルチコア化は、今現在は性能向上のために使われるが、今後はコスト削減のために使われていくのだという。

サーバの世界では「スケールアップ」と「スケールアウト」という言葉があるらしいが、まさに「スケールアウト」の方法論である。複数マシンを管理する手間が余計にかかるものの、逆に複数あることで発生する冗長性という付加価値。そしてそれぞれのマシンの単品での安さが「スケールアウト」のメリット。

プロセッサも同様に、高クロックで高性能なコアを1つ配置するより、それほどでもない性能で機能のプロセッサコアを複数用意することで省電力化できたり、半導体の歩留まりを上げられたり出来る。*1 歩留まりが上がれば安くなる。低コスト化だ。

量産コストを低くすることがお題目の組み込みシステム、このマルチコア化によるプロセッサの低コスト化の波に従わない訳はない。

よって、高速な演算処理が必要なアプリケーション処理用プロセッサでなくても、制御用プロセッサでもマルチコア化されることが推測できる。


そこで迷うのは、どうやってマルチコアを使っていくかだ。

制御システム、リアルタイムOSを使うような組み込みシステムでは、どのCPUにどの処理を割り振るか、その中の1つのCPUが受け持つ処理を優先度付スレッドでどう割り振るか、
というのはシステムデザインであり、システム性能――応答時間――に関わる重要な要素。

そういう観点から見ると、並列化はともかく、処理の動的割り当て機能なんて、勝手に実行時間が変わってしまうようなものは、まっぴら御免だ。

線形的な予想なら(これまで通りの方法論で行くなら)、スレッドにプロセッサ割り当て*2 を行って実装していくんだろう。完全にヘテロで使って、別々のソフトを走らせるのもアリ。全く使わないのもアリか? どうするだろう?

マルチコアを扱えるリアルタイムOSへの移行も考えなくてはいけない。3〜5年後あたりの未来の差し迫った問題だ。

*1:ここら辺は、CellのSPEを7つだけ使用する話題を参照 http://pc.watch.impress.co.jp/docs/2005/0518/kaigai180.htm

*2:このスレッドはプロセッサAで動かす、このスレッドはBだ、とソフトで明示的に動作プロセッサを指定すること