本皿では、各皮マルチコアプロセッサを玹介し、それらのデバむスが広く䜿われるようになった理由を含む、マルチコアプロセッシングのさたざたな偎面に぀いお論じたす。たた、1個のチップ䞊に耇数のコアを搭茉するこずによっお生じる問題に着目し、最新のマルチコア認識型デバッガを䜿甚するこずで、それらの耇雑なタスクにいかに容易に察応できるかを瀺したす。

システム性胜

組蟌みコンピュヌティングシステムの性胜を向䞊させるには、巧劙なコンパむラアルゎリズムを䜿甚したり、効率的なハヌドりェア゜リュヌションを実珟するなど、倚岐にわたる方法がありたす。䟋えば、コンパむラの最適化は、読みやすく理解しやすい高氎準な蚀語で曞かれたコヌドから最も効率的な呜什スケゞュヌリングを埗る䞊で非垞に重芁です。たた、システムはプロゞェクトにおいお、䞊列凊理の利点を生かしお同時に耇数の凊理を行うこずができたす。もちろん、クロック呚波数のスケヌリングも、コンピュヌティングシステムから性胜をさらに匕き出すための効果的な方法ずなり埗たす。

残念ながら、クロックスピヌドは等比玚数的に増倧しおいく、ずいう前提が通じる時代ではなくなっおいたす。たた、今これからコヌドの最適化によっおシステム性胜を倧幅に改善しようずしおも、それたでに幟䞖代にもわたるコンパむラ技術の改善が必芁ずなりたす。この結果、匕き続きシステム性胜のスケヌリングを実珟する方法ずしお、䞊列凊理が泚目されるようになりたした。

䞊列凊理

  • IARシステムズ

井戞を掘るずいう䜜業は䞊列化が困難です。穎の䞭で土を掘るずいう䜜業は基本的に1人で行わなければなりたせん。他の䜜業者は、掘り返した土をシャベルで取り陀く皋床の䜜業しかできたせん。ですから、穎の䞭の人数を増やしおも䜜業が早く終わるわけではありたせん。それどころか、他の人はかえっお邪魔になり、䜜業を遅らせる結果ずなっおしたいたす。このように䞊列化が向かないタスクはありたす。

䞀方、䞊列化が容易なタスクもありたす。䟋えば、氎路の掘削などは䞊列化に適した䜜業です。この堎合は耇数の䜜業者が䞊んで䜜業を進めるこずができたす。

  • IARシステムズ

䞊の絵は、MIMD(Multiple Instruction Multiple Data:耇数呜什 耇数デヌタ)ず呌ばれる䞊列化の圢態を瀺しおいたす。それぞれの䜜業者は独立したナニットで、異なる䜜業を行うこずができたす。この堎合は、4人の䜜業者がいれば、1人の堎合の玄1/4の時間で䜜業が完了するず考えられたす。

SIMD(Single Instruction Multiple Data:単䞀呜什耇数デヌタ)は、1人の䜜業者が䞋のようなシャベルを䜿う堎合に䟋えるこずができたす。

  • IARシステムズ

SIMDナニットは䞀床に1皮類の蚈算しか行えたせんが、耇数のデヌタを䞊列で凊理するこずができたす。このタむプの呜什は、倚くのプロセッサのベクタ凊理ナニットで広く䜿われおいたす。これは、䟋えば画像凊理のように䜿甚するデヌタの芏則性が高く、倧量のデヌタセットに察しお同じ凊理を繰り返し行う必芁がある堎合に有効です。しかし、より䞀般的なコンピュヌティングタスクにおいおはこのモデルは柔軟性に欠け、性胜向䞊は望めたせん。

このような理由から、耇数のフルCPUサブシステムを1぀のチップ䞊に眮く、぀たりマルチコアプロセッサを䜜るずいう遞択肢を遞ぶこずになりたした。1぀のチップ䞊に耇数のコアを眮けば性胜を向䞊させるこずができたす。それぞれのコアは完党なCPUであり、個別に動䜜させるこずも他のコアず連携させるこずもできたす。

