En informática , el paralelismo implícito es una característica de un lenguaje de programación que permite a un compilador o intérprete explotar automáticamente el paralelismo inherente a los cálculos expresados por algunas de las construcciones del lenguaje. Un lenguaje implícitamente paralelo puro no necesita directivas, operadores o funciones especiales para permitir la ejecución en paralelo, a diferencia del paralelismo explícito .
Los lenguajes de programación con paralelismo implícito incluyen Axum , BMDFM , HPF , Id , LabVIEW , MATLAB M-code , NESL , SaC , SISAL , ZPL y pH. [1]
Si un problema particular implica realizar la misma operación en un grupo de números (como tomar el seno o el logaritmo de cada uno por turno), un lenguaje que proporcione paralelismo implícito podría permitir al programador escribir la instrucción de esta manera:
números = [ 0 1 2 3 4 5 6 7 ]; resultado = sin ( números );
El compilador o intérprete puede calcular el seno de cada elemento independientemente, distribuyendo el esfuerzo entre múltiples procesadores si están disponibles.
Un programador que escribe código implícitamente paralelo no necesita preocuparse por la división de tareas o la comunicación entre procesos, ya que se centra en el problema que su programa pretende resolver. El paralelismo implícito generalmente facilita el diseño de programas paralelos y, por lo tanto, produce una mejora sustancial de la productividad del programador.
Muchas de las construcciones necesarias para respaldar esto también agregan simplicidad o claridad incluso en ausencia de paralelismo real. El ejemplo anterior, de comprensión de listas en la sin()
función, es una característica útil en sí misma. Al usar paralelismo implícito, los lenguajes efectivamente tienen que proporcionar tales construcciones útiles a los usuarios simplemente para respaldar la funcionalidad requerida (un lenguaje sin un bucle for decente , por ejemplo, es uno que pocos programadores usarán).
Los lenguajes con paralelismo implícito reducen el control que tiene el programador sobre la ejecución paralela del programa, lo que a veces da como resultado una eficiencia paralela que no es la óptima . Los creadores del lenguaje de programación Oz también señalan que sus primeros experimentos con paralelismo implícito demostraron que este hacía que la depuración fuera difícil y que los modelos de objetos fueran innecesariamente complicados. [2]
Un problema más importante es que cada programa tiene cierta lógica paralela y otra en serie. La E/S binaria, por ejemplo, requiere compatibilidad con operaciones en serie como Write()
y Seek()
. Si se desea un paralelismo implícito, esto crea un nuevo requisito para que las construcciones y las palabras clave admitan código que no se pueda enhebrar ni distribuir.