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

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

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

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

古賀信哉

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

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

自己紹介

前提の確認

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

伝えたいこと

分かって欲しいこと

ハンズオン

課題

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

正解は一つじゃない

最適解を決めるのは

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

選択肢を増やすには

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

正解は一つじゃない

最適解を決めるのは

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

選択肢を増やすには

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

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

正解は一つじゃない

最適解を決めるのは

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

選択肢を増やすには

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

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

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

正解は一つじゃない

最適解を決めるのは

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

選択肢を増やすには

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

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

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

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

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

どこで、いつ必要?

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

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

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

どこで、いつ必要?

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

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

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

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

確実に実行されること。

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

どこで、いつ必要?

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

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

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

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

確実に実行されること。

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

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

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数[ms]~数10[us]

数100[ms]~数[s]

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数[ms]~数10[us]

数100[ms]~数[s]

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

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

数[ms]~数10[us]

数[ns]~数[ms]

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

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

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

時間の尺度

人間の時間

ソフトウェアの時間

アプリケーション

OS

ハードウェアの時間

CPU

周辺機器

数100[ms]~数[s]

数[ms]~数10[us]

数[ns]~数[ms]

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

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

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

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

リアルタイム性

リアルタイム性とは

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

予測可能性

計画性

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

リアルタイム性

リアルタイム性とは

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

予測可能性

計画性

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

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

リアルタイム性

リアルタイム性とは

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

予測可能性

計画性

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

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

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

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

リアルタイム性

リアルタイム性とは

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

予測可能性

計画性

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

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

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

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

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

リアルタイム性

リアルタイム性とは

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

予測可能性

計画性

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

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

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

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

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

が定義されています。

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

それは何?

定周期動作の例

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

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

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

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

応用例

LED の点滅

音声出力(音階出力)

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

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

I2C, UART, Ethernet, etc.

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

PWM:Pulse Width Modulation

パルス幅変調

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

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

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

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

PWM:Pulse Width Modulation

パルス幅変調

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

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

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

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

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

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

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

外付けコントローラ

GPIO + ソフトウェアで対応

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

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

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

外付けコントローラ

GPIO + ソフトウェアで対応

どれが正解?

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

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

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

実現方策

これも一つじゃない!

三つの例(ハンズオン)

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

割り込み通知

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

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

実現方策

これも一つじゃない!

三つの例(ハンズオン)

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

割り込み通知

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

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

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

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

RTOS の場合

Windows Embedded Compact や Linux の場合

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

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

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

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

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

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

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

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

CPU の動作

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

入力応答動作と割り込み

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

マルチタスクと割り込み

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

CPU の割り込み応答動作

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

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

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

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

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

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

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

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

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

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

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

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

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

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

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

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

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

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

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

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

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

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

どちらが正解?

割り込みが良い場合

ポーリングが良い場合

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

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

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

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

使うもの

CPU ボード:Armadillo-440

ブートローダ

OS:Windows Embedded Compact 7

オシロスコープ

動かすもの

ソフトウェア PWM ドライバ

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

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

CPU ボードをセットアップ

ホスト PC と接続

ブートローダを書き込む

OS イメージを書き込む

開発環境セットアップ

Visual Studio 2008 Professional

OS イメージに対応した SDK

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

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

OS を起動する

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

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

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

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