El rendimiento del juego se redujo a la mitad con la duplicación de pantalla en macOS

2

Cuando ejecuto el Portal en mi MBP sin una pantalla externa conectada, obtengo un sólido de 60 fps. Cuando me conecto y veo otra pantalla (la misma resolución y configuración del juego), se reduce a 30 fps, a veces 20, y tiene un impacto muy notable en la experiencia del juego.

Es lo mismo, independientemente del puerto de salida de video que use. El ahorro de energía de los gráficos está desactivado.

He intentado encontrar una confirmación de que la duplicación de pantalla afecta negativamente al rendimiento, pero solo me he topado con afirmaciones de que no lo hace y no debería. Pero lo he probado muchas veces y es muy reproducible.

  • ¿Cómo se implementa la duplicación / por qué afecta tanto el rendimiento?
  • ¿Es la única forma de obtener un rendimiento de juego decente para comprar un teclado externo y cerrar la tapa / cinta con un imán a la pantalla / usar pirateo de terminal?

MBP 15 "a mediados de 2014

Actualizar en V-sync

Como Phong sospechó correctamente, está relacionado con vsync. Sin él, obtengo unos 150 fps ridículos y una buena capacidad de respuesta, aunque me resisto a apagarlo debido a la rotura.

Sin embargo, sigue siendo un misterio cómo la duplicación de pantalla interactúa con y afecta a vsync.

La pantalla de MBP es de 60 Hz, y la pantalla externa también recibe una señal de 60 Hz. Cambiar la resolución del juego no afecta a la señal de video (siempre 1080p), pero la coincidencia de la salida y la resolución del juego (por ejemplo, 720p @ 60) aún presenta síntomas similares.

    
pregunta Andreas 30.12.2016 - 17:38

2 respuestas

6

Me parece que tiene Sincronización vertical habilitada. Esta función bloquea su velocidad de fotogramas a una fracción de la frecuencia de actualización de su pantalla (1, ½, ⅓…) para evitar artefactos visuales (específicamente, "rasgado") y velocidades de fotogramas fuera de control (que pueden dañar una GPU). Una buena indicación de esto es una velocidad de cuadro que salta de 30 a 60 FPS y regresa, sin nada en el medio.

Reflejo está afectando el rendimiento solo lo suficiente como para reducir la frecuencia de cuadros por debajo de 60 FPS. Incluso si de otro modo obtuvieras 59 FPS, Sincronización vertical bajaría tu velocidad de cuadros a 30 FPS.

Esto también puede resultar en un retraso de entrada. Dado que su pantalla / cursor ahora se ha rediseñado con la mitad (o un tercio) con tanta frecuencia, el retraso entre usted al mover el mouse y ver el resultado en la pantalla sería dos o tres veces más largo.

Vaya a la configuración de video del Portal y Deshabilite Sincronización vertical . No juego a Portal, pero casi todos los juegos tienen esa opción. Puede denominarse V-Sync .

Es posible que tengas que cambiar del modo Windowed a Pantalla completa . Dado que macOS fuerza V-Sync para el escritorio principal, V-Sync aún puede aplicarse cuando se juega en una ventana.

Para minimizar los efectos adversos de deshabilitar V-Sync , muchos juegos ofrecen la opción de limitar la velocidad de cuadros. Si esa opción está disponible, intente establecer un máximo de, por ejemplo. 90 FPS o incluso 60 FPS . Esto a menudo ofrece lo mejor de ambos mundos.

Vea si una combinación de estas soluciones resuelve su problema.

Si prefieres mantener V-Sync habilitado, muchos juegos ofrecen una opción para habilitar Triple Buffering . Esto ayudará a suavizar sus velocidades de fotogramas (por lo tanto, minimizar las caídas repentinas en las velocidades de fotogramas). Habilitarlo también puede resultar en un mayor retraso en la entrada, aunque por lo general no es tan grave como el causado por una caída de 30 FPS.

