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

MPe*_*ier 3 optimization

我对某个职称感到好奇,那是"优秀专业的高级开发人员".这不是实际的标题,但基本上是它的本质.在知识和技能方面,这对游戏行业意味着什么?我会假设基本的东西

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

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

Eth*_*her 14

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

这项工作需要大量的深度流水线装配编程,算法优化算法(认为达夫设备,网点IFS),编译时间计算(SWAR),元模板编程,多值计算在平行一次非常大的寄存器(我忘记那个名字... ...你需要在操作系统基础设施,低级系统操作,线性代数和C++特别是模板上扎实.您也将非常熟悉PlayStation3的独特架构,并且可能参与开发该公司游戏团队将构建的环境库.


Kyl*_*tan 6

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

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

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

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


Dan*_*son 5

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

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

每隔一段时间,人们就会问如何擅长低级优化。有一些很好的信息来源,大部分是专有的,但我认为这通常取决于经验。