並列プログラミングは近年の計算機で効果的に高速に演算させるためには必須の技術である。本講義及び演習では並列プログラミングのための基礎知識と具体的な実装法を習得する。
並列プログラムでは、非並列プログラムでは生じない不具合が起きる。不具合がなぜ起きるのかの理由や不具合を発生させないための手法を講義では学び、具体的なプログラミングを演習では体験する。そのためプログラミングの知識は事前に身につけた上で受講されたい。使用言語は主にJavaである。
並列プログラムを正しく組み立てるための、正しいデータ資源の共有、同期化、計算資源適切な分配、遅延実行と開始などの知識と技術を身につけることを目標とする。
代表的な題目としては
1)データの実体の格納されている領域の理解
2)スレッドプログラミング
3)イベントドリブンプログラミング
4)GPUプログラミング
スレッドプログラミング、GPUプログラミング、GUIプログラミング、可視性、同期、モニタ、アトミシティ
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
教室での講義回と情報工学系計算機室での演習回をほぼ交互に行い、知識と実践力をつける
授業計画 | 課題 | |
---|---|---|
第1回 | 導入、イベント駆動 | イベントとイベントハンドラ |
第2回 | 演習1 | JavaFX プログラム |
第3回 | イベント駆動(2) スレッド | イベント転送 スレッド, モニタ |
第4回 | 演習2 | JavaFX プログラム2 |
第5回 | スレッド安全 復習:データとその格納法 | 非共有、不可変、同期 浅いコピーと深いコピー、実体と参照 |
第6回 | 演習3 | 実体と参照の復習、多型性の利用 競合状態 |
第7回 | スレッドと複雑な同期 アトミック | ウェイト、ジョイン、ノーティファイ 飢餓 |
第8回 | 演習4 | 並行サーバ |
第9回 | 遅延実行 ストリーム | ストリーム、ラムダ式、スレッドプール |
第10回 | 演習5 | ラムダ式とストリーム |
第11回 | GPU プログラミング | OpenCL |
第12回 | 演習6 | OpenCL |
第13回 | GPUプログラミング 画像処理 | データ並列計算 |
第14回 | 演習7 | 画像処理 総合応用プログラム |
学修効果を上げるため,教科書や配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ概ね100分を目安に行うこと。
なし
講義資料はT2SCHOLAにアップロードします。データ、サンプルコードはウェブサイトにアップロードします。
演習レポート及び、筆記試験。演習レポートの点数を主として評価する。ただし筆記試験の出席は必須。
演習用計算機の台数を越えた受講生が居る場合には、情報工学科生を優先します。