¿Qué es la dependencia de datos y por qué es importante?

La dependencia de datos es un tema clave en la computación paralela.

Considere [math] x = \ frac {(a + b)} {c} [/ math] bajo las reglas de precedencia: debe hacer la suma antes de la división, y todo es serial, es decir, no hay oportunidad para el paralelismo.

Sin embargo, [math] x = \ frac {(a + b)} {(c + d)} [/ math] puede ser algo paralelo en el sentido de que, en principio, puede realizar ambas adiciones al mismo tiempo desde las variables de datos [math] a, b, c, d [/ math] son ​​independientes (no dependen entre sí) antes de realizar la división para obtener el resultado. Sin embargo, la división tiene que esperar a que se completen ambas adiciones, ya que depende de los datos de los resultados de esas adiciones.

El análisis de algoritmos y software para la dependencia de datos es una técnica clave para descubrir oportunidades para la computación paralela.

¿Por qué te preocupas? La Ley de Moore nos ha dado una vergüenza de riquezas en el área de chips de silicio (podemos meter cada vez más circuitos en un área determinada de silicio), y el efecto principal durante la última década o tres ha sido cada vez más elementos de cómputo en varias partes de una computadora sistema:

  • Unidades lógicas aritméticas múltiples (ALU, p. ej. sumadores, sustractores, multiplicadores, divisores, desplazadores de bits) en los procesadores, incluso hasta el punto de hacer que Hyper-threading (falsifique efectivamente dos CPU encima de una para tratar de mantener todas las ALU ocupadas) efectivas.
  • Instrucción única, motores de cómputo de datos múltiples (SIMD) en todas las CPU modernas (por ejemplo, AltiVec, MMX, SSE (n), AVX) para calcular una operación dada sobre una matriz completa o matriz de datos en una sola instrucción.
  • múltiples “núcleos” de procesador por paquete de chips de silicio (Procesador de múltiples núcleos)
  • muchos ( miles de) elementos de procesamiento en paralelo en unidades de procesamiento de gráficos (GPU) porque Computer Graphics también es un espacio de problema SIMD, pero se han vuelto tan poderosos que ahora también estamos haciendo cálculos de GPU de uso general con ellos.

y así.

Sin embargo, todos esos pequeños elementos de computación no sirven de nada a menos que sea posible eliminar las dependencias de datos y el paralelismo en los problemas de computación (programas) para poner tantos de ellos a trabajar simultáneamente como sea posible para un determinado algoritmo y conjunto de datos.

Entonces, al más alto nivel, el análisis de dependencia de datos es una herramienta para el rendimiento del software.