組み込みでもマルチコア。wec2013での対応

30
古賀信哉 株式会社サムシングプレシャス

Upload: shin-ya-koga

Post on 13-Dec-2014

979 views

Category:

Technology


12 download

DESCRIPTION

7/19 に日本マイクロソフト関西支店で開催された、国内の Windows Embedded MVP によるセミナー「真夏の組み込みWindows技術セミナー2013 西日本編 ~ Windows Embedded MVP が大阪に集結!」でのプレゼン資料。

TRANSCRIPT

Page 1: 組み込みでもマルチコア。WEC2013での対応

古賀信哉

株式会社サムシングプレシャス

Page 2: 組み込みでもマルチコア。WEC2013での対応

なにをいまさら( ´_ゝ`)

Page 3: 組み込みでもマルチコア。WEC2013での対応

だいたい、前のバージョンでSMP対応してたじゃん?

Page 4: 組み込みでもマルチコア。WEC2013での対応

何が良くなったのか/ 前は何が足りなかったのかを

お話しします。

Page 5: 組み込みでもマルチコア。WEC2013での対応

社名 株式会社サムシングプレシャス

本社所在地 〒001-0010 北海道札幌市北区北10条西1丁目4-2 フォーレストビル2F TEL/FAX:(011)-756-4080

支店・営業所所在地

設立 2003年11月(※2004年10月に株式会社へ組織変更)

資本金 1,450万円

従業員数 4名(常勤役員含む)

事業内容 コンピューターのソフトウェアの設計・開発、試作 ・情報家電向けミドルウェア ・組込み機器向けデバイスドライバ ・カーネル移植(WEC/WinCE)

Page 6: 組み込みでもマルチコア。WEC2013での対応

札幌市在住

(株)サムシングプレシャス代表取締役

組み込み機器分野に軸足を置いたソフト屋

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での対応

Blog(古賀 信哉のWindows CE Blog)

http://www.stprec.co.jp/ceblog/author/koga/

Twitter

shkoga

SlideShare

http://www.slideshare.net/ShinyaKoga

Page 8: 組み込みでもマルチコア。WEC2013での対応

自社製品

“Armadillo” シリーズ用の BSP MTP ホストドライバ(WEC/WinCE 用)

委託開発

自社製 BSP のカスタマイズ

ARM ターゲットのカーネル移植(BSP)

追加のデバイスドライバ

アプリケーション

Page 9: 組み込みでもマルチコア。WEC2013での対応

※at ET 2012

Page 10: 組み込みでもマルチコア。WEC2013での対応

※at ET 2012

Page 11: 組み込みでもマルチコア。WEC2013での対応

どちらかといえば、 少量(<3,000)多品種の 製造に関わっています。

Page 12: 組み込みでもマルチコア。WEC2013での対応

さて、本題。

Page 13: 組み込みでもマルチコア。WEC2013での対応

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での対応

マルチコアを活かすのは難しい

並行プログラミングの難しさ

アプリケーション開発者が普通に使えるもの

シングルコアを前提としたインフラ

~.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での対応

マルチコアを活かすのは難しい

並行プログラミングの難しさ

アプリケーション開発者が普通に使えるもの

シングルコアを前提としたインフラ

~.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での対応

この課題に、 どう対応したのか

Page 17: 組み込みでもマルチコア。WEC2013での対応

マルチコアに関する主要な改善点

カーネル

.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での対応

カーネル

カーネルスレッド

schdule.c の ciritical section の増加; 12 -> 14

排他制御

Slim Reader/Writer Lock の導入

ARMv7 命令の積極使用

DMB, DSB, etc.

Page 19: 組み込みでもマルチコア。WEC2013での対応

.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での対応

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での対応

カーネルの SMP 性能を改善

.NET CF と C++11 での プログラミングを改善

Page 22: 組み込みでもマルチコア。WEC2013での対応

カーネル

Snapshot Boot (> Andriod)

ハイバネーションの一種:

ユビキタス社の QuickBoot と似ている(?)

システム(OS + App)の起動時間を

数秒以内に抑えることが可能

(※要実装・チューニング)

ちなみに:Armadillo-4x0 + WEC 7/WinCE 6.0

でも、6秒程度での起動が可能

(※20MB 程度の OS イメージの場合) 詳細は後述

Page 23: 組み込みでもマルチコア。WEC2013での対応

.NET Compact Framework 3.9

GC の改善

世代別 CG (> Android)

起動時間の短縮(shared server)

JIT コードのプロセス間共有 (> Android?)

Page 24: 組み込みでもマルチコア。WEC2013での対応

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での対応

OS の起動時間を短縮

マネージドコードの 応答性改善・起動時間短縮

ネイティブコードの

高速化(コンパイラ改善)

Page 26: 組み込みでもマルチコア。WEC2013での対応

仕組み

ハイバネーション + on demand loading

snapshot を作成して保存(ハイバネート)

起動:最低限必要な仮想空間イメージのみをロード

ブートローダと kernel の loader で対応

1.) 必須な領域のロードと HW 初期化(ブートローダ)

2.) その後は on demand でロード(kernel の loader)

non pageable な領域だけを先行ロード

この領域を小さく抑えることが起動時間短縮に寄与

Page 27: 組み込みでもマルチコア。WEC2013での対応

実装手順

実装ガイドがリファレンスに記載

サンプルコードもあり

詳細は Web で!

“Snapshot Boot Development (Compact 2013)”

http://msdn.microsoft.com/en-us/library/dn169259.aspx

Snapshot の取り方も載っています。

Page 28: 組み込みでもマルチコア。WEC2013での対応

おまけ

WEC 2013 = WEC 7 – many + α

Page 29: 組み込みでもマルチコア。WEC2013での対応

インフラ

CPU アーキテクチャ

MIPS(and SH)

ARMv6 以下

ミドルウェア

色々…

標準シェル(explorer)

UPnP, MTP, etc.

ハンドヘルドデバイスや

STB 向けの機能は削除(?)

Page 30: 組み込みでもマルチコア。WEC2013での対応

インフラ

CPU アーキテクチャ

MIPS(and SH)

ARMv6 以下

ミドルウェア

色々…

標準シェル(explorer)

UPnP, MTP, etc.

ハンドヘルドデバイスや

STB 向けの機能は削除(?)

大丈夫。

WEC 7 は、あと5年

(or 10年)は現役です!