授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
CPUキャッシュとメモリ階層の仕組みを理解し、データアクセスの局所性を意識した設計が出来る。
SoA(構造体の配列)とAoS(配列の構造体)の違いを学び、処理速度の検証が出来る。 |
CPUキャッシュとメモリの仕組みを学び、データアクセスの局所性を意識したメモリレイアウトを学習する。
SoA(構造体の配列)とAoS(配列の構造体)の特性を比較し、処理速度に与える影響を検証する。
ハードウェアの性能を最大限に引き出すための、データ配置の最適化手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
オブジェクト単位ではなく「データ」を中心に設計し、メモリ帯域を最大限に活用出来る。
オブジェクト指向が抱えるパフォーマンス上の問題を、データの配置工夫での解決が出来る。 |
オブジェクト単位ではなく「データ」そのものを中心に据えたデータ指向設計(DOD)の基礎を学習する。
オブジェクト指向が抱えるパフォーマンス上の問題を、データの配置工夫によって解決する手法を実践する。
メモリ帯域を有効活用し、現代のCPUに最適化したプログラム設計の考え方を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
Entity Component Systemの基本構造を理解し、データとロジックの完全な分離が出来る。
Systemによる一括処理を行うことで、大量のオブジェクトを高速に走査する仕組みが学べる。 |
ECS (Entity Component System)の構造を学習する。
データとロジックを完全に分離したシステムを構築する。
Systemによるコンポーネントの一括走査を行い、大量のオブジェクトを極めて高速に処理する仕組みを学習する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
標準のアロケータに頼らず、スタックアロケータを実装し、メモリ確保の高速化が出来る。
メモリの寿命(ライフタイム)を明示的に管理し、フラグメンテーションの発生を完全に抑える設計が出来る。 |
標準アロケータに依存せず、スタックアロケータ等を自作してメモリ確保を高速化する方法を学習する。
メモリの寿命(ライフタイム)を明示的に制御し、断片化の発生を完全に抑え込む設計を実践する。
用途に応じた最適なメモリ管理戦略を立て、システム全体の堅牢性と速度を向上させる。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
用途に応じて最適なメモリ管理を行う「汎用アロケータ」を設計し、システム全体に組み込むことが出来る。
特定のメモリ領域の使用量を追跡し、メモリ使用状況の可視化やデバッグが出来る。 |
用途別に最適なメモリ管理を行う「汎用アロケータ」を設計し、システム全体に統合する手法を学習する。
特定のメモリ領域の使用量を追跡し、メモリ使用状況の可視化やデバッグを行う機能を実装する。
3年次後期の集大成として、低レイヤのメモリ制御を完全に掌握する技術を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
オブジェクトの状態をバイナリ形式へ変換し、通信や保存が可能なパケットの構成が出来る。
エンディアン変換やパッキングを正しく行い、異なる環境間でも正確なデータ転送が出来る。 |
オブジェクトの状態をバイナリ形式に変換し、保存や通信に適したパケットを構成するシリアライズを学習する。
エンディアン変換やパッキングを正しく行い、異なる環境間でも正確に情報を転送する技術を実践する。
データのバイナリ表現を学習する。効率的なデータ交換の仕組みを構築する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
TCPとUDPの特性の違いを理解し、基本的な接続処理が出来る。
サーバ・クライアント間での双方向通信の仕組みを学び、簡単な送受信プログラムが作れる。 |
TCPとUDPの特性の違いや基本的なソケット通信の接続処理を学習する。
サーバ・クライアント間での双方向通信プログラムを自作し、情報の送受信プロセスを実体験する。
ネットワークプログラミングの基礎を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
ゲームループを止めないノンブロッキング通信を実装し、リアルタイムな情報交換が出来る。
std::thread等を活用し、通信処理をバックグラウンドで安全に動作させる仕組みが作れる。 |
ゲームループを止めないノンブロッキング通信を実装し、リアルタイムな情報交換の手法を学習する。
std::thread等を活用して通信処理を別スレッドで安全に動作させ、並列的なネットワーク制御を学習する。
高負荷な通信を伴う状況でも安定したゲームプレイを維持するための設計を学習する。 |
| 【理解度確認】中間テストにて確認する。 |
| 9 |
キャラクターの座標同期やイベント通知を実装し、マルチプレイの基礎ロジックが作れる。
通信ラグを考慮したデッドレコニング(推測航法)等の補間技術を使い、滑らかな挙動が作れる。 |
キャラクター座標の同期やイベント通知を実装し、マルチプレイの基礎となるロジックを構築する。
通信ラグを考慮したデッドレコニング(推測航法)等の補間技術を用い、滑らかな挙動再現を学習する。
ネットワーク特有の課題を技術的に解決し、多人数参加型システムの構築力を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
マクロやテンプレートを駆使して、C++に存在しない「実行時の型情報取得」の仕組みが作れる。
クラス名やメンバ変数の情報を動的に取得し、汎用的なデバッグ表示機能が作れる。 |
マクロやテンプレートを駆使し、C++に実行時の型情報取得(リフレクション)の仕組みを独自に構築する。
クラス名やメンバの情報を動的に取得し、汎用的なデバッグ表示や自動処理に活用する手法を学習する。
言語機能を拡張し、開発を劇的に効率化するための高度なメタプログラミングを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 11 |
取得した型情報を利用して、外部ファイル(JSON等)から値を自動で流し込む仕組みが作れる。
メタデータを用いた高度な自動化により、シリアライズ処理などの開発効率を劇的に向上出来る。 |
構築したリフレクション機能を使い、外部ファイルからメンバ変数へ値を自動注入する仕組みを学習する。
メタデータを用いた高度な自動化により、シリアライズ等の定型的コードを自動処理する環境を構築する。
高度な抽象化技術により、大規模開発におけるヒューマンエラーを排除する手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
プロファイラを使い、CPU使用率やネットワーク負荷が高い箇所の特定・計測が出来る。
ボトルネックとなっている処理を分析し、アルゴリズムの改善による具体的な高速化が出来る。 |
プロファイラを用いてCPU使用率やネットワーク負荷を可視化し、ボトルネックを特定する方法を学習する。
計測データを分析し、アルゴリズムの改善やデータ構造の変更による高速化を実践する。
勘に頼らない論理的な最適化プロセスを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
SIMD命令(SSE/AVX)の概念を理解し、1命令で複数のデータを同時に計算する説明が出来る。
ベクトル演算や行列計算をSIMD化し、数学処理を数倍高速化する最適化が出来る。 |
SIMD命令(SSE/AVX)の概念、1命令で複数のデータを同時に計算する最適化の基礎を学習する。
ベクトル演算や行列計算をSIMD化することで、数学処理を数倍高速化する具体的な実装を実践する。
CPUの演算能力を極限まで引き出すための、ハードウェア寄りの最適化技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
アトミック操作を用いたロックフリーなデータ構造の基本を理解し、スレッド間の競合を抑えることが出来る。
全CPUコアを無駄なく使い切るタスク並列化を行い、複雑なシステムの最適化が出来る。 |
アトミック操作を用いたロックフリーなデータ構造を学び、スレッド間の競合を最小限に抑える方法を学習する。
全CPUコアを使うタスク並列化から、システムの総合的なスループットを向上させる方法を学習する。
並列システムの最適化を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
3年間のC++機能を振り返り、大規模ゲームエンジンにおける各技術の役割の総括が出来る。
4年次の卒業制作に向けた、最適なアーキテクチャ選定と技術スタックの計画が立てられる。 |
3年間の高度なC++学習を振り返り、大規模エンジンにおける各技術の役割と相互作用を総括する。
4年次の卒業制作に向け、自身の技術スタックを整理し最適なアーキテクチャ選定の計画を立てる。
プログラマとして全技術を統合した最終評価を自身で行う。 |
| 【理解度確認】課題にて確認する。 |