備忘録まとめ
MATLABの並列処理関数について調べた,他の人に発表する機会があったのでその内容の備忘録まとめです。
parfeval()
内容
- ワーカーへのタスク振り分け及び使用
- 任意のワーカーにタスクを振り分けることが可
- ワーカーの負荷を均等にできる
- 関数への制約
- 関数は独立していること
- 他のタスクに依存していないこと
- 計算の透明性
- 関数が独立しているため計算の透明性は高い
- 結果の取得のためには関数{fetchOutputs}を使用する必要がある
- リソース状況の可視化
- グローバル並列プール(gcp)で可視化が行える
- エラーチェック
- fetchOutputs関数でエラー状況を詳細に確認できる
解釈
振り分けられたタスクとして非同期実行する関数
これ単体でタスクを振り分けるのではなく, 別で振り分けてそこから非同期関数として機能する
parfevalOnAll()
内容
- ワーカーへのタスク振り分け及び使用
- すべてのワーカー全で関数を非同期実行できる
- 全体の計算時間を減らせる
- 関数への制約
- 関数は独立していること
- 全ワーカーで行われるので開発の設計による
- 計算の透明性
- 計算結果の取得を一括で行える
- リソース状況の可視化
- グローバル並列プール(gcp)で可視化が行える
- エラーチェック
- fetchOutputs関数でエラー状況を詳細に確認できる
- 並列計算ツールで使用される関数
- 各ワーカーが非同期実行で処理される
- すべてのワーカーの処理が終われば出力を得られる
f = parfevalOnAll(poolの数{※任意},実行したい関数, ひとつの関数が返す値の個数, 渡したい引き数...)
f - 出力関数はparallel.FevalOnAllFutureオブジェクトとして返される
fetchOutparts(f)
parallel.Futureオブジェクト
モチベーション
必要なデータだけを一元管理したいな~
内容
prfevalやparfevalOnAllなどの関数を使用したときの出力引数
調査
Why(なぜ使うか?):MATLABで並列処理関数を使用したときに自動的に立ち上がる
What(何?):並列処理の計算・結果を一括で管理するための箱
Where(どこで使えるか?):parfevall
やparfevalOnAllの出力引数として自動作成される
When(いつ使えるか?):並列処理の結果・計算途中での介入, エラーや例外処理の対処時などの時に使える
Who(誰にとって得が大きいか?):プログラム管理者および開発者の可読性の向上に寄与する
How(どんな使い方が出来るか?):afterEachやafterAllなどのコールバック関数を併用することでデバック性能の向上
? state
プロパティの変更をトリガーとすることで非同期タスクの状態変更を詳細に調べることが出来る.
わからなかった単語や指摘されたこと
不明単語・題名 | 内容 |
---|---|
並列処理 | 複数の主体が複数のタスクを切り替えながら処理すること 並行処理とは一つの主体という点で異なる |
ワーカー | 並列処理でどれだけの人(処理を行う計算機)が作業するかを表すもの |
待ち行列理論 | タスク振り分けの考え方. 重いタスクで時間をとるより,タスクを小さくして流動的になライフサイクルにするのがよいと指摘された. |
仮定不足 | 最小のタスクを考えてそこから飛躍させるのはいいが,それで満足しない. 今回でいえば, ワーカーが行っているタスクが外から来た場合の処理はどうする? 並列処理をした後に, また並列処理をしたらどうするなどのパターンを考えていなかった. |
学んだこと
無知傲慢であった. 自分で勉強していたスタイルを人に説明できるように調べていたが,本番になってかなり緊張した. また,説明の際の例えが分かりにくかったと気づいた. 自分ではわかっているつもりでも,人によってはわかりづらいことがあって,それをほかにどういう言い回しで簡潔にいうかが出来る人の特徴であると,他の人を見て気づいた.
またわからないとき,どの段階で人に聞けばいいかわからない. もっと人と話して,コミュニケーションをとって自分の意見を言えるように練習する必要があると感じた. コミュ障はプログラマーにとって致命的だと,他の人の会話を聞いていると気づかされた.