Параллелизм в вычислениях: языки программирования, автоматически использующие возможности распараллеливания. Повышение производительности и удобство разработки.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Внутренний параллелизм в выраженных вычислениях
Inherent parallelism in expressed computation
В информатике, неявный параллелизм — это характеристика языка программирования, позволяющая компилятору или интерпретатору автоматически использовать параллелизм, присущий вычислениям, выраженным некоторыми конструкциями языка. Язык с чистым неявным параллелизмом не требует специальных директив, операторов или функций для включения параллельного выполнения, в отличие от явного параллелизма. К языкам программирования с неявным параллелизмом относятся Axum, BMDFM, HPF, Id, LabVIEW, MATLAB M code, NESL, SaC, SISAL, ZPL и pH.
In computer science, implicit parallelism is a characteristic of a programming language that allows a compiler or interpreter to automatically exploit the parallelism inherent to the computations expressed by some of the language's constructs. A pure implicitly parallel language does not need special directives, operators or functions to enable parallel execution, as opposed to explicit parallelism. Programming languages with implicit parallelism include Axum, BMDFM, HPF, Id, LabVIEW, MATLAB M code, NESL, SaC, SISAL, ZPL, and pH.
Преимущества
Программисту, пишущему неявно-параллельный код, не нужно заботиться о разделении задач или организации взаимодействия между процессами, а вместо этого он может сосредоточиться на проблеме, которую должна решать его программа. Неявный параллелизм обычно упрощает разработку параллельных программ и, следовательно, значительно повышает производительность программиста. Многие конструкции, необходимые для его поддержки, также добавляют простоту или ясность даже при отсутствии реального параллелизма. Приведенный выше пример включения списка в функцию sin сам по себе является полезной функцией. Используя неявный параллелизм, языки программирования фактически должны предоставлять пользователям такие полезные конструкции просто для обеспечения необходимой функциональности (например, язык без удобного цикла for вряд ли будет использоваться большинством программистов).
A programmer that writes implicitly parallel code does not need to worry about task division or process communication, focusing instead on the problem that his or her program is intended to solve. Implicit parallelism generally facilitates the design of parallel programs and therefore results in a substantial improvement of programmer productivity. Many of the constructs necessary to support this also add simplicity or clarity even in the absence of actual parallelism. The example above, of list comprehension in the sin function, is a useful feature in of itself. By using implicit parallelism, languages effectively have to provide such useful constructs to users simply to support required functionality (a language without a decent for loop, for example, is one few programmers will use).
Недостатки
Языки с неявным параллелизмом снижают степень контроля программиста над параллельным выполнением программы, что иногда приводит к неоптимальной параллельной эффективности. Разработчики языка программирования Oz также отмечают, что их первые эксперименты с неявным параллелизмом показали, что он затрудняет отладку и делает объектные модели излишне сложными. Более серьезная проблема заключается в том, что каждая программа содержит как параллельную, так и последовательную логику. Например, бинарный ввод-вывод требует поддержки таких последовательных операций, как запись и позиционирование. Если требуется неявный параллелизм, это создает новую потребность в конструкциях и ключевых словах для поддержки кода, который нельзя распараллелить или распределить.
Languages with implicit parallelism reduce the control that the programmer has over the parallel execution of the program, resulting sometimes in less than optimal parallel efficiency. The makers of the Oz programming language also note that their early experiments with implicit parallelism showed that implicit parallelism made debugging difficult and object models unnecessarily awkward. A larger issue is that every program has some parallel and some serial logic. Binary I/O, for example, requires support for such serial operations as Write and Seek If implicit parallelism is desired, this creates a new requirement for constructs and keywords to support code that cannot be threaded or distributed.