为什么Windows中的游戏比OSX中的游戏运行好得多?


11

例如,在带有Bootcamp的Mac Mini上,Team Fortress 2在OSX中的运行速度约为20fps,在Windows中的运行速度约为80fps。这似乎很常见。为什么是这样?


这是在任何一个操作系统中双启动的同一台计算机。
SANS

如“不是虚拟机”中那样双重引导正确吗?
horatio 2011年

1
是的,直接启动到任一操作系统。
SANS

1
我总是觉得这些问题很有趣-只要它们不会演变为盲目的咆哮/燃烧-因为作为Mac用户(10个月),我会看到Windows用户的误解。
Ricket

Answers:


15

Windows上的Direct3D驱动程序经过了荒谬的优化,有时是针对特定游戏的,由各个硬件供应商开发。

Apple的OpenGL驱动程序由Apple编写和维护(AFAIK),旨在“通用”的OS使用,包括UI和其他功能。游戏和高性能吞吐量没有太多优化。

基本上,很多从资源的大量的资源已经进入了制作的DirectX快于Windows,而多资源少做同样的Mac上。


我什至更倾向于驱动程序中的着色器编译器,因为两者之间存在一些差异。altdevblogaday.com/2011/07/20/…说,对于流行游戏,NV / AMD甚至会手动优化其硬件的着色器。
亚当

5
不仅是驱动程序,它还是游戏开发人员。他们通常投入更多资源来优化Direct3d / DirectX而不是OpenGL。另一种情况是,最初只为Windows开发游戏并在以后移植。如果它应该达到类似的性能,那它必须是一个非常好的端口(例如,可能导致大量的代码重写)……大多数情况并非如此。
bummzack 2011年

那么Team Fortress 2在OSX上是用OpenGL渲染的,而在Windows上是D3D的吗?
SANS

没有,是的,Direct3D仅适用于Windows,因此任何其他平台上的任何游戏都使用OpenGL(或软件)渲染。Windows也支持OpenGL。但是大多数Windows版本的游戏都将使用Direct3D,因为如上所述,Windows驱动程序通常针对D3D进行了优化。
Ricket

13

尽管我不会轻视Microsoft可能对Windows和/或DirectX进行的优化,但我坚信大多数程序在Windows上的性能都会更好,这仅仅是因为开发人员所关注的(这就是金钱所在)。他们在考虑Windows的情况下进行设计决策,然后尝试使其在其他OS(Mac,Linux等)上运行。我经常在工作中遇到这个问题:其他项目在移植到非Windows系统时遇到了很多麻烦,因为开发人员将其视为事后考虑。我已经反复编写了可以在多个操作系统上构建的程序,而付出的努力很少,因为我从一开始就计划了这种方式。一旦您真的尝试过了(而不是事后努力地做港口工作),就可以了解它所需要的,并且几乎不需要额外的工作。


非编码人员的好奇心在这里:设计多平台时性能会如何?例如,您的多平台游戏在Windows上的运行速度是否会像Windows上的版本那样快?
杰森·皮诺

@Jason:更多有关所花费的时间和平台的特定性。没有什么可以阻止开发人员编写针对Windows进行了完全优化的代码,编写针对OSX进行了完全优化的单独的代码,然后停止基于平台使用的切换。但是,这样做的时间和资源往往超过这样做的好处。
Jordaan Mylonas

@Jason:在那种情况下,这实际上取决于您对游戏的设计水平(当我说设计时,我指的是计划,而不是实际的编码)以及不同操作系统的差异性。如果它们非常不同,那么在您必须分别解决每个OS的情况下,Jordaan的评论是适当的。但是随着OpenGL等通用接口的出现,随着时间的推移,不同的API相互借鉴了概念,它们都变得非常相似。因此,如今,在匹配功能和设计软件以能够使用每个功能而无需排除操作系统方面,它变得更加专业。
2011年

7

作为Mac的同行用户,我想提供一个附加因素:OS X中的CPU调度程序比Windows中的CPU调度程序更“公平”。

这是一个复杂的计算机科学主题,因此这是一种思考CPU调度程序的简单方法:处理器必须一次处理许多任务(所有打开的程序以及后台系统进程)。它实际上只能一次完成几件事(例如,内核数乘以每个内核的线程数;例如,双核i7可以一次执行4个任务)。因此,它将所有工作分解为多个部分,并在它们之间交替显示,以便看起来它实际上一次在做很多事情。当您运行两个程序时,处理器实际上只是在处理这两个程序之间来回切换,速度非常快(例如,这里几微秒,然后那里几微秒)。

事物以什么顺序执行以及持续多长时间的模式由“调度算法”决定。例如,循环调度程序只是将任务排列成一个圆圈,并按顺序处理每个任务。另一个调度程序可能会从最短到最长时间安排任务-小任务将很快完成,大任务可能需要等待一段时间才能完成。

Windows和OS X有很大的不同,它们的调度算法也有所不同。Windows在确定事物优先级方面有点“聪明”,因此它为可见程序赋予了更高的优先级,以使计算机看起来更快。但是,OS X对后台进程更为公平。两种操作系统之间的总体算法非常相似(它们都是多级反馈队列),但是这些小细节导致了不同的用户体验。

双方都有自己的优势。就像我说的那样,Windows中的可见程序将得到更快的显示,因为它们具有更高的优先级。但是,如果一个可见的程序决定承担大量精力,那么整个计算机将遭受更大的损失。OS X更公平的调度程序可实现更可预测和更稳定的速度,这对于音频和视频操作而言非常有用。例如,如果您在后台播放歌曲,则与Windows相比,同时执行其他操作时口吃的可能性较小。

因此,关键点在于:Windows中的全屏游戏将在CPU上获得较高的优先级,而在后台运行的任何内容都必须等待。在OS X中,情况并非如此。

有关调度程序的一些技术信息在这里给出; 其余的答案来自于我的计算机科学教育以及在过去10个月(偶尔使用Linux)后过去10个月中对OS X的使用情况。有时候,我对更公平的调度程序感到沮丧,但是其他时候,我欣赏它的优势。

顺便说一句,Linux有一个更加公平的调度程序实现。这就是使其成为出色服务器的原因,但我认为用户体验会下降。例如,当您的计算机陷入繁琐的任务时,您的光标将停止平稳响应,因为它的优先级与其他所有事物一样。这基本上在Windows或OS X中不会发生。


-2

一些已经“移植”到MacOSX的游戏实际上是在模拟器中运行的Windows游戏。虽然我没有完整的示例列表,但似乎至少有这样的SPORE:

SPORE从未在GNU / Linux上正式发布过,而Mac版本的发布速度很差。Mac端口实际上是与Cider打包在一起的Windows版本,它是一种折旧的技术,在游戏中包装了WINE(现在很旧)版本的WINE。(来源

根据定义,在仿真器中运行软件要比在本地运行软件慢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.