2010-04-11 18 views
13

¿Hay un número máximo de instrucciones de lenguaje ensamblador para cargar en la unidad de programa fragmento? Tengo un algoritmo en el puerto de cpu a gpu y aparentemente no cabe en el gpu.Número máximo de instrucciones GLSL

+1

No sé nada de shaders, pero supongo que no tienen espacio de almacenamiento infinito. –

Respuesta

2

Hay un límite en la cantidad máxima de instrucciones que un sombreador puede tener. Hasta donde yo sé, varía de GPU a GPU. Si su sombreador es demasiado grande, la compilación generará un error.

34

Existen varios límites duros y blandos, algunos de los cuales no son inmediatamente evidentes:

  • ranuras Instrucción: El número total de instrucciones que el hardware puede acomodar en la memoria local.
  • instrucciones ejecutadas: El número máximo de instrucciones que se ejecutarán (incluyendo las instrucciones que se ejecutan varias veces en un bucle)
  • Una sola instrucción GLSL puede asignar a una docena o más instrucciones
  • Varios instrucciones GLSL puede asignar a una instrucciones únicas dependiendo de la calidad del optimizador (por ejemplo, multiplicar-agregar, punto, lerp)
  • Los registros de temperatura limitada (solo 32) pueden requerir más instrucciones de las necesarias en el hardware pre-SM4 (ningún problema con 4096).
  • Swizzling por lo general no cuesta instrucciones adicionales en la actualidad, pero hace en algún hardware antiguo, y puede en algunas situaciones en algún hardware (esp. Gl_FragColor es tal candidato)
  • Independientemente de instrucciones reales, OpenGL 2.0 hardware compatible se limita a 8 recuperaciones dependientes de textura (ilimitados en hardware que puede hacer OpenGL 2.1 o mejor)

tienes que estos mínimos garantizados (la mayoría de las tarjetas tienen más):

  • 512 ranuras de instrucciones para vertex y pixel shaders de OpenGL 2.x (SM3) hardware capaz
    • 65536 instrucciones ejecutadas
  • 4096 vertex y pixel 65536 ranuras de instrucciones de sombreado en 3.x (SM4) de hardware
    • 65536 instrucciones ejecutadas vertex shader, instrucciones de sombreado de píxeles ilimitada
  • Al menos 24 sucursales dinámica es posible 2.x (SM3) de hardware
  • ramificación completamente dinámico (sin límites) en el hardware SM4
  • moverse solamente condicional disponibles en SM2.x, todo lo demás debe ser acomodadas por la duplicación de código y desenrollado del bucle, o debe fallar
+8

Esta es una gran respuesta, sin embargo sería mejor con algunas referencias. – Kaganar

Cuestiones relacionadas