Bottleneck (ボトルネック)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。システム全体の処理性能において、最も処理速度の遅い一部分(CPUの特定処理、またはGPUのピクセル計算など)が全体の足を引っ張り、全体の速度を決定してしまっている状態の解説。
現実世界での例え:ビンの口(ボトルネック)が細いと、中の水がいくら多くても『少しずつしか出てこない』物理的な限界
ボトルネックは、「ビンの本体(GPU)がどれだけ巨大で太くても、ビンの首(CPU)がストローのように極端に細ければ、ビンを逆さまにしたときに水(フレームレート)はストローの太さのスピードでしか出てこないという物理の限界」です。この状態でビンの本体をさらに大きくする(グラフィックをさらに軽くする)無駄な作業を行っても、ビンの首の細さが変わらない限り、水が出るスピード(ゲームの軽さ)は1滴も速くなりません。最も細い首の部分を少し広げる(重いスクリプトを最適化する)ことだけが、全体のパフォーマンスを爆発的に引き上げる唯一の手段です。
図:Bottleneck (ボトルネック)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック
詳細な仕組みと動作原理
プロファイラを使い、現在のボトルネックが「CPU Bound」なのか「GPU Bound」なのかを最初に切り分け、足を引っ張っている真犯人の処理だけを集中的に削減します。