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

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

Языки программирования с неявным параллелизмом включают Аксум, BMDFM, HPF, Идентификатор, LabVIEW, MATLAB M-код, NESL, SaC, СИЗАЛ, ZPL, и pH.[1]

Пример

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

числа = [0 1 2 3 4 5 6 7];результат = грех(числа);

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

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

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

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

Недостатки

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

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

Примечания

  1. ^ Нихил, Ришиюр; Арвинд. Неявное параллельное программирование в pH. ISBN  1-55860-644-0.
  2. ^ Сейф Хариди (14 июня 2006 г.). "Вступление". Учебник Оз. Получено 2007-09-20.