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 puro implícitamente paralelo no necesita directivas, operadores o funciones especiales para permitir la ejecución paralela, 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 logaritmo de cada uno por turno), un lenguaje que proporcione paralelismo implícito podría permitir al programador escribir la instrucción de la siguiente manera:
números = [ 0 1 2 3 4 5 6 7 ]; resultado = pecado ( números );
El compilador o intérprete puede calcular el seno de cada elemento de forma independiente, distribuyendo el esfuerzo entre varios 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 de procesos, sino 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 resulta en una mejora sustancial de la productividad del programador.
Muchas de las construcciones necesarias para respaldar esto también añaden simplicidad o claridad incluso en ausencia de un paralelismo real. El ejemplo anterior, de comprensión de listas en la sin()
función, es una característica útil en sí misma. Al utilizar el paralelismo implícito, los lenguajes efectivamente tienen que proporcionar construcciones útiles a los usuarios simplemente para soportar 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 el programador tiene sobre la ejecución paralela del programa, lo que a veces da como resultado una eficiencia paralela no óptima . Los creadores del lenguaje de programación Oz también señalan que sus primeros experimentos con paralelismo implícito demostraron que el paralelismo implícito dificultaba la depuración y hacía que los modelos de objetos fueran innecesariamente incómodos. [2]
Un problema mayor es que cada programa tiene alguna lógica paralela y serial. La E/S binaria, por ejemplo, requiere soporte para 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 puede enhebrar ni distribuir.