2014-05-10 45 views
6

這個問題上來:遊戲性能優化採訪

您正在尋找在你的遊戲的瓶頸,但沒有你改變正在遊戲中的任何速度更快,無論是什麼在GPU管線或CPU。沒有什麼是尖銳的,緩慢似乎分佈在各地。下一步你要怎麼做?

我被吹捧了。這是一個詭計問題嗎?在確定性能問題時,我總是認爲這是您需要將所有事情都縮小的地方。我不認爲它是mem分配,就像CPU perf中顯示的那樣。

+0

我不能完全肯定這是針對SO的話題。但我們會看到它是如何去... – Mysticial

+0

我可能會複製在不同的硬件上。不知道他們在找什麼。 –

+1

很明顯,你已經找到了解決方案 - 「我會在SO上發佈問題並等待結果」......我想這樣的答案會使你的面試失敗。 –

回答

0

也許這是關於思考更高效的算法。 「微型優化」有其侷限性;例如,你可以完美地優化氣泡排序,但是爲了獲得真正的大幅提速,你可以創造另一種排序算法。另外,在遊戲中,您可能會引入不同種類的可調質量/速度(或精度/速度)折衷。通常所有遊戲都有一些設置可以改變圖形的細節水平。

0

您正在尋找在你的遊戲的瓶頸,但沒有你 變化正在使遊戲得更快,無論是什麼在GPU 管道或CPU。沒有什麼是尖銳的,而且緩慢似乎在各地都有分佈。

這聽起來像是Uniformly Slow Code的定義。讓我們假設它實際上是什麼意思(而不是一些I/O瓶頸或在循環中創建不必要的對象,或者爲數據結構或算法等選擇一些不好的選擇)。

爲了讓代碼更快一致,你通常不得不違背良好的做法,這就是爲什麼我通常停止優化我的代碼時,它是一致的慢。 (我認爲「停止優化」在採訪中不是一個好的答案......)

讓事情更快的一種方法是確定一個適當的小操作序列,將它們集中在一個地方,然後手動提高這些事;一些「手動內聯」這些操作,然後對出現的代碼進行高級簡化。它需要良好的直覺,這可能值得做,並且對涉及的代碼有很好的理解。 This answer calls it bunching and horizontal optimization.

如果您的真的的代碼是一致的,那麼可能需要考慮的另一件事是Andrei Alexandrescu's optimization tips

3

我想要了解更多信息。 「緩慢」是表現不佳的一個糟糕指標,並且是症狀分類而不是症狀本身。例如,你可以形容「慢」的存在:

  • 低幀率
  • 響應輸入可憐
  • 高響應性和流暢的幀速率,但速度緩慢的遊戲機制(即:玩家和實體順利,但移動非常緩慢)
  • 在網絡遊戲的情況下,明顯的網絡延遲

所有這些問題有不同的潛在原因和解決方法:

  • 低但一致的幀率可能是由於您的遊戲循環效率低下造成的。簡單地運行你最喜歡的分析器可能表明大量的時間花在一段特定的代碼上。例如,在我寫的一個遊戲中,我發現低FPS是一個不良循環的結果,這個循環在沒有緩存的情況下多次計算實體之間的距離。在另一場比賽中,我發現我用來對地形進行查找的數據結構是O(N)而不是O(1)(python stdlib ... ick)。你無法診斷你看不到的問題,而剖析是第一道防線。
  • 響應不好可能是由於一些事情。如果FPS較高但控件響應緩慢,則用於訪問控件的API可能會很糟糕。某些控制器可能有可能會導致響應失敗的蹩腳驅動程序。它甚至可能是你的遊戲循環:你可能根本不會頻繁地檢查控制器的輸入(也許你沒有檢查每個勾號)。在前面提到的其中一個遊戲中,我遇到了一個問題,某些操作會產生延遲效果:您會使用某個項目,並且遊戲稍後會響應半秒鐘。事實證明,這個問題是由於客戶端完成往返服務器來執行操作,確認它發生了,並等待服務器回傳該項目已被使用。只要客戶立即採取行動就可以解決問題。
  • 緩慢的遊戲機制可能表明遊戲常數設置得不夠高。如果一切順利而美麗,但一切運動速度非常緩慢,很可能缺省速度或加速度不足。
  • 網絡延遲可能是由以下幾種原因引起的:您連接的路由器可能會失敗,您正在開發的VPS可能位於正在進行DDoSed的主機上,您可能會使用過度的協議(但一致)喋喋不休,或者你只是通過電線發送太多數據。在我寫在大學的一款模擬軟件中,計算是在實驗室的一些強大的計算機上進行的,而可視化是在我宿舍的MBP上運行的。事實證明,我從實驗室計算機發送到宿舍的大量數據足以使建築物內的廉價網絡交換機過載並丟棄數據包,導致可怕的滯後,但完全合理的日誌輸出。

所以我想這裏的答案是讓面試官更充分地描述症狀。 @阿里的答案很好,但可能是因爲手頭有一個更細微的問題,需要一些哄騙來診斷。

0

軼事:

我可以告訴你的是什麼問題,實際上不知道問題的答案,P

馬虎的DirectX電話。太多的物體。特別是對於一些老的DX9遊戲來說糟糕,因爲DX9需要爲每個對象做一個新的directdraw調用。或者類似的東西,故事就會發生。基本上導致了CPU等待空閒的CPU去處理所有的消息。

雖然沒有解決每個問題的解決方案,但我認爲它是值得一提的信息; p在其他評論中沒有看到。

這幾乎就像有太多的像素着色器,除了至少gpu在100%的情況下有很好的效果:D適用於煎煎蛋。 (此外,使用閉塞保存性能,然後加入像素着色器的質量,以該模型是一個壞主意)

我希望你能看到這個幽默,P