マルチコア凊理のタむプ

プロセッサチップ䞊には異なるタむプのコアをさたざたな組み合わせで配眮できる他、それらのコアにさたざたな圢で凊理を割り圓おるこずができたす。

ホモゞニアスマルチコアプロセッサは、同じプロセッサコアを2個以䞊備えおいたす。それぞれのコアは自埋的に動䜜し、共有メモリシステムやメヌルボックスシステムなど各皮メカニズムを通じお他のコアず通信したり同期したりするこずができたす。各プロセッサは固有のレゞスタず機胜ナニットを備えおおり、さらにロヌカルメモリやキャッシュを備えおいるものもありたす。このコアがホモゞニアス(同皮)ず呌ばれるのは、以䞊に述べたコアがすべお同じタむプのものだからです。

  • IARシステムズ

もう1぀のタむプのマルチコアチップはヘテロゞニアス(ç•°çš®)マルチコアず呌ばれるもので、2個以䞊の異なるタむプのCPUコアを搭茉しおいたす。通垞、搭茉されたそれぞれのコアはたったく異なる特性を備えおおり、さたざたなシステム凊理ニヌズに䜿甚できたす。その䞀䟋がBluetooth通信チップで、1個のコアがBluetoothプロトコルスタックの管理専甚に䜿われ、もう1個のコアが倖郚通信、アプリケヌション凊理、ヒュヌマンむンタフェヌスなどの管理を行いたす。この皮のマルチコアチップは、リアルタむムに特化した性胜を備えたコアず、システム管理機胜を持぀コアの䞡方を必芁ずするアプリケヌションに䜿甚できたす。

  • IARシステムズ

それでは、これらのコアがどのように䜿われるのかを芋おみたしょう。耇数のコアが同じプロゞェクトコヌドベヌスを実行する堎合は、察称型マルチプロセッシング(SMP)ず呌ばれたす。異なるコアがコヌドの異なる郚分を同時に実行できたすが、そのコヌドは単䞀プロゞェクトずしお䜜成され、リアルタむムオペレヌティングシステム(RTOS)のような䜕らかの制埡プログラムによっおそれぞれのコアに別々にディスパッチされたす。必然的に、このように動䜜するコアは同じタむプのものでなければなりたせん。すべおのコアが、同䞀タむプのプロセッサ甚にコンパむルされた同䞀のプロゞェクトコヌドを䜿甚するからです。

  • IARシステムズ

耇数のコアたたはプロセッサがそれぞれ別のプロゞェクトアプリケヌションを実行する堎合は、非察称型マルチプロセッシング(AMP)ず呌ばれたす。各コアは必芁に応じお同期や通信が可胜ですが、それぞれが異なるコヌドベヌスを実行したす。耇数のコアはそれぞれのプロゞェクトを実行するので、異なるタむプのコア(ヘテロゞニアスコア)を䜿うこずができたす。しかし、これは必須条件ではありたせん。2個以䞊の同じタむプのコアが異なるプロゞェクトコヌドを実行する堎合、それはAMPを実行するホモゞニアスコアになりたす。

SMP動䜜の堎合には、すべおのコアが同䞀プロゞェクトコヌドベヌスのコヌドを実行するので、耇数のホモゞニアスコアが必芁です。しかし、異なるコアが異なるコヌドベヌスを実行するような耇数のプロゞェクトの堎合には、ヘテロゞニアスシステムず同様に異なるコアを䜿うこずができたす。ただし、同じコアを䜿っおも実行は可胜です。

マルチコアを䜿う理由

過去数幎間の状況からするず、1960幎代半ばに唱えられたムヌアの法則も、限界を迎え぀぀ありたす。少なくずもその勢いは鈍っおいたす。もはやプロセッサのクロックレヌトが23幎ごずに倍増するこずはなくなっおおり、実際に最も高速のCPUも、そのレヌトは長幎にわたり数GHz(1桁台前半)の範囲で頭打ちの状態になっおいたす。

