Неявный параллелизм - Implicit parallelism

В информатике , неявный параллелизм является характеристикой языка программирования , который позволяет в компилятор или интерпретатор автоматически эксплуатирует параллелизм , присущие вычисления , выраженных некоторыми конструирует язык. Чистый неявно параллельный язык не требует специальных директив, операторов или функций для обеспечения параллельного выполнения, в отличие от явного параллелизма .

Языки программирования с неявным параллелизмом включают Axum , BMDFM , HPF , Id , LabVIEW , MATLAB M-code , NESL , SaC , SISAL , ZPL и pH.

пример

Если конкретная проблема включает выполнение одной и той же операции над группой чисел (например, взятие синуса или логарифма каждого по очереди), язык, обеспечивающий неявный параллелизм, может позволить программисту написать инструкцию следующим образом:

numbers = [0 1 2 3 4 5 6 7];
result = sin(numbers);

Компилятор или интерпретатор может вычислить синус каждого элемента независимо, распределяя усилия между несколькими процессорами, если они доступны.

Преимущества

Программисту, который пишет неявно параллельный код, не нужно беспокоиться о разделении задач или взаимодействии процессов, вместо этого сосредотачиваясь на проблеме, для решения которой предназначена его программа. Неявный параллелизм обычно облегчает разработку параллельных программ и, следовательно, приводит к существенному повышению производительности программистов.

Многие конструкции, необходимые для поддержки этого, также добавляют простоты или ясности даже в отсутствие реального параллелизма. Приведенный выше пример понимания списка в функции sin () сам по себе является полезной функцией. Используя неявный параллелизм, языки фактически должны предоставлять пользователям такие полезные конструкции просто для поддержки необходимой функциональности (например, язык без приличного цикла for () - это один из немногих программистов).

Недостатки

Языки с неявным параллелизмом снижают контроль программиста над параллельным выполнением программы, что иногда приводит к неоптимальной эффективности параллелизма . Создатели языка программирования Oz также отмечают, что их ранние эксперименты с неявным параллелизмом показали, что неявный параллелизм затрудняет отладку, а объектные модели - излишне неудобной.

Более серьезная проблема заключается в том, что каждая программа имеет некоторую параллельную и некоторую последовательную логику. Для двоичного ввода-вывода, например, требуется поддержка таких последовательных операций, как Write () и Seek (). Если требуется неявный параллелизм, это создает новые требования к конструкциям и ключевым словам для поддержки кода, который нельзя распределять или распределять.

Ноты