MAGAZINE ARTICLES
このページをホームページに登録
マイクロプロセッサフォーラム・ジャパン2007より
ソフトウエアのマルチコア対応を容易化する
[2007年08月号]マルチコアプロセッサは、シングルコアプロセッサと比較して消費電力や性能の面で優れている。しかし、マルチコアプロセッサを利用する上では、プログラムの記述が難しい、あるいはデバッグ方法が確立されていないといった課題がある。ここでは、こうした課題に対する取り組みに関して、同フォーラムの講演やその後の取材を通して得られた情報をピックアップしてまとめてみたい。
優れたコンパイラに任せる
米Stream Processors社の「Storm-1 SP16HP」は、ストリーム処理型のアーキテクチャを採用したプロセッサである。16個のDPU(data parallel unit)と2つのMIPS系プロセッサコアで構成され、個々のDPUは、5個の32ビットALU(arithmetic logic unit)や256Kバイトのレジスタファイルなどを備える。これによって700MHz動作で最大112ギガMAC/秒の高い演算能力を実現する。このように多数の演算器を備えるプロセッサの場合、演算能力を最大限に引き出すように最適化されたプログラムを記述するのは非常に困難な作業となる。
Stream Processors社は、コンパイラ技術によってこの課題に対応している。プログラミングを容易にするためにC言語によるシングルスレッドのプログラミング手法を採用し、並列化やメモリーマネジメントといった煩雑な処理はコンパイラが自動的に対処するという手法である。
同社の日本カントリマネジャを務めるGary Brown氏は「当社の技術を用いれば、並列化やメモリーマネジメント、負荷調整のような煩雑は処理はコンパイラに任せることが可能になる。そのため、プログラマは、アルゴリズムの開発といった本質的な作業に注力することができる」と語った。
しかし、優れたコンパイラを開発するというのは簡単なことではない。Stream Processors社の社長兼CEOであるChip Stearns氏は、「当社のコンパイラ技術は、何ものにも替え難い宝物だ。このコンパイラはマサチューセッツ工科大学とスタンフォード大学によって1996年から開発が始められ、3回もやり直しを行い、9年間かけて完成にこぎ着けたものである。そもそも、当社を設立したきっかけは、このコンパイラが完成したことだ」と語り、同社の核となる技術がこのコンパイラであることを強調した。
Stream Processors社は、コンパイラ技術によってこの課題に対応している。プログラミングを容易にするためにC言語によるシングルスレッドのプログラミング手法を採用し、並列化やメモリーマネジメントといった煩雑な処理はコンパイラが自動的に対処するという手法である。
同社の日本カントリマネジャを務めるGary Brown氏は「当社の技術を用いれば、並列化やメモリーマネジメント、負荷調整のような煩雑は処理はコンパイラに任せることが可能になる。そのため、プログラマは、アルゴリズムの開発といった本質的な作業に注力することができる」と語った。
しかし、優れたコンパイラを開発するというのは簡単なことではない。Stream Processors社の社長兼CEOであるChip Stearns氏は、「当社のコンパイラ技術は、何ものにも替え難い宝物だ。このコンパイラはマサチューセッツ工科大学とスタンフォード大学によって1996年から開発が始められ、3回もやり直しを行い、9年間かけて完成にこぎ着けたものである。そもそも、当社を設立したきっかけは、このコンパイラが完成したことだ」と語り、同社の核となる技術がこのコンパイラであることを強調した。
ソフトウエア資産の活用
ハードウエアの複雑化に伴い、ソフトウエアのコードサイズも膨れ上がっている。現在では、数百万~数千万行に及ぶプログラムも珍しくはない。その一方で、製品開発に許される期間は短くなり、コストの削減も求められている。この状況に対処するためには、過去のソフトウエア資産を有効に活用することが重要である。
富士通研究所は、スケーラブルなマルチコアにおいて、ARPC(asynchronous remote procedure call)を利用した関数並列型プログラミングモデルを提案した。一般に、過去のソフトウエア資産を活用してマルチコアプロセッサ用のプログラムを開発する場合、データやスレッドの並列化を行うためにソースコードを大幅に変更しなければならない。それに対し、同モデルを用いれば、マルチコア化するためのプログラムの変更が最小限で済むという。
例えば、図1(左)のようなシングルコア向けの構造化されたメインプログラムや関数があったとする。ARPCを利用したプログラミングモデルは、図1(右)のような形で、これらのメインプログラムと関数プログラムを並列に実行するというものである。メインプログラムは、ARPCによって、ほかのコア上で動作するライブラリと通信を行い関数プログラムを起動する。それにより、メインプログラムと関数プログラムの並列化を実現する。
このモデルの利点の1つは、粒度が大きいため、シングルコア向けに開発されたプログラムを容易にマルチコア化できることだ。もう1つの利点は、シングルコア向けのOSであってもマルチコアに対応できることである。このような形で、過去のプログラム資産を有効に活用する。
同モデルは、メインプログラムからほかのコアを直接呼び出すような構造を成している。そのため、チップ内のコア数に変更があった際にはメインプログラムの変更が必要となる。この点に関して、同研究所のシステムLSI開発研究所プロセッサソリューション開発部部長を務める須賀敦浩氏は、「ARPCの手続き呼び出しライブラリに動的負荷分散スケジューリング機能を組み合わせれば、コア数に依存しないスケーラブルなマルチコアプログラミングを実現できる」と説明した。
富士通研究所は、スケーラブルなマルチコアにおいて、ARPC(asynchronous remote procedure call)を利用した関数並列型プログラミングモデルを提案した。一般に、過去のソフトウエア資産を活用してマルチコアプロセッサ用のプログラムを開発する場合、データやスレッドの並列化を行うためにソースコードを大幅に変更しなければならない。それに対し、同モデルを用いれば、マルチコア化するためのプログラムの変更が最小限で済むという。
例えば、図1(左)のようなシングルコア向けの構造化されたメインプログラムや関数があったとする。ARPCを利用したプログラミングモデルは、図1(右)のような形で、これらのメインプログラムと関数プログラムを並列に実行するというものである。メインプログラムは、ARPCによって、ほかのコア上で動作するライブラリと通信を行い関数プログラムを起動する。それにより、メインプログラムと関数プログラムの並列化を実現する。
このモデルの利点の1つは、粒度が大きいため、シングルコア向けに開発されたプログラムを容易にマルチコア化できることだ。もう1つの利点は、シングルコア向けのOSであってもマルチコアに対応できることである。このような形で、過去のプログラム資産を有効に活用する。
同モデルは、メインプログラムからほかのコアを直接呼び出すような構造を成している。そのため、チップ内のコア数に変更があった際にはメインプログラムの変更が必要となる。この点に関して、同研究所のシステムLSI開発研究所プロセッサソリューション開発部部長を務める須賀敦浩氏は、「ARPCの手続き呼び出しライブラリに動的負荷分散スケジューリング機能を組み合わせれば、コア数に依存しないスケーラブルなマルチコアプログラミングを実現できる」と説明した。
図1 ARPCを利用した関数並列型プログラミングモデル
ARPCを利用した関数並列型プログラミングモデルを用いてシングルプロセッサのアプリケーションをマルチコアプロセッサ向けに並列化する。通信オーバーヘッドをどの程度軽減できるかは、実装に依存する。
デバッグ手法
マルチコアプロセッサでは、ソフトウエアのデバッグも困難な作業となる。今日の組み込み機器向けプロセッサは、多数の機能を集積し、高速に動作するSoC(system on chip)として設計するのが一般的である。そのため、実動作速度における内部バスの観測やICE(in circuit emulator)によるリアルタイムトレースに基づいたデバッグが難しくなっている。インフィニオン テクノロジーズ ジャパンのAIM事業本部オートモーティブグループで部長代理を務めるNico Kelling氏は、「例えば200MHzで動作するデュアルコアプロセッサと100MHzのデータバスを備えたSoCでは、リアルタイムトレースに必要な帯域幅は50ギガビット/秒になる」と語り、従来からの手法ではデバッグが困難である理由を説明した。
この問題に対して、同氏は車載向けマイクロコントローラ「TriCore TC1766」などで採用されているオンチップエミュレーション技術とMCDS(multi core debug solution)を紹介した。
まず、デバッグの対象とするプロセッサには、トレースデータを出力するためのインターフェースやプロセッサをコントロールする機能をあらかじめ集積しておく。次に、トリガーロジックや監視ロジック、複数のプロセッサ間のトリガー条件を評価する機能、トレースバッファ、外部インターフェースなどを備えたMCDSチップをプロセッサに接続する。この接続はパッケージ内で行われ、SiP(sytem in package)構成とする(図2)。このパッケージ内部の接続によって、マルチコアプロセッサを詳細にデバッグするためのオンチップエミュレーションが可能になる。この技術によってマルチコアプロセッサのデバッグは容易になり、ソフトウエア開発期間の短縮を実現できるという。
なお、この手法では、プロセッサとMCDSが別チップである点もメリットの1つである。デバッグ用のデバイスにはMCDSチップを積層するが、量産用デバイスにはMCDSチップを積層しなくてよいのである。これにより高機能なデバッグ機能を、量産品のコストに影響を与えることなく導入することができる。
(小野 明久)
この問題に対して、同氏は車載向けマイクロコントローラ「TriCore TC1766」などで採用されているオンチップエミュレーション技術とMCDS(multi core debug solution)を紹介した。
まず、デバッグの対象とするプロセッサには、トレースデータを出力するためのインターフェースやプロセッサをコントロールする機能をあらかじめ集積しておく。次に、トリガーロジックや監視ロジック、複数のプロセッサ間のトリガー条件を評価する機能、トレースバッファ、外部インターフェースなどを備えたMCDSチップをプロセッサに接続する。この接続はパッケージ内で行われ、SiP(sytem in package)構成とする(図2)。このパッケージ内部の接続によって、マルチコアプロセッサを詳細にデバッグするためのオンチップエミュレーションが可能になる。この技術によってマルチコアプロセッサのデバッグは容易になり、ソフトウエア開発期間の短縮を実現できるという。
なお、この手法では、プロセッサとMCDSが別チップである点もメリットの1つである。デバッグ用のデバイスにはMCDSチップを積層するが、量産用デバイスにはMCDSチップを積層しなくてよいのである。これにより高機能なデバッグ機能を、量産品のコストに影響を与えることなく導入することができる。
(小野 明久)
図2 オンチップエミュレーションを実現するSiP
デバッグ用のデバイスはプロセッサとMCDSチップを積層するSiPとして構成。量産品はMCDSチップを必要としないため、SiPとはしない。











