正解は一つじゃない:選択肢と最適解

Post on 19-Jan-2017

913 views 0 download

Transcript of 正解は一つじゃない:選択肢と最適解

古賀信哉

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

自己紹介

前提の確認

伝えたいこと

分かって欲しいこと

ハンズオン

課題

正解は一つじゃない

最適解を決めるのは

状況(文脈)を理解しよう

選択肢を増やすには

正解は一つじゃない

最適解を決めるのは

状況(文脈)を理解しよう

選択肢を増やすには

「最高品質」が正解の場合もあれば、「ほどほどの品質」のものを、低いコストで提供することが正解の場合も少なくありません。

正解は一つじゃない

最適解を決めるのは

状況(文脈)を理解しよう

選択肢を増やすには

「最高品質」が正解の場合もあれば、「ほどほどの品質」のものを、低いコストで提供することが正解の場合も少なくありません。

「過剰品質」が開発期間の長期化と製品価格の高止まりを招き、競争力を下げる、というケースもあります!

正解は一つじゃない

最適解を決めるのは

状況(文脈)を理解しよう

選択肢を増やすには

「最高品質」が正解の場合もあれば、「ほどほどの品質」のものを、低いコストで提供することが正解の場合も少なくありません。

「過剰品質」が開発期間の長期化と製品価格の高止まりを招き、競争力を下げる、というケースもあります!

一方、「こんなこともあろうかと」を

言えると強いケースもあります。

どこで、いつ必要?

組み込みシステムとの関係

あのレポート、いつ出すの?

どこで、いつ必要?

組み込みシステムとの関係

あのレポート、いつ出すの?

リアルタイム動作の要件は、速いことではなく、

あらかじめ決まったタイミングで(期限までに)

確実に実行されること。

どこで、いつ必要?

組み込みシステムとの関係

あのレポート、いつ出すの?

リアルタイム動作の要件は、速いことではなく、

あらかじめ決まったタイミングで(期限までに)

確実に実行されること。

速いことは、必要条件の一つ。さらに、速いかどうかは、

時間の尺度で変わります。

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数[ms]~数10[us]

数100[ms]~数[s]

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数[ms]~数10[us]

数100[ms]~数[s]

スリープ関数は、1[ms] が最小単位なのが一般的。

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

数[ms]~数10[us]

数[ns]~数[ms]

クロック 2.5[GHz] なら、400[ps] です。

スリープ関数は、1[ms] が最小単位なのが一般的。

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

数[ms]~数10[us]

数[ns]~数[ms]

クロック 2.5[GHz] なら、400[ps] です。

スリープ関数は、1[ms] が最小単位なのが一般的。 ソフトウェア時間だとのんびりした

動作も、人間時間だと十分速い!

リアルタイム性

リアルタイム性とは

リアルタイム性が保証すること

予測可能性

計画性

リアルタイム性

リアルタイム性とは

リアルタイム性が保証すること

予測可能性

計画性

動作タイミングが予測可能であることにより、不確定要素を減らせます。

リアルタイム性

リアルタイム性とは

リアルタイム性が保証すること

予測可能性

計画性

動作タイミングが予測可能であることにより、不確定要素を減らせます。

リアルタイム性が低い例:

ストレージ上のスワップ領域を使い、メモリ容量を仮想的に増やす仮想記憶では、メモリアクセスに要する時間を予測するのが困難!

リアルタイム性

リアルタイム性とは

リアルタイム性が保証すること

予測可能性

計画性

動作タイミングが予測可能であることにより、不確定要素を減らせます。

リアルタイム性が低い例:

ストレージ上のスワップ領域を使い、メモリ容量を仮想的に増やす仮想記憶では、メモリアクセスに要する時間を予測するのが困難!

リアルタイムシステム用や組み込み機器用 OS では、メモリスワップ機能を提供せず、物理メモリの容量分しかメモリを使えないのが一般的です。

リアルタイム性

リアルタイム性とは

リアルタイム性が保証すること

予測可能性

計画性

動作タイミングが予測可能であることにより、不確定要素を減らせます。

リアルタイム性が低い例:

ストレージ上のスワップ領域を使い、メモリ容量を仮想的に増やす仮想記憶では、メモリアクセスに要する時間を予測するのが困難!

リアルタイムシステム用や組み込み機器用 OS では、メモリスワップ機能を提供せず、物理メモリの容量分しかメモリを使えないのが一般的です。

