這個問題上來:遊戲性能優化採訪
您正在尋找在你的遊戲的瓶頸,但沒有你改變正在遊戲中的任何速度更快,無論是什麼在GPU管線或CPU。沒有什麼是尖銳的,緩慢似乎分佈在各地。下一步你要怎麼做?
我被吹捧了。這是一個詭計問題嗎?在確定性能問題時,我總是認爲這是您需要將所有事情都縮小的地方。我不認爲它是mem分配,就像CPU perf中顯示的那樣。
這個問題上來:遊戲性能優化採訪
您正在尋找在你的遊戲的瓶頸,但沒有你改變正在遊戲中的任何速度更快,無論是什麼在GPU管線或CPU。沒有什麼是尖銳的,緩慢似乎分佈在各地。下一步你要怎麼做?
我被吹捧了。這是一個詭計問題嗎?在確定性能問題時,我總是認爲這是您需要將所有事情都縮小的地方。我不認爲它是mem分配,就像CPU perf中顯示的那樣。
也許這是關於思考更高效的算法。 「微型優化」有其侷限性;例如,你可以完美地優化氣泡排序,但是爲了獲得真正的大幅提速,你可以創造另一種排序算法。另外,在遊戲中,您可能會引入不同種類的可調質量/速度(或精度/速度)折衷。通常所有遊戲都有一些設置可以改變圖形的細節水平。
您正在尋找在你的遊戲的瓶頸,但沒有你 變化正在使遊戲得更快,無論是什麼在GPU 管道或CPU。沒有什麼是尖銳的,而且緩慢似乎在各地都有分佈。
這聽起來像是Uniformly Slow Code的定義。讓我們假設它實際上是什麼意思(而不是一些I/O瓶頸或在循環中創建不必要的對象,或者爲數據結構或算法等選擇一些不好的選擇)。
爲了讓代碼更快一致,你通常不得不違背良好的做法,這就是爲什麼我通常停止優化我的代碼時,它是一致的慢。 (我認爲「停止優化」在採訪中不是一個好的答案......)
讓事情更快的一種方法是確定一個適當的小操作序列,將它們集中在一個地方,然後手動提高這些事;一些「手動內聯」這些操作,然後對出現的代碼進行高級簡化。它需要良好的直覺,這可能值得做,並且對涉及的代碼有很好的理解。 This answer calls it bunching and horizontal optimization.
如果您的真的的代碼是一致的,那麼可能需要考慮的另一件事是Andrei Alexandrescu's optimization tips。
我想要了解更多信息。 「緩慢」是表現不佳的一個糟糕指標,並且是症狀分類而不是症狀本身。例如,你可以形容「慢」的存在:
所有這些問題有不同的潛在原因和解決方法:
O(N)
而不是O(1)
(python stdlib ... ick)。你無法診斷你看不到的問題,而剖析是第一道防線。所以我想這裏的答案是讓面試官更充分地描述症狀。 @阿里的答案很好,但可能是因爲手頭有一個更細微的問題,需要一些哄騙來診斷。
軼事:
我可以告訴你的是什麼問題,實際上不知道問題的答案,P
馬虎的DirectX電話。太多的物體。特別是對於一些老的DX9遊戲來說糟糕,因爲DX9需要爲每個對象做一個新的directdraw調用。或者類似的東西,故事就會發生。基本上導致了CPU等待空閒的CPU去處理所有的消息。
雖然沒有解決每個問題的解決方案,但我認爲它是值得一提的信息; p在其他評論中沒有看到。
這幾乎就像有太多的像素着色器,除了至少gpu在100%的情況下有很好的效果:D適用於煎煎蛋。 (此外,使用閉塞保存性能,然後加入像素着色器的質量,以該模型是一個壞主意)
我希望你能看到這個幽默,P
我不能完全肯定這是針對SO的話題。但我們會看到它是如何去... – Mysticial
我可能會複製在不同的硬件上。不知道他們在找什麼。 –
很明顯,你已經找到了解決方案 - 「我會在SO上發佈問題並等待結果」......我想這樣的答案會使你的面試失敗。 –