Una última sugerencia sería tratar de extender su escritorio a la pantalla externa como un Espacio separado (en mi opinión, es posible con Yosemite y superior). ¿Su caso de uso requiere Reflejo ? No estoy muy familiarizado con esto en la Mac, pero no veo por qué esto no sería posible.

Explicación a vista de pájaro de lo que está causando la caída de la frecuencia de cuadros con el reflejo:
Con Reflejo , su Mac debe mostrar el mismo marco en su pantalla interna y en su pantalla externa. Además de hacer que las pantallas se esperen mutuamente, esto implica un "trabajo" adicional que incluye tiempo de cómputo adicional y administración de búfer (para asegurarse de que muestren lo mismo al mismo tiempo), así como el retardo de ida y vuelta a través de su cable externo o peor, Wi-Fi / Bluetooth.

Mientras esto sucede, tu GPU está mostrando el siguiente fotograma en su búfer interno, pero no lo envía a tu pantalla hasta que obtiene el OK (debido a V-Sync ). Durante este período de espera, su GPU se detiene de manera efectiva, no procesando fotogramas adicionales (a menos que esté disponible el Buffering Triple o N), lo que reduce aún más su velocidad de fotogramas. Luego, dependiendo de dónde se encuentre la visualización más lenta en su ciclo de actualización, la visualización del siguiente fotograma puede retrasarse nuevamente a la siguiente fracción.

Debes tener en cuenta que para representar tu juego a 60 FPS, tu subsistema de gráficos solo tiene 33ms para realizar todo ese trabajo adicional (menos el tiempo que necesita la GPU para procesar esos cuadros en primer lugar). El viaje de ida y vuelta a su pantalla externa solo puede tomar un par de milisegundos. El trabajo de sincronización es en sí mismo costoso (en el tiempo). No es incomprensible que la sincronización de dos pantallas tarde más de 20 o 30 milisegundos.

Ahora, en el párrafo anterior, asumí que su GPU estaba lista para el siguiente fotograma en el momento en que sus pantallas terminaron de dibujar la actual. Imagina que no lo era. Bueno, ahora las pantallas están hambrientas y son las que terminan esperando en la GPU. Probablemente termine cayendo a la siguiente fracción de su frecuencia de actualización más lenta. Lo que podría significar una caída de 1-2 FPS V-Sync Off se convierte en 30 FPS con ella On .

Por lo tanto, está intentando sincronizar dos pantallas (a través de Reflejo ), y luego está intentando sincronizar AQUELLOS contra su GPU (a través de V-Sync ). El resultado es potencialmente una gran cantidad de espera.

No es inusual experimentar alguna degradación del rendimiento al conectar subsistemas con niveles de rendimiento dispares. Es por eso que se crearon buffers y operaciones asíncronas.

Al sincronizar, un retraso en cualquier lugar causa retrasos en todas partes.

Para maximizar el rendimiento, mejor permita que todos hagan su trabajo en su propio tiempo.

    
respondido por el user11633 30.12.2016 - 17:50
0

Condensando algo de información sobre lo que funcionó al final:

  • Vsync habilitado
  • Escritorios separados en cada monitor
  • Mueva el escritorio principal (el dock) a la pantalla en la que desea jugar. Portal puede seleccionar un monitor en el juego, pero macOS se atornilla con el cursor de todos modos a menos que juegues en la pantalla principal, por lo que esa opción es inútil.
  • Atenúe la otra pantalla hacia abajo.

Lo mismo para Portal 2. A diferencia del primer juego, también admite el almacenamiento en búfer triple.

Usar aplicaciones como DisableMonitor solo complica las cosas. De alguna manera terminas con el sistema de coordenadas del monitor deshabilitado (y el fondo del escritorio) superpuesto al habilitado, haciendo que los cursores aparezcan donde no están. El desarrollador parece haber tomado precauciones con el aspecto de esta línea: CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID) , pero eso no parece seguir, al menos no en macOS sierra.

    
respondido por el Andreas 01.01.2017 - 00:36

Lea otras preguntas en las etiquetas