Java(JVM)のリアルタイム拡張仕様では、指定したメモリ領域を、実メモリ上にロックして、ページアウトさせないようにする API

が定義されています。

それは何?

定周期動作の例

月次処理, 日次処理, 毎時処理, etc.

定周期動作とリアルタイム性

定周期の精度を確保するにはリアルタイム性能が必要。

応用例

LED の点滅

音声出力(音階出力)

PWM 制御(出力パワー制御)

通信手順のソフトウェア実装

I2C, UART, Ethernet, etc.

PWM:Pulse Width Modulation

パルス幅変調

オン/オフの繰り返し + オン時間を変動

おまけ:Modulation(変調)について

例)入力音声の強度を PWM 変調

PWM:Pulse Width Modulation

パルス幅変調

オン/オフの繰り返し + オン時間を変動

おまけ:Modulation(変調)について

例)入力音声の強度を PWM 変調

オフからオンに変わるタイミングの周期は、一定。

専用のハードウェアを使う

マイコンや SoC 内蔵のコントローラ

外付けコントローラ

GPIO + ソフトウェアで対応

専用のハードウェアを使う

マイコンや SoC 内蔵のコントローラ

外付けコントローラ

GPIO + ソフトウェアで対応

どれが正解?

内蔵コントローラがあっても、使えない場合が。

(多重化された I/O ピンの問題)

実現方策

これも一つじゃない!

三つの例(ハンズオン)

スリープ関数(上位層:アプリケーションで可能)

割り込み通知

割り込みハンドラ(最下層)

実現方策

これも一つじゃない!

三つの例(ハンズオン)

スリープ関数(上位層:アプリケーションで可能)

割り込み通知

割り込みハンドラ(最下層)

割り込みハンドラを使うのが、時間精度は最高。だが、数10[ms]程度までなら、

スリープ関数で十分で、それが一番お手軽(最小コスト)。

RTOS の場合

Windows Embedded Compact や Linux の場合

割り込みハンドラと割り込み処理スレッドに役割を分担:

割り込みハンドラ:発生した割り込みに対応づけられている

同期オブジェクトを使って割り込み通知。

割り込み処理スレッド:自身が処理する割り込みに対応付けた

同期オブジェクトを使って割り込み通知を待ち、割り込み通知で

起床して応答処理を実行。

割り込みハンドラの実行時間を短くして、複数の割り込みに対する応答処理を並行に実行できるようにするための方策。

CPU の動作

マルチタスクとスケジューラ

入力応答動作と割り込み

マルチタスクと割り込み

システムコールと割り込み

CPU の割り込み応答動作

スケジューラが、割り込みをトリガにしてタスク/スレッドを切り替えます。

:タイマ割り込み, I/O 割り込み

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

頻繁に起きるものはポーリングで処理。

たまにしか起きないものは割り込みで処理。

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

頻繁に起きるものはポーリングで処理。

たまにしか起きないものは割り込みで処理。

1秒に一回しか変化しない信号をポーリングで処理すると、殆どの時間は CPU が無駄なループを実行することに!

電力消費の無駄は、電池の持ちを悪くします。

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

頻繁に起きるものはポーリングで処理。

たまにしか起きないものは割り込みで処理。

1秒に一回しか変化しない信号をポーリングで処理すると、殆どの時間は CPU が無駄なループを実行することに!

電力消費の無駄は、電池の持ちを悪くします。

IoT の時代、消費電力削減とセキュリティ確保が一層重要になります。

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

割り込み & ポーリングの例

割り込み応答スレッドによるポーリング

割り込みだけでは却って効率が悪いケースを、ポーリングでカバー。

使うもの

CPU ボード:Armadillo-440

ブートローダ

OS:Windows Embedded Compact 7

オシロスコープ

動かすもの

ソフトウェア PWM ドライバ

サンプルアプリケーション

CPU ボードをセットアップ

ホスト PC と接続

ブートローダを書き込む

OS イメージを書き込む

開発環境セットアップ

Visual Studio 2008 Professional

OS イメージに対応した SDK

ソフトウェア PWM ドライバ制御 API

OS を起動する

サンプルアプリケーションを動かす

LED を点滅させる(L チカ)

LED の輝度を変更する(PWM 制御)

PWM 出力をオシロスコープで観測する