全く同じコアを複数搭載し、メモリ空間や処理情報を共有することにより、各コアが全く同様の処理を行うことができます。そのため、複数の同じコアを並列動作させることでマイコンのパフォーマンスを向上できます。
例えば、Cortex-M4を6つ搭載したマルチコアマイコンが市販されています。Cortex-M4は汎用マイコン向けのコアですが、これらを並列動作させた場合、極めて高いパフォーマンスを得ることができます。使用方法にもよりますが、GPU(Graphics Processing Unit)のようなグラフィック処理やIoT(モノのインターネット)時代のエッジコンピューティングにも対応できるパフォーマンスといえるでしょう。
また、どれか1つのコアに障害が発生した場合に他のコアで補助することができるため、障害に強いシステムを構築することもできます。
注意点として、複数の同じコアを並列動作させた場合、一見するとパフォーマンスも比例して2倍、3倍になるように思えますが、実際には違います。同じコアを2つ搭載しても、実際は1.5〜1.7倍程度にしかパフォーマンスは向上しません。その上、並列処理の方法を間違えてしまうと、シングルコアよりも低いパフォーマンスになってしまう危険性もあります。特に、OSなどを使ってマルチタスク処理を行う場合には、並列処理に適したOSを選択したり、並列処理に合ったソフトウェアの組み方をしたりしないと、逆効果になります。
ここまでマルチコアマイコンのメリットを説明してきましたが、次のようなデメリットもあります。
STM32H7シリーズを例に、マルチコアマイコンについてもう少し詳しく解説します。
図3は、STM32H7シリーズのコア周辺のブロック図の抜粋です。左側にCortex-M7があり、中央上部にCortex-M4があります。2つのコアが搭載されているため、デュアルコアマイコンです。
マイコンの内部には、64ビット AXI BUS-MATRIX と32ビット AHB BUS-MATRIX の2つのバスマトリクス(BUS-MATRIX)があります。Cortex-M7のAXIマスターポート(AXIM)は64ビット AXI BUS-MATRIXに、AHBPポートは32ビット AHB BUS-MATRIXにそれぞれつながっています。従ってCortex-M7はどちらのバスマトリックスにもアクセスが可能です。一方、Cortex-M4は32ビット AHB BUS-MATRIXのみにつながっているため、メモリを含む周辺機能へのアクセス権に制限があります。このことから、Cortex-M7とCoretx-M4は主従の関係にあることが分かります。
2つのバスマトリックスの架け橋になるバスは、AXI/AHB12です。フラッシュメモリは64ビット AXI BUS-MATRIXにしかつながっていませんが、フラッシュメモリ内の命令やデータはAXI/AHB12経由で32ビット AHB BUS-MATRIXに転送することができるため、Cortex-M4はそこから命令やデータを取り込むことができます。
2つのコアはハードウェア的に独立しているため完全に非同期で動作させることができ、セマフォなどを使って同期しながら動作させることもできます。従って、ユーザーは2つのコアの関係について、主従関係か対等関係かを自由に選ぶことができます。
32ビット AHB BUS-MATRIXの下位にAHB1、AHB2などの周辺バスがあり、タイマや通信機能などの周辺機能はこれらの下位のバスにつながっています。どのような周辺機能がどのバスに接続されているかについては製品によって異なるため、マニュアルまたはデータシートで確認する必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.