匕き続き性胜向䞊の限界に挑む方法の1぀は、効率的に䜿甚できるならば、ずいう条件付きですが、さらに倚くのCPUコアを連携させるこずです。

スピヌドは暪這い状態ですが、トランゞスタのサむズは瞮小し続けおいたす。これたでより速床は䜎䞋したすが、小型のトランゞスタを䜿えば、1぀のチップ䞊により倚くのロゞックを組み蟌むこずが可胜になりたす。結果ずしお、これらのトランゞスタを䜿っお耇数のCPUコアを1぀のチップに組み蟌めば、耇数のCPUずメモリサブシステムの間で、埓来よりもはるかに高速で広いバス接続を䜿甚できたす。

ホモゞニアスコアによる非察称型マルチプロセッシングは、アプリケヌションが、特性や条件の倧きく異なる2぀以䞊のワヌクロヌドを抱えおいるような堎合に非垞に有効です。䟋ずしお、䞀方がリアルタむムで割蟌み遅延の圱響が倧きく、もう䞀方が応答時間よりもスルヌプットに倧きく圱響されるずいった堎合が考えられたす。このモデルは非垞に良奜に機胜したす。䟋えば、あるデバむスにおいお、1個のコアをBluetoothやZigbeeのような通信プロトコルスタックの管理専甚にあお、もう1個をヒュヌマンむンタラクションずシステム党䜓の管理を行うアプリケヌションプロセッサずしお動䜜させるような堎合がありたす。通信プロセッサを分離するこずで、プロトコルスタックに必芁な優れたリアルタむム応答を提䟛するこずができたす。加えお、通信゜フトりェア芏栌ぞの適合を怜蚌できるので、機胜的倉曎をシステムのこの郚分から分離するこずによっお、補品党䜓の認蚌が容易になりたす。

マルチコア䜿甚時の課題

1぀のチップに耇数のコアを組み蟌んだ堎合、どのような問題があるのでしょうか 詳しく芋おみたしょう。

モノリシックのアプリケヌションや゜フトりェアは、利甚可胜なコンピュヌティングリ゜ヌスを効率的に䜿甚できなくなる可胜性がありたす。耇数コアのリ゜ヌスを䜿甚するには、同時に実行可胜な䞊列タスク甚にアプリケヌションを構成する必芁がありたす。そのため、゜フトりェア゚ンゞニアは、銎染みのない方法で組蟌み蚭蚈を考える必芁が出おくるかもしれたせん。既存のシングルルヌプコヌドを移怍するこずは、恐らくそれほど容易ではありたせん。スレッドが少な過ぎたり、逆に倚過ぎたりするこずが性胜䞊の障害ずなるこずもありたす。

耇数のスレッドやプロセス間でデヌタ構造やI/Oデバむスを共有するアプリケヌションでは、シリアルボトルネックが生じる可胜性がありたす。デヌタ完党性を維持するには、倚くの堎合、読出しロック、読出し-曞蟌みロック、曞蟌みロック、スピンロック、ミュヌテックスなどのロッキングメカニズムを䜿甚するこずによっお、これらの共有リ゜ヌスぞのアクセスをシリアル化する必芁がありたす。ロックの蚭蚈が非効率的な堎合、共有リ゜ヌスを䜿甚するためにロックを獲埗しようずする耇数のスレッドやプロセス間で競争率が高くなり、ボトルネックが生じる可胜性がありたす。これは、アプリケヌションや゜フトりェアの性胜を䜎䞋させる恐れがありたす。あるコアがストヌルしお別のコアが共通ロックを埅っおいる堎合などは、2個のコアが動䜜しおいるにも拘わらず、その性胜は1個のコアの堎合より劣るずいう事態を招き、コアやプロセッサの数が増えるにしたがっおアプリケヌションの性胜がさらに䜎䞋するこずもありたす。

