En teoría de compiladores , la prueba de Banerjee es una prueba de dependencia . Esta prueba presupone que todos los índices de los bucles son independientes; sin embargo, en la práctica, esto suele ser falso. La prueba de Banerjee es conservadora, es decir, no romperá una dependencia inexistente.
Esto significa que lo único que la prueba puede garantizar es la ausencia de dependencia.
Forma general
Para un bucle de la forma:
for ( i = 0 ; i < n ; i ++ ) { c [ f ( i )] = a [ i ] + b [ i ]; /* instrucción s1 */ d [ i ] = c [ g ( i )] + e [ i ]; /* instrucción s2 */ }Existe una verdadera dependencia entre la afirmación s1 y la afirmación s2 si y solo si :
Existe una antidependencia entre la afirmación s1 y la afirmación s2 si y solo si :
Para un bucle de la forma:
for ( i = 0 ; i < n ; i ++ ) { c [ i ] = a [ g ( i )] + b [ i ]; /* instrucción s1 */ a [ f ( i )] = d [ i ] + e [ i ]; /* instrucción s2 */ }Existe una verdadera dependencia entre la afirmación s1 y la afirmación s2 si y solo si :
Ejemplo
A continuación se muestra un ejemplo de la prueba de Banerjee.
El bucle que se va a comprobar para detectar dependencias es:
for ( i = 0 ; i < 10 ; i ++ ) { c [ i + 9 ] = a [ i ] + b [ i ]; /*instrucción s1*/ d [ i ] = c [ i ] + e [ i ]; /*instrucción s2*/ }Dejar
Por lo tanto,
y
Pruebas de antidependencia
Entonces
lo cual da
Ahora, los límites enson
Claramente, -9 no está dentro de los límites, por lo que la antidependencia se rompe.
Pruebas de dependencia verdadera
Lo que da como resultado:
Ahora, los límites enson
Claramente, -9 está dentro de los límites, por lo que la dependencia verdadera no se rompe.
Conclusión
Dado que la antidependencia se rompió, podemos afirmar que no existe antidependencia entre las afirmaciones.
Dado que la dependencia real no se rompió, no sabemos si existe una dependencia real entre las afirmaciones.
Por lo tanto, el bucle se puede paralelizar, pero las instrucciones deben ejecutarse en el orden de su (potencial) dependencia real.
Véase también
Referencias
- Randy Allen y Ken Kennedy. Optimización de compiladores para arquitecturas modernas: un enfoque basado en dependencias.
- Lastovetsky, Alex. Computación paralela en redes heterogéneas.
- Compiladores