マルチコアプログラミング&デバッグのマスター:性能と信頼性のための戦略
この記事では、マルチコアプロセッサの進化、その普及拡大、およびそれに伴う設計、性能、デバッグの考慮事項を検討します。
システム性能
組み込みシステムの性能向上は、洗練されたコンパイラ最適化、効率的なハードウェアアーキテクチャ、そしてますます複数コア間の並列実行によって達成されます。巧妙なコンパイラアルゴリズムでシングルスレッドコードからさらなる速度を絞り出せますが、クロック周波数が数年ごとに倍増し続けるという長年の前提はもはや成り立ちません。現代の性能上限は低い一桁GHz台にあり、並列化がスケーリングの最も実行可能な道となっています。
並列性

すべてのタスクが均等に並列化に適しているわけではありません。一人が深い穴を掘る場合、その穴に作業員を追加しても仕事は加速せず、かえって進捗を妨げる可能性があります。一方、溝掘りは高度に並列化可能:複数の作業員が並んで掘り、それぞれが総労力の一部を担当できます。

この図はMIMD(Multiple Instruction, Multiple Data)を描写しています。各作業員(コア)が異なる操作を実行可能。4人の独立した作業員で、1コアなら1分かかるタスクが約15秒で完了します。

対照的に、SIMD(Single Instruction, Multiple Data)は同一命令を多数のデータ要素で同時実行します。画像フィルタリングやベクトル演算のように規則的・反復的な操作を持つワークロードに最適ですが、汎用コンピューティングへの柔軟性に欠けます。
これらの考慮事項がマルチコアプロセッサの台頭を支えています:単一ダイに複数の完全なCPUサブシステムを埋め込むことで、ソフトウェアが並列性を活用するよう書かれていれば、性能を線形にスケールできます。
マルチコア処理の種類
プロセッサはコアを様々な方法で組み合わせ、ワークロード配分とコア間通信に影響を与えます。
均質マルチコア
2つ以上の同一コアで、各々独自のレジスタ、機能ユニット、多くの場合プライベートL1キャッシュを持ちます。コア間通信は通常、共有メモリやメールボックスメカニズムで行われます。すべてのコアが同タイプのため、同一バイナリがいずれのコアでも実行可能です。

異種マルチコア
異なるコアタイプの組み合わせで、各々特定ワークロードに最適化。例えばBluetoothコントローラが1コアをプロトコル処理に、もう1コアを上位アプリケーションロジックに割り当てるなど。モバイルSoCや産業用コントローラで一般的です。

コア配置パターンでさらにマルチコア設計を区別します:
対称型マルチプロセッシング(SMP)
複数の同一コアが同一バイナリを実行し、リアルタイムOS(RTOS)で調整。スケジューラがコア間で作業を分配し、バイナリは単一コアタイプ向けにコンパイルされます。

非対称型マルチプロセッシング(AMP)
各コアが専用バイナリを実行。コアは均質でも異種でも可能。通信はオプションで、通常共有メモリやメッセージングプリミティブで処理。
SMPは単一バイナリを要求するため均質コアが必須。AMPは均質・異種両方で実装可能で、異なる専門ワークロードが必要なアプリケーションに最適です。
マルチコア採用の理由
ムーアの法則が鈍化する中、ダイにより多くのコアを詰め込むことが高性能化の最も効果的な道です。クロック速度が低い一桁GHz台で頭打ちになる一方で、トランジスタ密度は上昇し続け、より豊かなインターコネクトと大容量オンチップキャッシュを可能にします。マルチコア設計はこの高密度化の潜在能力を最大限に引き出します。
異種AMPは特にリアルタイムとスループット重視ワークロードで強力。時間クリティカルな機能を専用コアで分離することで、全体スループットを損なわず厳格なレイテンシ保証を満たせます。この分離は認証も簡素化します。リアルタイムコンポーネントをアプリケーションロジックから独立して検証できるためです。
マルチコア使用の課題
マルチコアアーキテクチャの採用は、多くのソフトウェアとシステム課題を導入します:
- タスク粒度──モノリシックなアプリケーションは多くの場合複数コアを効率的に活用できません。開発者はコードを並行実行可能な独立タスクにリファクタリングする必要があります。不適切なスレッド設計は低活用や競合を招きます。
- 同期ボトルネック──共有データ構造とI/Oデバイスにはロック(ミューテックス、スピンロック、読み書きロック等)が必要。過度なロックや高い競合は作業を直列化し、並列ゲインを相殺します。
- 負荷不均衡──1コアが早期終了し他が遅れている場合、アイドルコアは無駄な計算サイクルを意味します。大きなジョブを小さな均等チャンクに分割することが不可欠です。
- リアルタイム制約──SMPシステムではRTOSスケジューラがレイテンシとスループットのバランスを取る必要があります。データ分割(各スレッドがデータブロック処理)と機能分割(各スレッドがパイプラインの異なる段階実行)の選択はワークロードプロファイルに依存します。
マルチコア環境でのデバッグ
効果的なデバッグは、すべてのコアの包括的な可視性にかかっています:
- 協調制御──デバッガーは、複数コアでの同時または独立した停止、ステップ実行、ブレークポイント設定を可能にすべきです。
- マルチコアトレース──複数コアからのトレースデータ同時取得には、高帯域幅トランスポート(CoreSightのSWDとTPIUポートなど)と、データ過負荷回避のためのインテリジェントフィルタリングが必要です。