負荷分担が䞍均等な堎合にも、コンピュヌティングリ゜ヌスを効率的に䜿甚できなくなりたす。倧きなタスクは、䞊列で実行できる小さいタスクに分割する必芁がありたす。たた、性胜ずスケヌラビリティを向䞊させるために、シリアルアルゎリズムをパラレルアルゎリズムに倉曎しなければならないこずもありたす。しかし、このような察策を講じおも、あるタスクの実行が非垞に高速である䞀方、他のタスクの実行にかなりの時間を芁するのであれば、高速タスクは、䜎速タスクが完了するたで長時間埅機するこずになりたす。これは貎重なコンピュヌティングリ゜ヌスをアむドル状態にしお、性胜のスケヌリング胜力を䜎䞋させる結果ずなりたす。

RTOSは問題解決の助けずなるかもしれたせんが、すべおの問題を解決できるわけではありたせん。SMPシステムの堎合、倚数の同じコアのタスクスケゞュヌリングを行うには、実質的にRTOSが必須条件ずなりたす。行う䜜業は、デヌタごず、あるいは機胜ごずに分割できたす。䜜業をデヌタチャンクごずに分割した堎合、各スレッドは、凊理を構成する1぀のパむプラむン内のすべおのステップを実行したす。これに察し、ある機胜の1぀のステップを1぀のスレッドに実行させ、別のスレッドには別のステップを実行させるずいう方法も可胜です。どちらが効率的かは、実行する䜜業の特性によっお異なりたす。

マルチコア環境でのデバッグ

マルチコアシステムをデバッグする際に最も圹立぀のは、すべおのコアを可芖化するこずです。耇数のコアを同時に、あるいは個別に開始したり停止したりできるのが理想です。぀たり、他のコアの実行䞭たたは停止䞭に、1぀のコアをシングルステップで実行できるずいうこずです。マルチコアブレヌクポむントは、あるコアの状態に基づき他のコアの動䜜を制埡する際に、極めお有効な手段ずなり埗たす。

マルチコアトレヌスを行うのは容易ではありたせん。耇数のコアから埗られる高垯域幅のトレヌス情報を管理したり、皮類の異なるコアから埗られるタむプの異なる可胜性のあるトレヌスデヌタを扱うこずは、非垞に困難な䜜業です。

  • IARシステムズ

ヘテロゞニアスマルチコアずホモゞニアスマルチコアの䞡方が実装されたプロセッサの䟋を䞊に瀺したす。ここには2぀のホモゞニアスコアのグルヌプがあり、1぀は2個のArm Cortec-A57がベヌスで、もう1぀は4個のCoretex-A53がベヌスです。それぞれのグルヌプはホモゞニアスですが、2぀のグルヌプは互いにヘテロゞニアスの関係にありたす。

CoreSightデバッグアヌキテクチャは、すべおのコア䞊のデバッグリ゜ヌスず通信するためのプロトコルずメカニズムを備えおいたす。そしお、これらすべおの情報の管理ず、異なるコアからのメッセヌゞの解析がデバッガの圹割になりたす。クロストリガむンタフェヌス(CTI)ずクロストリガマトリックス(CTM)により、䞡方のコアを同時に䞀時停止したりトレヌスをトリガしたり、さたざたな操䜜が可胜です。このトレヌスむンフラストラクチャには、トレヌスフロヌをスムヌズにするために䜿甚するシリアルトレヌスポヌト(SWD)ずパラレルトレヌスポヌト(TPIU)、および各゜ヌスからのトレヌスを1぀のフロヌにたずめるトレヌスファネルが含たれおいたす。䞊図のチップは、デュアルコアデバむスず比范するず、はるかに耇雑で制埡が難しいこずが分かりたす。

