Cortex-M にも広がってきたマルチコアプログラミング ~ARM コア搭載東芝汎用マイコン無料コラボセミナー 2015~ 株式会社エーアイコーポレーション TOPPERS グループ
はじめに ~ARM コア搭載東芝汎用マイコン無料コラボセミナー 2015~ 2015/2/9 A. I. Corporation 2
講演内容 Cortex-A だけでなく Cortex-M においてもマルチコアを搭載した汎用マイコンが登場してきています マルチコアに対応した RTOS TOPPERS-Pro/FMP の紹介とともに マルチコアマイコンの動向や 実際にプログラミングする際にどのような注意を払う必要があるのかを説明します 2015/2/9 A. I. Corporation 3
エーアイコーポレーション紹介 会社概要 設立 1985 年従業員 54 名所在地東京 ( 五反田, 立川 ) 名古屋 ( 栄 ) 大阪 ( 新大阪 ) 事業内容組込み用ソフトウェア OS 開発ツールなどの輸入 / 販売 / テクニカルサポート自社製品の開発 / 販売 / テクニカルサポート上記を利用したエンジニアリング サービス 2015/2/9 A. I. Corporation 4
こんな場合には AIC へ 組込み向けにいろいろなソフトウェアを 1 つの窓口で対応することを希望されている場合 例えばこんな組み合わせ : OS もネットもファイルも USB も Bluetooth も GUI も必要ミドルウェアだけでなく開発環境や品質ツールも必要製品提供だけでなく移植作業やカスタマイズ作業も必要 OS ドライバ ミドルウェア 開発環境 品質ツール 受託開発 2015/2/9 A. I. Corporation 5
組込み向けのマルチコア状況 ~ARM コア搭載東芝汎用マイコン無料コラボセミナー 2015~ 2015/2/9 A. I. Corporation 6
マルチコアに関して 6 年前の意識 マルチコアについて マルチコアに興味はありますか? 95% マルチコアの導入予定は? 導入済み 27% マルチコアの導入予定は? 導入検討中 26% マルチコアの導入予定は? わからない 33% マルチコア導入にあたっての障壁は何ですか? ソフト開発環境 40% 実績がない 46% 使い方がわからない 17% CEATEC2008 で JEITA マイクロプロセッサ専門委員会が実施 2015/2/9 A. I. Corporation 7
2015 年現在の状況は? マイコンベンダがマルチコアプロセッサを市場に投入 マルチコア対応の組込み向け RTOS が増加 ソフトウェア開発環境 ( 特にデバッガ ) のマルチコアサポートの充実 マルチコア利用の実績も増加の方向 次の標準プラットホームはマルチコアベースの声も多数 マルチコア利用の雰囲気が急速に漂ってきている マルチコアでの設計手法 プログラミング手法を早急に確立する必要性がある 2015/2/9 A. I. Corporation 8
Cortex-M 系マルチコア? マルチコア =Cortex-A などの大きなコア向け? 2014 年 8 月 7 日に株式会社東芝が TMPM411F20XBG を発表 Cortex-M4F 2 コア 発売済みの NXP 社を始め Cortex-M 系マルチコアを各社が準備 検討中 2015/2/9 A. I. Corporation 9
マルチコアで期待されること 高性能化への技術的課題の解決が期待できる 高コストな微細化技術クロックの限界増えるリーク電流発熱抑制が困難 CPU 利用時間に余裕度が持たせられる 最悪実行時間値の向上平均処理時間の向上 MIPS 値は向上しないので注意 2015/2/9 A. I. Corporation 10
マルチコアプログラミングの注意点 ~ARM コア搭載東芝汎用マイコン無料コラボセミナー 2015~ 2015/2/9 A. I. Corporation 11
注意すべき主な点 1 コアの役割分担複数のコアをどう使う? 2 データ競合回避 - ロック排他制御をどう実現する? 3 データ競合回避 - ライブロックライブロック問題をどう意識する? 4 命令実行順序の確定 (CPU による命令実行順序入れ替え問題と対策 ) アウトオブオーダー実行をどう回避する? 2015/2/9 A. I. Corporation 12
1 コアの役割分担 機能分割した設計にする必要がある 機能の分割統治ができているソフトウェア資産はスレッド ( タスク ) プロセス単位の並列化が容易 そうでない場合はマルチコアの恩恵を受けづらい OS なし あるいはシングルタスク的に設計された資産は 流用する前に設計を見直す必要がある コア毎に完全に別の仕事をさせると負荷の平準化が難しい場合がある RTOS をどう選びどう利用するか? 2015/2/9 A. I. Corporation 13
RTOS の違い MP T-kernel AMP T-Kernel SMP T-Kernel RTEMS AUTOSAR OS TOPPERS FDMP SMP FMP Linux OS の分類 AMP SMP AMP AMP AMP SMP AMP SMP リアルタイム性 マイグレーション機能 TOPPERS/FMP はマイグレーション機能を持ちながら リアルタイム性を維持した RTOS 2015/2/9 A. I. Corporation 14
2 データ競合回避 - ロック 一般的には 他コアの割込みマスクをコントロールすることはできない ローカルな割込み禁止はコアごとに管理するしかない場合がある (ARM GIC) コアまたぎで割込み禁止を行うことはできるが RPC を使うなどの手法となり リアルタイム性が損なわれる タスク / 他コアで動作する割込みハンドラや 割込みハンドラ間ではスピンロックのアルゴリズムで排他を取る必要がある 2015/2/9 A. I. Corporation 15
スピンロックとは? ロックを取得できるまでループにより試行を繰り返すロックアルゴリズム ロックとは? 特定の処理開始前にロック ( 鍵のようなもの ) の取得を試み ロックを取得できなければ該当処理を開始しないことによって複数の並行 並列処理を協調動作させる同期機構のこと 2015/2/9 A. I. Corporation 16
どのように実現するか?スピンロックのアルゴリズム ロックが獲得されていないことをチェックするとともに 不可分な処理としてロックを獲得ロックが取得できたら 共有資源へアクセス共有資源へのアクセス後 ロックを解放 実現の方法アトミック命令を使用 ( マルチコア CPU を設計する立場なら専用 MUTEX 回路を備えるという方法もある ) ロック変数の読込み ロック変数は解放されているか No Yes ロック変数の取得 ( ロック変数への書込み ) 共有資源へのアクセス ロック変数の解放 2015/2/9 A. I. Corporation 17
アトミック命令とは? いくつかの操作をコアが不可分に実行する命令 アトミック命令の種類 Test&Set Compare&Swap Load-Link/Store- Conditional など ARM MPCore では 排他付きロード (LDREX)/ ストア命令 (STREX) が提供されている 2015/2/9 A. I. Corporation 18
スピンロックの与える影響 ロックが長時間の場合 システムのスループットに悪影響が出る ( スピンロックは短時間向けで適応すべき ) タスク間はシングルコアの RTOS と同様にセマフォ ミューテックスを使うべきである コアをまたぐ場合もアプリケーションとしては従来のシングルコアと作法は透過 スピン中はロックに対する読出しが繰り返し行われる バスの輻輳問題 省電力問題 ARM ではイベント待ち (WFE)/ イベント送信 (SEV) 命令によりスピンすることなくコア間で同期を取る仕組みを提供 2015/2/9 A. I. Corporation 19
3 データ競合回避 - ライブロック マルチコアではデッドロックの問題に加えて ライブロックの問題を意識する必要がある ライブロックとは? 行動の衝突がおきた時 同一の回避行動がお互い取り続けた場合 処理を先に進めない問題 細い道ですれ違う場合 両方が道を譲り続けて お互いが先に進めないような状態 2015/2/9 A. I. Corporation 20
ライブロックの回避方法 優先して処理可能なコアの処理優先順位付けを行う 優先度の低いコアにスタベーション ( 永久に資源が獲得できない事象 ) が発生する可能性がある 優先順位付けができない場合 再試行のタイミングをコア毎に変更する 完了時間の確定が困難 ( リアルタイム性の保証が困難 ) 衝突した場合 待ちキューで取得する順に待ち FIFO 順に処理する この方式が一般的 2015/2/9 A. I. Corporation 21
具体的な記述の仕方は ロック取得順序を制御できるスピンロックを用意 ロック変数が自分の番号になったらロックが取得できる方式 ( チケットロックと呼ばれる ) キューイングロック ロックの取得は待ちキューで待ち 解放時は次の待ちコアにロックを渡す 優先度キューのバリエーションも 2015/2/9 A. I. Corporation 22
4 命令実行順序の確定 アウトオブオーダ実行の問題 命令実行の並列性を上げるために コア内部で命令の実行順番をリオーダ ( 再順番付け ) して実行する仕組み Cortex-A ではアウトオブオーダ実行 CPU では命令の実行順序性が保証されない Cortex-M では今のところ意識しなくても大丈夫だが ARM 社は今後のことを考慮し Cortex-M においてもこの問題を意識するよう規定している volatile を使うと回避できる という問題ではない 2015/2/9 A. I. Corporation 23
アウトオブオーダー問題の例 コア 0 while ( flag!= FALSE ) { syslog ( LOG_DEBUG, val is %d, val ); break; } コア 1 volatile bool flag; volatile int val = 0; flag = FALSE; val = 100; flag = TRUE; インオーダ実行の場合 必ず syslog は値 100 を出力するが アウトオブオーダ環境の場合 0 が出力される場合がある CPU による命令実行の再順序化の影響 コア間でグローバル変数を read/test/modify/write するような処理では深刻な問題 ( 例 : スピンロック実装 ) 2015/2/9 A. I. Corporation 24
ARM コアでの影響は? 呼称 SO: Strong Ordering TSO: Total Store Ordering PSO: Partial Store Ordering WO: Weak Ordering 処理内容 メモリアクセスは命令の順序に完全に従う write read の順序が入れ替わる可能性がある write read, write write の順序が入れ替わる可能性がある 全ての順序が入れ替わる可能性がある ARM は WO モデル MMU のページテーブル単位で SO か WO 設定可能 DDR を SO に設定してしまうと ストアバッファが使えずパフォーマンスが低下する 2015/2/9 A. I. Corporation 25
どうすればいいか? 命令リオーダメモリで 命令の実行順序に強制性を持たせたい場合は フェンス命令 ( メモリバリア命令 ) で同期を取る必要がある ARM は 3 種類のフェンス命令を用意 ISB: 命令同期バリア DMB: データメモリバリア DSB: データ同期化バリア 適切にフェンス命令を使用すること 2015/2/9 A. I. Corporation 26
TOPPERS-Pro/FMP の記述例 TOPPERS-Pro/FMP のスピンロック処理の実装例 asm (" mov r2, #0x01 n" " t ldrex r1, [%1] n" " t cmp r1, #0x00 n" " t strexeq r1, r2, [%1] n" " t mov %0, r1 n" :"=r"(locked):"r"(p_spn_lock):"r1", "r2", "cc"); if (locked == 0) { /* 成功した場合 */ mpcore_data_memory_barrier(); /*DMB 命令 */ } asm("":::"memory"); return(false); 2015/2/9 A. I. Corporation 27
TOPPERS-Pro/FMP の紹介 ~ARM コア搭載東芝汎用マイコン無料コラボセミナー 2015~ 2015/2/9 A. I. Corporation 28
TOPPERS-Pro/FMP とは? マルチコアに対応したリアルタイム OS ASP カーネルをマルチコアプロセッサ向けに拡張 SMP と AMP の両タイプのマルチプロセッサに適用可 リアルタイム性と動的なタスク移動とを両立 コア毎のタスクスケジューリングタスクを移動させる API を実装 2015/2/9 A. I. Corporation 29
カーネル仕様 プロセッサ毎のスケジューリング タスクマイグレーション機能の提供 マイグレート可能な条件設定あり Ready Queue タスク 1 タスク 2 タスク 3 タスク 4 タスク 5 タスク 3 Running タスク 1 タスク 4 TOPPERS-Pro/FMP コア 0 コア 1 2015/2/9 A. I. Corporation 30
マイグレーションについて コアごとのスケジューリングコアごとに優先度ベーススケジューリングを実施基本的には AMP-OS と同等 リアルタイム性の確保が容易 タスクマイグレーションタスクをコア間でマイグレート ( 移動 ) させる API を用意 マイグレーションポリシーはユーザが決定 マイグレート可能な条件システムコールの最悪実行時間抑制のために制約設定 1. タスクコンテキストから自プロセッサの他のタスクに対して 2. 自タスクに対して 2015/2/9 A. I. Corporation 31
マルチコアへの対応実績 Cortex-M TMPM411F20XBG には近日対応予定 Cortex-A Cyclone V Zynq-7000 など ARM11 μpd35001f5-mn Core Tile for ARM11 MPCore など SH SH2A-DUAL など Nios NiosⅡ など 2015/2/9 A. I. Corporation 32
お問い合わせは TOPPERS Group http://www.aicp.co.jp/ 2015/2/9 A. I. Corporation 33