組み込みでもマルチコア。wec2013での対応
DESCRIPTION
7/19 に日本マイクロソフト関西支店で開催された、国内の Windows Embedded MVP によるセミナー「真夏の組み込みWindows技術セミナー2013 西日本編 ~ Windows Embedded MVP が大阪に集結!」でのプレゼン資料。TRANSCRIPT
![Page 1: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/1.jpg)
古賀信哉
株式会社サムシングプレシャス
![Page 2: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/2.jpg)
なにをいまさら( ´_ゝ`)
![Page 3: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/3.jpg)
だいたい、前のバージョンでSMP対応してたじゃん?
![Page 4: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/4.jpg)
何が良くなったのか/ 前は何が足りなかったのかを
お話しします。
![Page 5: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/5.jpg)
社名 株式会社サムシングプレシャス
本社所在地 〒001-0010 北海道札幌市北区北10条西1丁目4-2 フォーレストビル2F TEL/FAX:(011)-756-4080
支店・営業所所在地
設立 2003年11月(※2004年10月に株式会社へ組織変更)
資本金 1,450万円
従業員数 4名(常勤役員含む)
事業内容 コンピューターのソフトウェアの設計・開発、試作 ・情報家電向けミドルウェア ・組込み機器向けデバイスドライバ ・カーネル移植(WEC/WinCE)
![Page 6: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/6.jpg)
札幌市在住
(株)サムシングプレシャス代表取締役
組み込み機器分野に軸足を置いたソフト屋
Microsoft MVP: Windows Embedded http://mvp.microsoft.com/profiles/A3D3BFEA-8A25-4960-9870-
1FBE11FDCA28
使ってきたプログラミング言語
UtiLisp, Scheme, C++, C, Objective-C
Java, ARM アセンブラ, C#, etc.
強い静的型付けの言語が好き:
Eiffel の DbC は、設計手法で影響を受けた。
![Page 7: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/7.jpg)
Blog(古賀 信哉のWindows CE Blog)
http://www.stprec.co.jp/ceblog/author/koga/
shkoga
SlideShare
http://www.slideshare.net/ShinyaKoga
![Page 8: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/8.jpg)
自社製品
“Armadillo” シリーズ用の BSP MTP ホストドライバ(WEC/WinCE 用)
委託開発
自社製 BSP のカスタマイズ
ARM ターゲットのカーネル移植(BSP)
追加のデバイスドライバ
アプリケーション
![Page 9: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/9.jpg)
※at ET 2012
![Page 10: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/10.jpg)
※at ET 2012
![Page 11: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/11.jpg)
どちらかといえば、 少量(<3,000)多品種の 製造に関わっています。
![Page 12: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/12.jpg)
さて、本題。
![Page 13: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/13.jpg)
x86/IA
Intel Atom (Clover Trail+)
AMD G-series
ARM
NVIDIA Tegra2/3/4
Qualcomm S3/4
Samsung Exynos 4/5
TI OMAP4, Freescale i.MX6 Dual/Quad
OpenCL な GPU(GPGPU) も、
“組み込み”向けに導入され始めた。
![Page 14: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/14.jpg)
マルチコアを活かすのは難しい
並行プログラミングの難しさ
アプリケーション開発者が普通に使えるもの
シングルコアを前提としたインフラ
~.NET CF 3.5
~Android 2.2, 2.x(Dalvik)
プラットフォームの肥大化
WEC 7
Android 3.0 以降
OS のブート時間や
アプリケーションの起動時間が長い!
2.3 で GC が改善
3.0 で SMP 対応に
![Page 15: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/15.jpg)
マルチコアを活かすのは難しい
並行プログラミングの難しさ
アプリケーション開発者が普通に使えるもの
シングルコアを前提としたインフラ
~.NET CF 3.5
~Android 2.2, 2.x(Dalvik)
プラットフォームの肥大化
WEC 7
Android 3.0 以降
OS のブート時間や
アプリケーションの起動時間が長い!
2.3 で GC が改善
3.0 で SMP 対応に
http://www.slideshare.net/ShinyaKoga/2012-0323spwce-devenvpublic
![Page 16: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/16.jpg)
この課題に、 どう対応したのか
![Page 17: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/17.jpg)
マルチコアに関する主要な改善点
カーネル
.NET Compact Framework 3.9
C++11 対応
その他の改善点
カーネル
.NET Compact Framework 3.9
C/C++ コンパイラの強化
from Windows Phone 7.x
from Windows Automotive(?)
![Page 18: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/18.jpg)
カーネル
カーネルスレッド
schdule.c の ciritical section の増加; 12 -> 14
排他制御
Slim Reader/Writer Lock の導入
ARMv7 命令の積極使用
DMB, DSB, etc.
![Page 19: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/19.jpg)
.NET Compact Framework
VM (CLI) のスレッドをネイティブに(?)
参考: embedded 101 の Compact 2013 Ebook
“13.3 Managed Code Apps”
http://embedded101.com/Compact2013eBook/Compact2013EbookContent/tabi
d/143/ArticleId/89/language/en-US/13-3-Managed-Code-Apps.aspx
![Page 20: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/20.jpg)
C++11 対応 (VS 2012)
スレッド標準ライブラリ
AMP(Accelerated Massive Parallelism)
PPL(Parallel Pattern Library)
C++11 の auto, smart pointersと合わせると、
C# ライクなコーディングが可能
(C++11 の auto は、C# の var に相当)
並行プログラミングの敷居を下げる改善
![Page 21: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/21.jpg)
カーネルの SMP 性能を改善
.NET CF と C++11 での プログラミングを改善
![Page 22: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/22.jpg)
カーネル
Snapshot Boot (> Andriod)
ハイバネーションの一種:
ユビキタス社の QuickBoot と似ている(?)
システム(OS + App)の起動時間を
数秒以内に抑えることが可能
(※要実装・チューニング)
ちなみに:Armadillo-4x0 + WEC 7/WinCE 6.0
でも、6秒程度での起動が可能
(※20MB 程度の OS イメージの場合) 詳細は後述
![Page 23: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/23.jpg)
.NET Compact Framework 3.9
GC の改善
世代別 CG (> Android)
起動時間の短縮(shared server)
JIT コードのプロセス間共有 (> Android?)
![Page 24: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/24.jpg)
C/C++ コンパイラの強化 (VS 2012)
auto-vectorization (and auto-parallization)
ARM コンパイラの VFP/Neon ネイティブサポート
C/C++ RunTime の整備
ARM の ABI が、ようやく EABI になった!
Windows RT の ARM コンパイラからの
フィードバック(ref. MSDN’s Win8 blog)
逆に、Windows 8 の Power Management ドライバは
Compact の SoC 対応の考え方を取り入れた?
![Page 25: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/25.jpg)
OS の起動時間を短縮
マネージドコードの 応答性改善・起動時間短縮
ネイティブコードの
高速化(コンパイラ改善)
![Page 26: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/26.jpg)
仕組み
ハイバネーション + on demand loading
snapshot を作成して保存(ハイバネート)
起動:最低限必要な仮想空間イメージのみをロード
ブートローダと kernel の loader で対応
1.) 必須な領域のロードと HW 初期化(ブートローダ)
2.) その後は on demand でロード(kernel の loader)
non pageable な領域だけを先行ロード
この領域を小さく抑えることが起動時間短縮に寄与
![Page 27: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/27.jpg)
実装手順
実装ガイドがリファレンスに記載
サンプルコードもあり
詳細は Web で!
“Snapshot Boot Development (Compact 2013)”
http://msdn.microsoft.com/en-us/library/dn169259.aspx
Snapshot の取り方も載っています。
![Page 28: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/28.jpg)
おまけ
WEC 2013 = WEC 7 – many + α
![Page 29: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/29.jpg)
インフラ
CPU アーキテクチャ
MIPS(and SH)
ARMv6 以下
ミドルウェア
色々…
標準シェル(explorer)
UPnP, MTP, etc.
ハンドヘルドデバイスや
STB 向けの機能は削除(?)
![Page 30: 組み込みでもマルチコア。WEC2013での対応](https://reader031.vdocuments.net/reader031/viewer/2022013118/5491811cb479590d2b8b57c4/html5/thumbnails/30.jpg)
インフラ
CPU アーキテクチャ
MIPS(and SH)
ARMv6 以下
ミドルウェア
色々…
標準シェル(explorer)
UPnP, MTP, etc.
ハンドヘルドデバイスや
STB 向けの機能は削除(?)
大丈夫。
WEC 7 は、あと5年
(or 10年)は現役です!