Введение

Внутренний параллелизм в выраженных вычислениях

В информатике, неявный параллелизм — это характеристика языка программирования, позволяющая компилятору или интерпретатору автоматически использовать параллелизм, присущий вычислениям, выраженным некоторыми конструкциями языка. Язык с чистым неявным параллелизмом не требует специальных директив, операторов или функций для включения параллельного выполнения, в отличие от явного параллелизма. К языкам программирования с неявным параллелизмом относятся Axum, BMDFM, HPF, Id, LabVIEW, MATLAB M code, NESL, SaC, SISAL, ZPL и pH.

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

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

Недостатки

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