¿Por qué la tubería programable (GLSL) es más rápida que la tubería fija?


27

Así que me estoy enseñando GLSL y estoy tratando de descubrir por qué se supone que es más rápido que la tubería de función fija.

La razón por la que tengo un problema es que, según tengo entendido, los sombreadores que crea están reemplazando secciones de la tubería que estaban allí antes. Entonces, ¿cómo es que simplemente proporcionar su propia versión acelera las cosas?

Lo único que puedo pensar es que si intentaste decir tu propia ecuación de iluminación antes, tendrías que hacer el cálculo en la CPU, pero ahora puedes hacer los cálculos en la GPU que serán más rápidos.

¿Estoy entendiendo esto correctamente?


¿Se pregunta si es más rápido crear sus propias versiones de las funciones existentes o si es más rápido descargar las funciones que estaba calculando en la CPU?
MichaelHouse

Encontré una publicación en gamedev.net que responde mis preguntas.
Joey Green

2
Veo. Debe publicar una respuesta al respecto aquí, para que otros puedan beneficiarse. Quizás aclarando su pregunta en el proceso.
MichaelHouse

@ joey-green, ¿podrías vincular el gamedev.net aquí? Sería útil para las personas que tropezarán con esta pregunta.
Quazi Irfan

1
Para confundir más las cosas, en mis pruebas la tubería fija puede ser más rápida que los sombreadores, al menos en casos simples; ver sol.gfxile.net/instancing.html
Jari Komppa

Respuestas:


27

Los sombreadores que cree no serán su propia versión de canalización de función fija (FFP), sino una operación personalizada de manipulación de vértices y píxeles para lograr algo interesante y complejo.

Muchas de las cosas que hace a través de una tubería programable (PP) funcionarán más rápido que sus posibles implementaciones de FFP, porque PP reduce la cantidad de pasadas o la cantidad de combinación y magia de mapa de cubos requerida para representar estas cosas hipotéticas en FFP.

Imagine implementar algo tan común como la iluminación por píxel en FFP con solo datos de vértice interpolados y textura de muestra en sus manos. Ni siquiera es posible hacerlo "honestamente", solo piratea para casos especiales dependiendo de mapas de cubos precalculados fieles y algunas mezclas serias. Con PP, se trata de colorear un producto de punto entre la dirección de la luz y el vértice normal.

Con todo, PP convierte lento e imposible en rápido y posible. Pero si decide escribir un sombreador para implementar los mismos algoritmos utilizados en FFP, descubrirá que FFP será un poco más rápido porque está muy optimizado para hardware.


1
Buena respuesta ... +1.
Amir Zadeh

@Green No estoy seguro de eso. Se pierde el punto de alguna manera. La respuesta de Kylotan es mucho más apropiada para la pregunta real.
Chris dice Reinstate Monica el

14

En términos teóricos, la tubería programable es más lenta que la tubería de función fija. Ningún procesador de propósito general puede competir con un procesador de casos especiales. La tubería de función fija original era poco más que un montón de puertas lógicas en una línea que es lo más rápido posible teóricamente.

Sin embargo, en estos días la tubería programable es la norma. Por lo tanto, el hardware está orientado hacia la tubería programable. Habiendo perdido las eficiencias iniciales de tener un circuito creado específicamente para un determinado flujo de datos, debe adaptarse al caso más común, que es el enfoque basado en sombreador. Sin embargo, para las opciones de compatibilidad con versiones anteriores, la canalización de funciones fijas todavía está disponible, pero el costo es que las funciones fijas antiguas deben ser transferidas a sombreadores, lo que puede incurrir en un costo. Esto explicaría la diferencia de rendimiento.


1

La razón principal por la que podría pensar es una fase en la tubería fija, que su programa no lo necesita. por ejemplo, imagina un juego donde todas las luces son estáticas, puedes implementar fácilmente un sombreador que ni siquiera intente calcular la luz dinámica. en este caso, el sombreador funciona más rápido que un sombreador precompilado que verifica algunas ecuaciones para la luz dinámica (un sombreador de uso general). También hay otros ejemplos, puede pensar fácilmente en muchos aspectos que deberían considerarse para una tubería fija, pero puede ignorar la implementación en sus propios códigos GLSL.


1

Eso es exactamente, sus sombreadores están reemplazando partes de la tubería. Pero a menudo sus sombreadores están especializados en un efecto específico que desea lograr y no manejan todas las características especiales posibles que podrían activarse, por lo tanto, son más simples que un sombreador que emula la canalización completa de funciones fijas. Mientras que la ruta de función fija debe tener en cuenta muchas cosas y características de OpenGL que quizás no desee usar (o que ni siquiera haya escuchado).

Y los días en que se realizó la función fija en un hardware especial (opuesto a un hardware totalmente programable) han terminado, lo que probablemente sucede cuando usa la tubería de función fija es que su controlador solo carga sus propios sombreadores especiales que implementan rutas de función fija. Pero estos pueden ser muy complejos, para proporcionar todas y cada una de las características que ofrece la tubería de función fija.


"Lo que probablemente sucede cuando utiliza la canalización de función fija es que su controlador simplemente carga sus propios sombreadores especiales que implementan las rutas de función fija". ..¿Estas seguro acerca de esto? ¿Puede por favor proporcionar algún recurso confiable? Gracias.
Quazi Irfan

@iamcreasy No tengo una fuente confiable (por lo tanto, probablemente), tengo que admitirlo. Pero dudo mucho que las tarjetas gráficas de hoy en día (que son solo un montón de muchos procesadores pequeños) sigan teniendo hardware dedicado para computar iluminación o cálculos de niebla. En su lugar, es más probable que solo carguen programas precompilados para esto en las etapas específicas del sombreador (si provienen del controlador o de algún almacenamiento ROM, no lo sé).
Chris dice Reinstate a Monica el

@iamcreasy según nouveau wiki nouveau.freedesktop.org/wiki/CodeNames , la tubería fija se eliminó en GeForce 6xxx.
DirtY iCE

"Lo que probablemente sucede cuando utiliza la canalización de función fija es que su controlador simplemente carga sus propios sombreadores especiales que implementan las rutas de función fija". Cierto. "Pero estos podrían ser muy complejos, para proporcionar todas y cada una de las características que ofrece la canalización de funciones fijas". Un buen controlador generará sombreadores solo para la funcionalidad que ha habilitado.
Chris
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.