So, given this pipeline that was in the quiz, we found that B is the slow stage
here and B is, in fact, called the bottleneck. It's the slowest stage and it's
the one that determines how fast anything is going to come out of the pipeline.
And there's always a bottleneck in the pipeline. In fact, there's always some
slowest stage. Maybe two or three that are tied for slowest but there's always
some stage that's the slowest. Objects 3 and 4 move on through the pipeline and
object 2 is still being processed by B. So, what this is called is when stage C
is waiting for input and nothing's coming because we're waiting for B to finish,
that's called starvation. That's where C is not getting anything until B is
totally complete. On the other hand, what's happening here is stage A has
finished processing object 1 but object 1 can't move on because, stage B is
still processing object 2. This is called stalling. With the rendering pipeline,
these same sorts of principles apply. Having the application run efficiently and
keep the GPU fed with data is a common bottleneck for example. The bottleneck
will change over time. With sometimes one stage being the slowest sometimes
another. Gpu designers use different techniques to perform load balancing, such
as first in and first out queues. Where you sort of stack up a bunch of objects
so that if the stage suddenly gets faster, a bunch of objects can move into it
quickly, or other techniques such as unified shaders. We wont be describing
these techniques in detail in this course, but it's good to be aware that the
GPU has a lot going on inside of it. Various performance debugging tools let you
see what parts of the pipeline are bottlenecks and so, can help you improve the
performance of your application.
このパイプラインではステージBの処理速度が遅く 流れを妨げています
ここがボトルネックとなり 全体の処理速度を左右しているのです
どのパイプラインにも 必ずボトルネックが存在します
2～3つあることもあり 必ず最も遅い工程があります
オブジェクト3と4はすべての処理が終わりましたが オブジェクト2はBでまだ処理中です
ステージCはインプットを待っている状態です
このような状態はスタベーションと呼ばれています
つまりBが終わるまでは Cには何も入ってこないのです
一方Aではオブジェクト1の処理が終了しましたが
Bは処理中なので次に進むことができません これをストールと呼びます
レンダリングパイプラインでは このような問題がよく起こります
効率よく動かすことが難しいのです
ボトルネックは時間の経過とともに変わります
だからFIFOなど負荷を分散する技術が 使われているのです
流れが速くなれば滞っているオブジェクトが 次々に供給されるようになっています
他には統合シェーダなども使われています
このコースでは詳しくは説明しませんが
GPUでいろんな処理が行われていることを 知るだけでも十分です
デバッグツールでボトルネックを調べれば パフォーマンスを上げることができるでしょう
这里是我们上次测验的流水线. 我们发现阶段B是最慢的阶段
事实上，这称为瓶颈(bottleneck)
我们看最慢的阶段所需的时间, 就知道流水线生产的速度
总是会有瓶颈在流水线里..
事实上..总是有一些最慢的阶段..可能有2或3个..
对象3和4在流水线已经搞定了..
而对象2仍然在被阶段B所处理..
当阶段C等待输入的时候...
这种状态被称为starvation(饥饿)
另外一方面..
阶段A已经搞定了对象1. 但是对象1还不能移动..
因为阶段B还在处理对象2..这这种状态被称为stalling(拖延)
渲染流水线本质上和这个差不多..让应用程序运行效率和保持给GPU传送数据数据，是一种常见的瓶颈
瓶颈会随着时间而变化.
有时候有1个阶段是最慢的
有时候另外1个阶段才是最慢的.. GPU设计使用不同的技术来执行负载均衡
比如先进先出队列。 您在其中堆放了一堆的对象
所以，如果有阶段突然变得更快， 一堆的对象可以移动的很快
或其他技术，如统一着色器( unified shaders)。 我们不会本门课程中
详细展开来讲解这些技术 但说这些是为了让你认识到
GPU 有很多事情要做。 另外还有很多各项性能调试工具让你
看到什么管道的部分是瓶颈，所以，可以帮助您改进 ( pipeline 有时候翻译成"流水线"有时翻译成"管道" )
您的应用程序的性能。
在小考出現的管線裡，B 是最慢的階段
我們稱 B 為瓶頸（Bottleneck）
它是最慢的，也是決定管線效率的階段
管線總是會有瓶頸，總有個最慢的階段
也許有兩三個一樣慢，但總有最慢的
3 跟 4 號物件繼續在管線移動
而 B 階段還在處理 2 號物件
當 C 等待輸入，但是沒有東西進來，因為 B 還沒完成
這種情況叫飢餓（Starvation） 即 C 在 B 完成前不會有任何輸入
另一方面，階段 A 已經處理完物件 1
但是不能繼續因為階段 B 還在處理物件 2
這個叫作停頓（Stalling）
同樣的原則也適用於繪圖管線
讓應用程式跑得夠有效率使 GPU 一直有資料可處理是種常見瓶頸出現之處
瓶頸會隨時間改變，有時這階段比較慢、有時另一階段比較慢
GPU 設計者使用各種技術來平衡負載，像是先進先出的佇列
在前面的階段儲備一些物件
如果慢的階段突然變快，這些物件可以快速通過
或是其它技術像是統一 Shader（Unified Shader）
在這門課我們不會深究細節
但是大概知道 GPU 內有很多複雜的運作機制是好的
各式效能除錯工具讓你找出管線哪個階段是瓶頸
以幫助你改善程式的效能