マルチコア、CPUを理解して高度なシステムを設計
マルチコアとは1999年、IBMにより、はじめて商用サーバ向けのプロセッサとしてデュアルコアCPU(2個のCPUコアを搭載)の「POWER4」がリリースされました。CPUコアとは、CPUがメモリから命令を読み出してから、処理するデータをかき集め、計算を行い、データを書き戻すまでの機能を備えたハードウェア・ブロックです。コンピュータを構成する最小の単位となります。
マルチコアプロセッサの登場により、当時の高速化の主流であった「CPUクロック(命令実行時間の基準となる信号)周波数を向上させる」競争が一転。複数の仕事(タスク)を並列にこなすことにより、時間あたりの仕事量を増やす、並列化による高速化競争がはじまりました。「マルチコアをいかにして使いこなすのか」という課題が、コンピュータを進化させる鍵となったのです。
それから20年。現在私たちの生活にはマルチコアプロセッサが当たり前のように溶け込んでいます。スマートフォンはもちろんのこと、小さなウェアラブルデバイスも複数のコアを持っています。素晴らしい技術革新ですが、私たちはマルチコアを意識せずに活用できるため、残念なことにCPUやマルチコアについて学ぶ機会も少なくなりました。その一方で産業分野をはじめ、様々なビジネスを牽引するIoT(Internet of Things)機器の開発では、限られたリソースを最大限に活用するため、CPUアーキテクチャ、マルチコアに関する知識が不可欠です。
APS初心者講座「マルチコア編」では、産業製品開発に欠かせない技術をソニーのSPRESENSEを教材として用い、座学+実機によりわかりやすく解説。実践的なマルチコア活用技術の習得を目指します。一緒に頑張りましょう。
ASMP(Asymmetric Multi-Processing / AMP)
マルチコアのシステムは大別してSMPとASMPの2種類があります
Wikipedia:ASMP,AMP(マルチプロセッシング)
SMP(Symmetric Multi-Processing:対称型マルチプロセッシング)とは、すべてのコアが同等の機能を備えたシステムです。私たちが普段使っているIntel x86 CPUはSMPアーキテクチャのデバイスです。別々のCPUコアであっても、各コア上のプログラムはコア番号を意識することなく処理することができます(CPU間通信やメモリアクセスなど)。
一方、ASMP(Asymmetric Multi-Processing:非対称型マルチプロセッシング)とは、一部のコアが固有の機能やハードウェアを備えているシステムです。あえて同じハードウェア構成としないことにより回路を簡素化。ハードウェア規模を抑えつつ、マルチコアによる並列性を実現します。特定の処理を目的とした「組み込みシステム」に最適化しやすいアーキテクチャと言えるでしょう。
ASMPアーキテクチャの例「SPRESENSE」
ソニーのSPRESENSE(CXD5602)は1個のメインコアがシステムを管理し、5個のサブコアが演算を支援するASMPアーキテクチャを採用しています。メインコアのみが、サブコアに対してメッセージを投げる(タスクを指示する)ことができます。一方、メインコア・サブコアは共通してメモリやペリフェラルへアクセスできるため、信号処理などのアプリケーションの肝となる処理を並列化して実行可能です。SPRESENSE用のリアルタイムOS「NuttX」もメインコア上で動作しシステムを統括、必要に応じてサブコアへタスクを割り当てます。
ASMP構成のプロセッサを使ってみる
ASMPのイメージを具体化してみましょう。SPRESENSE上で複数のタスクを別々のCPUコアで実行するサンプル・アプリケーションを紹介いたします。
Spresense Arduinoマルチコア環境を動かしてみる
このサンプルプログラムでは、1個のメインコアがシステム全体を管理し、4個のサブコア(SubCore1、2、3、4)を制御します。インストール時には、各コアで実行するタスクを別々にビルドし、SPRESENSEの内蔵フラッシュメモリに書きこみます。SPRESENSEは、電源が投入されると、メインコアのプログラムを最初に実行し、メインコアのプログラムは内蔵フラッシュメモリにインストールされている「各コアで実行するためのプログラム」をロード、それぞれのコアに処理を依頼します。各コアのプログラムは、独立に動作しUARTへログを出力、SPRESENSE Main Board上のLED1、2、3、4を点滅させます。
このマルチコアを使うサンプル・アプリケーションは、開発環境のセットアップに25分程度、プログラムを実行するのに5分程度、あわせて30分弱で実行することができます。本初心者講座のゴールは、さらにその先「使いこなす」技術の習得です。
なおASMPのシステムは、もちろんシングルコアのみを使うアプリケーションも実行できます。この場合はメインコアのみが動作します。下図のカメラアプリケーションは、メインコアでカメラを制御し、撮影した画像をそのままLCDへ表示、SDカードにも記録するプログラムを実行しています。
コア数とタスク数
コア数とタスク数の関係として、「シングルコア」or「マルチコア」アーキテクチャそれぞれに「シングルタスク」or「マルチタスク」の実行が考えられます。ここでは、それぞれのメリットを紹介いたします。本内容を参考に、自分の開発したいアプリケーションを思い浮かべ、どのようなタスク設計が理想的なのか想像してみてください。
シングルコア・シングルタスク
最も単純な構成です。そのため、最もデバッグしやすく、プロトタイピングをしやすい構成と言えます。マルチコア向けのプログラムを開発する際は、焦らず、まずシングルコア・シングルタスクで動くアプリケーションを開発しましょう。
シングルコア・マルチタスク
タスクを時間ごとにコアに割り当て、複数のタスクを実行する方式です。本方式のことを「並行実行」「時分割多重方式」などと呼び、タスクを入れ替えるOSが必要となります。WindowsやLinuxなどの汎用OSが広く採用している方式です。汎用OSはコアを細かい時間単位に分割し、複数のタスクを入れ替えることで、あたかも全てが同時に実行しているように見せかけています。
本方式で注意すべき点は「OSがどのようにタスクを入れ替えるか」のルールを理解しておくことです。リアルタイムOS(RTOS:Real Time OS)を採用するシステムの場合、Windowsのように常時入れ替えず、実行中のタスクが停止しない限り別のタスクに入れ替えないルールを採用することも多くあります。何回発生するかわからない入れ替え操作を排除することにより、最悪実行時間を保証できるためです。
マルチコア・シングルタスク
タスクが時間ごとに異なるコア(もしくは異なる設定で動いている同じコア)で実行される方式です。一見すると不思議な動きですが、瞬間的にコアの動作周波数を上げる、消費電力を抑えたコアで実行する、データが置かれているメモリに近いコアに移動させる、など様々な特性を使い分けることができます。Armの提唱するbig.LITTLEアーキテクチャや、Intelのターボ・ブースト・テクノロジーも本方式の延長上と言えるでしょう。
マルチコア・マルチタスク
複数のコアを活用して、アプリケーションを構成する様々なタスクを並列に実行していく理想的なアーキテクチャです。ただし「より効率的な組み合わせでタスクを並列実行する」必要があるため、最も設計の難しいアーキテクチャとも言えます。SPRESENSEをはじめとするASMPでいかにタスク設計をすべきか、本初心者講座で学んでいきましょう。
まとめ
いかがだったでしょうか。初心者講座「マルチコア編」第1回として、ASMPをはじめとするCPUアーキテクチャや、コアとタスクの関係について紹介しました。次回はASMP上でタスク設計する方法と、設計時に注意すべきポイントについて解説いたします。是非、ご期待下さい。
よりマルチコアを理解いただくためのAPSの取り組み
APSでは、初心者講座マルチコア編を通じて、より深く技術を習得いただくための教材「APS学習ボード(SPRESENSE™ Extension Board用)」を開発、2019年9月より販売を開始しました。回路設計をすることなく、簡単にASMPのアーキテクチャを動かしながら学ぶためのプラットフォームです。是非ご活用ください。
SONY SPRESENSE
SPRESENSEは、Arm Cortex-M4コア(FPU機能搭載)を6コア搭載したシングルボードコンピュータです。マルチコアによる豊富な演算能力をはじめ、魅力的なペリフェラルを多数搭載しながら、電池のみでも駆動できる超低消費電力な製品です。本格的なエッジコンピューティングを是非ご体験ください。システムの試作はもちろん、PoC、製品化にもご活用いただけます。
開発者向けサイトを見る Switch-Scienceで購入する
APS学習ボード(SPRESENSE™ Extension Board用)
APS学習ボード(SPRESENSE™ Extension Board用)は、初心者講座の内容をはじめ、SPRESENSE SDKの提供するオーディオ入力機能やLCDドライバをはじめとする各種機能を、回路設計をすることなく簡単にお試しいただけるよう開発したAPSオリジナルの評価基板です。Web記事と併せてお楽しみください。
取扱説明書|APS学習ボード Switch-Scienceで購入する(ボード単体) Switch-Scienceで購入する(部品キット)
こちらも是非
“もっと見る” マルチコア|SPRESENSE編
SPRESENSE×Neural Network Console:第4回|推論モデルを最適化し、エッジAIによるオリジナルの音声識別システムを構築する
今回の初心者講座では、SPRESENSEの「ハイレゾオーディオ入力」と「DNNRT機能」により「Neural Network Console」で生成したディープニューラルネットワーク(DNN)の推論モデルを統合。エッジ単体で完結するオリジナルの音声識別システムを構築する技法を解説いたします。
SPRESENSE×Neural Network Console:第3回|オーディオ解析に必要な学習用データを採取し、PC上で学習・推論を実行する
今回の初心者講座では、SPRESENSEに搭載されたハイレゾオーディオ入力を活用し、環境音を録音し、ディープニューラルネットワークによる音声分類に不可欠な学習用データと検証用データを生成する方法について解説します。また、PC上で動作するNeural Network Consoleによって生成した推論モデルをエッジ・デバイスへ統合するために解決すべき課題を紹介します。
SPRESENSE×Neural Network Console:第2回|異常検知に活用できるニューラルネットワークで波形の扱い方を学ぶ
SPRESENSEのDNNRT機能が扱うことのできるデータは画像だけでなく、産業分野を中心に人気が高まっている「異常検知・故障予知」に活用できる加速度センサーや大気圧センサーなどから収集した波形データも解析することができます。さらにSPRESENSEに内蔵されたハイレゾオーディオ録音機能も周辺環境を可聴域の波形データとして記録することができる優れたセンサーとして利用可能です。そこで、今回の初心者講座では、まず簡単な波形データの解析方法を例に、DNNRT機能から波形データを扱うシステムの構築方法について解説。DNNRT機能を活用した製品開発に必要となる技術を紹介いたします。