usar tarjeta que procesador mismo mercado libre gráfica grafica forzar como celulares aceleracion gpu cpu hardware raytracing rasterizing

gpu - que - tarjeta gráfica



¿Por qué utilizamos CPU para el seguimiento de rayos en lugar de GPU? (1)

Soy uno de los arquitectos de software de renderizado en un gran VFX y un estudio de funciones animado con un renderizador propietario (no Pixar, aunque una vez fui el arquitecto de software de renderizado allí, hace mucho, mucho tiempo).

Casi toda la representación de alta calidad para película (en todos los estudios grandes, con todos los procesadores principales) es solo para CPU. Hay un montón de razones por las que este es el caso. Sin ningún orden en particular, algunos de los realmente convincentes para darle una idea de los problemas:

  • Las GPU solo van rápido cuando todo está en la memoria. Las tarjetas GPU más grandes tienen, qué, 12GB o menos, y tiene que contener todo . Bueno, generalmente representamos escenas con 30 GB de geometría y que hacen referencia a 1 TB o más de textura. No se puede cargar eso en la memoria de la GPU, es literalmente dos órdenes de magnitud demasiado grande. Por lo tanto, las GPU simplemente no pueden lidiar con nuestras escenas más grandes (o incluso promedio). (Con los procesadores de CPU, podemos realizar tareas desde el disco cuando sea necesario. Las GPU no son buenas para eso).

  • No creas en el bombo, el trazado de rayos con GPU no es una ganancia obvia sobre la CPU. Las GPU son excelentes para el trabajo altamente coherente (hacer lo mismo con muchos datos a la vez). El trazado de rayos es muy incoherente (cada rayo puede ir en una dirección diferente, intersectar diferentes objetos, sombrear diferentes materiales, acceder a diferentes texturas), por lo que este patrón de acceso degrada el rendimiento de la GPU. Es solo muy recientemente que el seguimiento de rayos de GPU puede coincidir con el mejor código de seguimiento de rayos basado en la CPU, y aunque lo ha superado, no es mucho, no es suficiente para eliminar todo el código antiguo y comenzar de nuevo con un código frágil con errores para GPUs . Y las escenas más grandes y caras son aquellas en las que las GPU son solo ligeramente más rápidas. Ser mucho más rápido en las escenas fáciles no es realmente importante para nosotros.

  • Si tiene un código reforzado de producción de 50 o 100 años hombre en su procesador basado en CPU, simplemente no lo tire y comience de nuevo para obtener una aceleración de 2x. El esfuerzo de ingeniería de software, la estabilidad, etc., es más importante y un factor de costo mayor.

  • De manera similar, si su estudio tiene una inversión en un centro de datos con 20,000 núcleos de CPU, todo en el factor de forma más pequeño, más eficiente en cuanto a energía y calor que pueda, eso también es una inversión de costos irrecuperables que no solo tira. Reemplazarlos con máquinas nuevas que contienen GPU de primera línea aumenta enormemente el costo de su granja de render, son más grandes y producen más calor, por lo que, literalmente, es posible que no se ajuste a su edificio.

  • Ley de Amdahl: la "representación" real per se es solo una etapa en la generación de las escenas, y las GPU no ayudan con eso. Digamos que toma 1 hora generar y exportar completamente la escena al renderizador, y 9 horas para "renderizar", y de esas 9 horas, una hora es leer textura, volúmenes y otros datos del disco. Por lo tanto, de las 10 horas en que el usuario experimenta el procesamiento (pulsando el botón hasta que la imagen final está lista), 8 horas se aceleran con las GPU. Entonces, incluso si la GPU fuera 10 veces más rápida que la CPU para esa parte, pasas de 10 horas a 1 + 1 + 0.8 = casi 3 horas. Por lo tanto, la aceleración de la GPU 10x solo se traduce en una ganancia real 3x. Si la GPU fue 1,000,000x más rápida que la CPU para el rastreo de rayos, aún tienes 1 + 1 + diminuto, lo que es solo una aceleración de 5x.

¿Pero qué hay de diferente en los juegos? ¿Por qué las GPU son buenas para juegos pero no para películas?

En primer lugar, cuando realice un juego, recuerde que debe procesarse en tiempo real; eso significa que su restricción más importante es la velocidad de fotogramas de 60Hz (o lo que sea), y sacrifica la calidad o las funciones cuando sea necesario para lograrlo. En contraste, con la película, la restricción inquebrantable está haciendo que el director y el supervisor de VFX estén contentos con la calidad y el aspecto que él o ella desea, y el tiempo que le lleva obtener eso (hasta cierto punto) es secundario.

Además, con un juego, renderiza fotograma a fotograma tras fotograma, en vivo frente a cada usuario. Pero con la película, efectivamente se está renderizando UNA VEZ, y lo que se entrega a los cines es un archivo de película, por lo que los espectadores nunca sabrán o les importará si le tomó 10 horas por cuadro, pero notarán si no se ve bien. Así que de nuevo, hay una penalización menor en los rendimientos que toman mucho tiempo, siempre que se vean fabulosos.

Con un juego, realmente no sabes qué fotogramas vas a renderizar, ya que el jugador puede vagar por todo el mundo, ver desde casi cualquier lugar. No puedes y no debes tratar de hacerlo todo perfecto, solo quieres que sea lo suficientemente bueno todo el tiempo. ¡Pero para una película, las tomas son todas hechas a mano! Una gran cantidad de tiempo humano se dedica a componer, animar, iluminar y componer cada disparo, y luego solo es necesario renderizarlo una vez. Piense en la economía: una vez que 10 días de calendario (y salario) se han utilizado para iluminar y componer la toma de manera correcta, la ventaja de renderizarla en una hora (o incluso un minuto) en comparación con la noche a la mañana, es bastante pequeña y no vale la pena Cualquier sacrificio de calidad o complejidad alcanzable de la imagen.

Después de hacer algunas investigaciones sobre rasterización y trazado de rayos. Descubrí que no hay mucha información sobre cómo funcionan las CPU para el trazado de rayos disponible en Internet. Me encontré con un artículo sobre Pixar y sobre cómo pre-renderizaban los Cars 2 en la CPU. Esto les llevó 11.5 horas por cuadro. ¿Una GPU no habría procesado esto más rápido con la misma calidad de imagen? http://gizmodo.com/5813587/12500-cpu-cores-were-required-to-render-cars-2 https://www.engadget.com/2014/10/18/disney-big-hero-6/ http://www.firstshowing.net/2009/michael-bay-presents-transformers-2-facts-and-figures/ Cheers, Sam