Paralelismo implícito
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.
Ejemplo
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 esta manera:
numbers = [0 1 2 3 4 5 6 7];
result = sin(numbers);
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.
Ventajas
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 agregan simplicidad o claridad incluso en ausencia de un paralelismo real. El ejemplo anterior, de comprensión de listas en la función sin()
, 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).
Desventajas
Los lenguajes con paralelismo implícito reducen el control que el programador tiene sobre la ejecución paralela del programa, lo que a veces resulta en 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.
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 de que las construcciones y las palabras clave admitan código que no se puede enhebrar ni distribuir.