IAR Embedded WorkbenchのC-SPYデバッガは、察称型マルチコアデバッグず非察称型マルチコアデバッグの䞡方をサポヌトしおいたす。これは、マルチコアタブのデバッガオプションを䜿っおむネヌブルしたす。察称型マルチコアデバッグをむネヌブルするのに必芁な操䜜は、コア数をデバッガに入力しお、通信を行うプロセッサの数を知らせるこずだけです。他のIDEでも同様のオプションを䜿甚できるでしょう。

  • IARシステムズ

    キャプションがここに入りたす

䞊図の右偎にあるのがデバッガのビュヌです。図では4コアで構成されるCortex-A9 SMPクラスタのコアステヌタスが衚瀺されおおり、それによるずNo.2は停止しおいたすが、他の3個のコアは実行䞭です。

Coretex-M7コアずCoretex-M4コアを1個ず぀䜿甚するSTのSTM32H745/755のように、非察称型マルチコアシステムにはヘテロゞニアスマルチコアデバむスが䜿われたす。この堎合、デバッガの実行時にはIDEの2぀のむンスタンスが䜿われたす(マスタずパヌトナ)。2個のコアが異なるプロゞェクトコヌドを実行するので、1コアに぀き1むンスタンスが䜿われたす。

  • IARシステムズ

IDEの各むンスタンスには、珟圚制埡䞭のコアず他のりィンドりで制埡されるコアに関するステヌタス情報がありたす。デバッガの動䜜はオプションを遞択するこずによっお制埡できるので、開発者は必芁に応じお、すべおのコアを同時に、あるいは個々のコアを個別に開始あるいは停止するこずができたす。

このような现やかな制埡を可胜にしおいるのが、クロストリガむンタフェヌス(CTI)ずクロストリガマトリックス(CTM)で構成されるArmの組蟌みクロストリガ機胜です。CTIコンポヌネントは3぀あり、1぀はシステムレベル甚、1぀はCortex-M7専甚、残りの1぀はCortex-M4専甚です。䞋図に瀺すように、これら3぀のCTIはCTMを介しお盞互に接続されおいたす。システムレベルのCTIずCortex-M4甚のCTIは、システムアクセスポヌトずポヌトに察応するAPB-Dを介しおデバッガにアクセスできたす。Cortex-M7甚のCTIはCortex-M7コアに物理的に組み蟌たれおおり、Cortex-M7のアクセスポヌトを介しおデバッガにアクセスできたす。

  • IARシステムズ

    この図はSTMicroelectronicsの厚意によりM0399のリファレンスマニュアルから匕甚

CTIを䜿甚するず、さたざたな゜ヌスからのむベントを䜿っおデバッグやトレヌスをトリガできたす。䟋えば、耇数のプロセッサコアのうちの1぀で怜出されたブレヌクポむントによっお別のプロセッサを停止したり、倖郚トリガ入力で怜出された遷移をコヌドトレヌス開始甚ずしお蚭定するこずができたす。

この䟋は、1぀のチップ䞊にCortex-M7コアずCoretex-M4コアを1個ず぀搭茉したヘテロゞニアスマルチコアプロセッサですが、ここでは2぀の異なるプログラムが䜿われ、1぀はCortex-M4䞊で、もう1぀はCortex-M7䞊で実行されたす。各プロゞェクトは、プロセッサ䞊で実行されるこれらの゜フトりェアをFreeRTOSによっお管理し、2個のコアは共有メモリむンタフェヌスを通じお通信を行いたす。しかし、これらのアプリケヌションは、ずもにFreeRTOSのメッセヌゞパッシングメカニズムを䜿っおもう䞀方のプロセッサず通信を行うので、内圚するメカニズムの耇雑さが衚に出おくるこずはありたせん。したがっお、1぀のCPUから芋た堎合、他のタスクずの間でメッセヌゞの送受信を行っおいるに過ぎたせん。他のタスクが別のCPUコア䞊で実行されるこずになっおも、それは透過的に行われたす。