(出典:IAR Systems、図提供:Arm Ltd.)
ArmのCoreSightデバッグアーキテクチャは、クロストリガーインターフェース(CTI)とクロストリガーマトリックス(CTM)を統合し、デバッガーが他コアからのイベントに応じて任意のコアを停止またはトリガーできるようにします。この機能はレースコンディションとデッドロックの診断に不可欠です。
IAR Embedded Workbench C-SPYデバッガーはSMPとAMP両方の構成をサポート。SMPではユーザーがコア数を指定し、デバッガーが自動的に各コアに接続。AMPサポートでは、コアが別々のバイナリを実行する場合、2つのIDEインスタンス(マスターとノード)が必要です。

右側のビューでは、4コアCortex-A9 SMPクラスタを表示:コア2が停止中、他は実行継続中。
ST STM32H745/755(Cortex-M7 + Cortex-M4)のような異種システムでは、デバッガーが各コア用に別IDEウィンドウを起動。各ウィンドウが自コアのステータスと、オプションで他コアを表示し、開発者がコア間相互作用をリアルタイムで観察可能です。

2つのCTI(システムレベル、Cortex-M4、Cortex-M7)がCTMで接続され、デバッガーにブレークポイントとトレーストリガーのきめ細かな制御を提供します。

(出典:IAR Systems、図提供:STMicroelectronics from M0399 Reference manual)
典型的なアプリケーションは共有メモリインターフェースと軽量RTOS(FreeRTOSなど)でコア間メッセージ交換。各コアからは単純なタスクメッセージングとして通信が見え、底層のコア間メカニクスを抽象化します。

ワークスペースエクスプローラーに2つのプロジェクト(Cortex-M7とCortex-M4)が表示され、ユーザーはフォーカスを切り替え可能。マスタープロジェクトが自動的に第2IDEインスタンスを起動し、AMPデバッグを簡素化します。
まとめ
マルチコアアーキテクチャは、ムーアの法則鈍化に伴う性能要求を満たしますが、規律あるソフトウェア設計と高度なデバッグツールを要求します。デバッグ環境が構成されれば、開発者はマルチコアデバッグが驚くほど簡単であることに気づくでしょう。特にモノコアシステムのみ経験した人々が報告する課題と比較すると顕著です。
最新ハードウェアと統合ソフトウェアツールにより、信頼性とトレーサビリティを維持しながらマルチコア性能を活用することが実用的になりました。
注:図版画像は特に記載ない限りIAR Systemsによるものです。
Aaron Bauch氏はIAR Systemsのシニアフィールドアプリケーションエンジニアで、米国東部とカナダの顧客を担当。Intel、Analog Devices、Digital Equipment Corporationなどで組み込みシステムとソフトウェアに従事。医療計装、ナビゲーション、銀行システムなど幅広いアプリケーションを設計。Southern NH Universityで組み込みシステム設計の教授として大学レベル講義も担当。The Cooper Unionで電気工学学士、Columbia Universityで電気工学修士を取得(ともにニューヨーク)。
関連コンテンツ:
- クリティカルなマルチコアベース組み込みシステムでのソフトウェアタイミング動作保証
- マルチコアシステム、ハイパーバイザー、マルチコアフレームワーク
- 高性能組み込みコンピューティング──並列性とコンパイラ最適化
- ソフトウェアが動くと思う?証明してみせろ!
- フィールド展開デバイスでのソフトウェアトレーシング
- 関数安全のエイリアン世界でのコンパイラ
Embeddedの週刊メールニュースレターを購読して、さらなる組み込みシステム洞察を入手してください。
埋め込み
- Raspberry Pi必須ブレイクアウトボード:I2C、UART、GPIOなど – キット、ヘッダー、保護機能
- エキスパートプラントオートメーション:設計、実装、ターンキーソリューション
- 航空宇宙・防衛業界の多面的リスクを乗り越える
- 5GとIoT:次世代サプライチェーンレジリエンスを牽引
- 難削材旋削のマスター:先進工具で課題を克服
- 航空宇宙・防衛OEM業界を形作る4大課題
- 最新ドキュメント管理が重要な理由:ビジネスへのメリットと課題
- ハイブリッド製造:主なメリット、課題、業界への影響
- SaaSとWi-Fiの制覇:ITチームがクラウド課題を克服する方法
- 5Gのトップ5課題:スペクトラム、コスト、カバレッジ、デバイス、セキュリティをどう乗り越えるか
- IoTデータETL課題を克服してROIを向上