代码之家  ›  专栏  ›  技术社区  ›  MPelletier

在游戏行业中作为乐观者工作的基本技能[关闭]

  •  3
  • MPelletier  · 技术社区  · 15 年前

    我很好奇某个职位,即“具有优化专业的高级开发人员”,它不是真正的职位,但本质上是这样的。在游戏行业,这意味着什么知识和技能?我假设一些基本的东西

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

    但这只是我的猜测。这种工作需要什么样的现实生活(和学术)基础知识?

    4 回复  |  直到 11 年前
        1
  •  14
  •   Ether    15 年前

    几年前,我在北美一家大型游戏工作室面试了这个职位。

    这项工作需要大量的深管道装配编程、算术优化算法(think Duff's Device ,无分支ifs),编译时计算( SWAR ) meta-template programming ,在非常大的寄存器中同时并行计算多个值(我忘记了它的名称)。您需要在操作系统FunDeMeTrimes、低级系统操作、线性代数和C++特别是模板上保持坚实。您还将非常熟悉PlayStation3的独特体系结构,并可能参与为该环境开发库,公司的游戏团队将在此基础上构建库。

        2
  •  6
  •   Kylotan    15 年前

    一般来说,我同意Ether的文章;这通常更多是关于低级优化,而不是算法方面的内容。知道好的算法是很方便的,但是在游戏中,你更喜欢O(n)解决方案而不是O(logn)解决方案,因为前者在缓存中更友好,并且需要更少的内存管理。所以你需要更全面的知识。

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

    • 在采样和调用图模式下使用CPU分析器(如vtune、codeanalyst);
    • 使用图形配置文件(如Microsoft Pix、NvPerfHud)
    • 编写自己的分析/计时器代码并用它生成有用的输出;
    • 重写函数以删除动态内存分配;
    • 重新组织和减少数据,使其更易于缓存;
    • 重新组织数据,使其更易于使用SIMD;
    • 编辑图形明暗器以使用更少更便宜的说明;

    …更重要的是,我确信。

        3
  •  4
  •   Dan Olson    15 年前

    实际上,这很像我的工作。现实生活中的实用知识:

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

    每隔一段时间,人们都会问如何在底层优化中变得更好。有一些很好的信息来源,主要是专有的,但我认为这通常归结为经验。

        4
  •  1
  •   Drakonite    15 年前

    这是那种“如果你明白了,你就知道”的东西。很难列出具体细节,而且一些制片厂会有不同的标准。

    简单地说,“高级开发人员”部分意味着你已经在这个街区附近了;你有多年的经验,在这些经验中你已经取得了优异的成绩,并且已经发布了游戏。您应该具有广泛主题的工作知识,其中包括内存管理等内容。

    “优化方面的专长”本质上意味着你知道如何让游戏运行得更快。您已经花费了大量时间成功地优化已发布的游戏。您应该对算法、3D渲染(需要花费大量时间进行渲染)、CPU内部原理、内存管理和其他方面有广泛的了解。您通常还应该对要使用的硬件有深入的了解(优化PS3可能与优化PC有很大不同)。

    这充其量只是理解的起点。关键是在这个主题上拥有重要的现实经验;在高级级别,最好是从已经发布的标题开始工作。