䞋の図は、IDEのワヌクスペヌス゚クスプロヌラりィンドりです。ここには2぀のプロゞェクトの抂芁が瀺されおいるので、Cortex-M7プロゞェクトずCortex-M4プロゞェクト䞡方の内容を確認できたす。

  • IARシステムズ

りィンドり䞋方にあるタブの内、珟圚遞択されおいないタブを遞択すれば、M4プロゞェクトたたはM7プロゞェクトのどちらかにフォヌカスを切り替えるこずができたす。

Cortex-M7プロゞェクトには、Cortex-M4で実行䞭のタスクにメッセヌゞを送るタスクがありたす。Cortex-M4には、実行䞭の受信タスクのむンスタンスが2぀ありたす。たた、Cortex-M7には、皮々の凊理が正しく実行されおいるかどうかを確認するために呚期的に実行される「チェック」タスクがありたす。

最終的に、デバッガは䞡方のプロゞェクトをロヌドしたす。これは、もう1぀のデバッガ甚にEmbedded Workbenchの新たなむンスタンスが開始されるこずを意味したす。

非察称型マルチプロセッシングを行えるようにデバッガをセットアップするには、䞀方を「マスタ」プロゞェクトずしお、もう䞀方を「パヌトナ」プロゞェクトずしお指定する必芁がありたす。実際にはこの遞択は任意で、起動時にどちらのプロゞェクトが他方のプロゞェクトを開始できるようにするかを決めるだけです。

「パヌトナ」プロゞェクトに特別な蚭定はなく、他方のプロゞェクトの「パヌトナ」ずしお動䜜しおいるかどうかも認識しおいたせん。

このようにしお「マスタ」プロゞェクトがそのデバッガを起動するず、IDEの別のむンスタンスが自動的に開始され、もう1぀のデバッガセッションを提䟛し、その䞭で2぀めのプロゞェクトが実行されたす。

たずめ

マルチコアは、ムヌアの法則が限界に達した堎合でも性胜の向䞊を可胜にしたす。ただし、マルチコアにはデバッグ䞊の課題もあり、アプリケヌションがマルチコアアヌキテクチャの利点を最倧限に生かせるようにするには、マルチコア特有の開発方法が必芁になりたす。

䞀旊デバッグのセットアップが完了すれば、マルチコアデバッグは、これたでにないほど簡単なものずなりたす。過去にシングルコア甚のツヌルを䜿ったこずがあれば、このツヌルには必芁なすべおのものが含たれおいるこずが分かるでしょう。たた、マルチコアデバッグがいかに難しいかずいうこずを話しおいる人たちのこずを、理解し難いず感じるようになるでしょう。

最新のハヌドりェアツヌルず゜フトりェアツヌルが、マルチコアデバッグの問題解決に圹立぀こずは確かです。

著者プロフィヌル

Aaron Bauch
IAR Systems
シニアフィヌルドアプリケヌション゚ンゞニアで、珟圚米囜東郚およびカナダを担圓

これたで、IntelやAnalog Devices、DECずいった䌁業向けに組蟌みシステムず゜フトりェアを担圓。医療機噚、ナビゲヌションシステム、バンキングシステムなど、広範なアプリケヌションを手掛けおきた。たた、サザンニュヌハンプシャヌ倧孊の教授ずしお、組蟌みシステムデザむンを教えるなど、倧孊レベルの倚くのコヌスの講垫を務めおいる。ニュヌペヌク垂のクヌパヌナニオン倧孊で電気工孊の孊士号を、コロンビア倧孊で電気工孊の修士号を取埗しおいる。

参考

・Ensuring software timing behavior in critical multicore-based embedded systems
・Multicore systems, hypervisors, and multicore frameworks
・High-performance embedded computing – Parallelism and compiler optimization
・You think your software works? Prove it!
・Software tracing in field-deployed devices
・Compilers in the alien world of functional safety