作为游戏行业优化者的基本技能

时间:2009-11-26 03:45:28

标签: optimization

我很想知道某个职称,即“优化专业的高级开发人员”。这不是实际的标题,但基本上是它的本质。在知识和技能方面,这对游戏行业意味着什么?我会假设基本的东西,如

  • B树
  • 路径寻找
  • 算法分析
  • 内存管理
  • 线程(以及线程安全,原子性等相关主题)

但这只是我猜想的。这项工作所需的现实(和学术)基础知识是什么?

4 个答案:

答案 0 :(得分:14)

几年前,我在一家大北美游戏工作室采访了这样一个职位。

这项工作需要大量的深度管道装配编程,算术优化算法(思考Duff's Device,无分支ifs),编译时计算(SWAR),meta-template programming,计算许多在非常大的寄存器中同时并行显示值(我忘记了它的名称)...您需要在操作系统基础知识,低级系统操作,线性代数和C ++尤其是模板上保持稳定。您也将非常熟悉PlayStation3的独特架构,并可能参与开发该公司游戏团队将在其上构建的环境库。

答案 1 :(得分:6)

一般来说,我同意以太的帖子;这通常更多地是关于低级优化而不是算法的东西。知道好的算法会派上用场,但是在游戏中很多情况下你比O(logN)解决方案更喜欢O(N)解决方案,因为第一个解决方案在缓存上更友好,并且需要更少的内存管理。所以你需要更全面的知识。

也许在更一般的层面上,该工作可能想知道您是否可以执行以下部分或全部操作:

  • 在采样和调用图模式下使用CPU分析器(例如VTune,CodeAnalyst);
  • 使用图形分析器(例如Microsoft Pix,NVPerfHud)
  • 编写自己的分析/计时器代码并使用它生成有用的输出;
  • 重写函数以删除动态内存分配;
  • 重新组织并减少数据以更加缓存;
  • 重组数据,使其更加适合SIMD;
  • 编辑图形着色器以使用更少且更便宜的指令;

......还有更多,我很有信心。

答案 2 :(得分:4)

这实际上很像我的工作。对此有用的现实知识:

  • 使用各种分析器找到瓶颈的经验。
  • 确定原因存在这些瓶颈的经验和技巧。
  • 熟悉CPU缓存,虚拟内存和常见瓶颈,例如加载命中存储惩罚,L2未命中,浮点代码等。
  • 很好地理解多线程以及无锁和锁定解决方案。
  • 熟悉HLSL和图形编程,包括线性代数。
  • 熟悉SIMD技术以及相关硬件上的特定SIMD接口(配对单曲​​,VMX,SSE / MMX)。
  • 很好地理解相关硬件上使用的汇编语言。如果编写汇编,则要很好地理解指令配对,分支预测,延迟槽(如果适用)以及目标平台上的任何和所有适用的档位。
  • 很好地理解编译和链接过程,目标硬件上使用的二进制格式,以及操纵上述所有内容的工具(包括可用的编译器标志和优化)。

每隔一段时间,人们就会问如何善于进行低级优化。有一些很好的信息来源,主要是专有的,但我认为这通常归结为经验。

答案 3 :(得分:1)

这是“如果你懂得它”的那种东西之一。很难列出细节,有些工作室会有不同的标准。

简而言之,“高级开发人员”部分意味着你已经在这个街区;你有多年的经验,你有出色的表现,并且已经发布了游戏。您应该具备广泛主题的工作知识,例如内存管理等内容。

“优化专业”本质上意味着您知道如何让游戏更快地运行。您已经花了大量时间成功优化已发布的游戏。你应该对算法,3d渲染(花费大量时间渲染),cpu内在函数,内存管理等方面有广泛的了解。您通常也应该对您正在使用的硬件有深入的了解(优化PS3可能与优化PC有很大不同)。

这至多是理解的起点。关键是在该主题中拥有重要的现实经验;在高级别,它最好是从已经发货的标题开始。