From de5fba4b2d1a2c2c0ce1b5afdf09b982036c21c9 Mon Sep 17 00:00:00 2001 From: Andrew G Date: Mon, 8 Dec 2025 22:05:01 +0700 Subject: [PATCH] docs: add MIMD era section and references --- main.typ | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ references.bib | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/main.typ b/main.typ index db457a9..6a8e722 100644 --- a/main.typ +++ b/main.typ @@ -211,6 +211,52 @@ Lisp позже повлияли на Python (list comprehensions), JavaScript ( #pagebreak() += Эра массового параллелизма и распределённых систем + +== Переход к архитектуре MIMD + +Сдвиг в сторону MIMD@flynn_very_1966 означал отход от прежних парадигм векторной обработки и одиночных инструкций. Этот переход был обусловлен как технологической осуществимостью, так и признанием того факта, что многие реальные вычислительные задачи требовали гибкости в том, как различные элементы конвейера обработки могли работать независимо друг от друга. + +В этот период начали появляться многоядерные системы, хотя по сравнению с современными реализациями они были еще в зачаточном состоянии. Ранние кластеры собирались из стандартных рабочих станций, объединяемых сетевой инфраструктурой. Оказалось, что не обязательно нужны специализированные монолитные суперкомпьютеры для получения больших вычислительных мощностей. Первые такие кластерные системы заложили основу для современных архитектур центров обработки данных и инфраструктуры облачных вычислений. + +== Языки программирования и параллельные вычисления + +С расширением возможностей аппаратного обеспечения все более актуальной становилась задача выражения параллельных вычислений в языках программирования. Появилось несколько подходов, каждый из которых отражал различные философские представления о том, как программисты должны концептуализировать параллельное выполнение кода. + +=== Occam и модель CSP + +Occam, разработанный в начале 1980-х годов группой учёных из Оксфордского университета, являлся реализацией модели CSP (Communicating Sequential Processes, Теория Взаимодействующих Последовательных Процессов) -- сформулированной Тони Хоаром в нескольких работах@hoare_communicating_1978. + +В Occam процессы считаются фундаментальными единицами, коммуницирующими друг с другом посредством "передачи сообщений", что предоставляет сильную теоретическую основу для рассуждений о параллельном поведении программ. + +Однако CSP, в разрезе параллельного программирования, повлияла не только на Occam, но и заложила концепции, применяемые в параллельном программировании по сей день: такие как синхронная передача сообщений через каналы и отсутствие общих переменных между процессами. Эти идеи активно применяются в современных языках, включая Go (горутины и каналы), Erlang, Limbo и `core.async` в Clojure. + +=== High Performance Fortran (HPF) и его ограничения + +HPF стал попыткой расширения языка программирования Fortran путём добавления директив, позволяющих компиляторам автоматически разделять код для последующего его исполнения на распределённых системах. И хотя в проект были вложены немалые ресурсы, он столкнулся с проблемой чистой компиляторной оптимизации. + +Оказалось, что автоматически распределять векторные операции по несколькуим хостам -- не такая простая задача, что привело к ограниченному использованию HPF, по сравнению с другими, более "ручными" вариантами. + +=== Message Passing Interface (MPI) + +В 1994 году появился стандарт MPI, который вместо попыток автоматической параллелизации или создания нового языка программирования предоставлял стандартизированную библиотеку обмена сообщениями между процессами. Такой подход, в противопоставление HPF, предоставлял разработчикам полный прямой контроль над межпроцессорным взаимодействием, оставляя, однако, сложные механизмы передачи сообщений "за кадром" разработки. Такой подход также упростил переносимость кода между платформами. В общем и целом, всё вышеобозначенное привело к большой популярности и всеобщему признанию MPI. + +=== OpenMP + +OpenMP появился как дополнение к MPI -- в этой библиотеки реализовывался параллелизм через общую память с помощью директив для компилятора, вставляемых в код программы. Такой подход OpenMP снижал сложность внедрения многопоточного выполнения в рамках одной машины. При этом различия между моделью распределённых вычислений MPI и подходом OpenMP позволяло использовать их вместе для ещё большего ускорения вычислений. + +== Философская проблема: что считать "естественной" моделью параллелизма? + +Распространение подходов к параллельному программированию отражало более глубокие, неразрешённые вопросы о фундаментальной природе параллельных вычислений. Исследователи и практики вели -- и продолжают вести -- длительные дискуссии о том, следует ли выражать параллелизм в алгоритме или же стоит полагаться на аппаратно-ориентированные подходы. + +Сторонники алгоритмического подхода утверждают, что параллельные вычисления представляют собой принципиально иную логику, требующую явного выражения в моделях программирования. Полагается, что программист должен понимать и контролировать стратегии декомпозиции, обмен данными и требования к синхронизации. Эта точка зрения проявляется в системах, подобных MPI, где параллелизм выражается явно, в коде. + +Аппаратно-ориентированный подход стремится сделать параллелизм более неявным, перекладывая распараллеливание на "плечи" компилятора и среды исполнения. Эта философия лежала, например, в HPF. Сторонники такого подхода считают, что отделение алгоритмической корректности от производительности параллельного исполнения сделает параллельные вычисления более доступными для широкого круга разработчиков. + +Эти философские различия были не просто академическими спорами, но действительно отражали неопределённость относительно того, как будет развиваться параллельная вычислительная парадигма. Эти вопросы -- об уровнях абстракции, ответственности программиста и взаимосвязи между алгоритмами и архитектурой, -- продолжают находить отклик в современных обсуждениях проектирования параллельных и распределённых систем. + +#pagebreak() + #align( center, pad( @@ -230,6 +276,8 @@ GPU (Graphics Processing Unit) -- графический процессор SIMD (Single Instruction, Multiple Data) -- вычислительный подход, когда одна инструкция исполняется над некоторым массивом данных в один проход +MIMD (Multiple Instruction, Multiple Data) -- вычислительный подход, когда множество инструкций исполняется над множеством потоков данных + #pagebreak() #align( diff --git a/references.bib b/references.bib index 96fc9b0..7c350a8 100644 --- a/references.bib +++ b/references.bib @@ -162,6 +162,22 @@ pages = {491--542}, } +@inproceedings{mowry_design_1992, + address = {Boston Massachusetts USA}, + title = {Design and evaluation of a compiler algorithm for prefetching}, + isbn = {9780897915342}, + url = {https://dl.acm.org/doi/10.1145/143365.143488}, + doi = {10.1145/143365.143488}, + language = {en}, + urldate = {2025-12-08}, + booktitle = {Proceedings of the fifth international conference on {Architectural} support for programming languages and operating systems}, + publisher = {ACM}, + author = {Mowry, Todd C. and Lam, Monica S. and Gupta, Anoop}, + month = sep, + year = {1992}, + pages = {62--73}, +} + @misc{morgan_compiling_2018, title = {Compiling {History} {To} {Understand} {The} {Future}}, url = {https://www.nextplatform.com/2018/11/02/compiling-history-to-understand-the-future/}, @@ -179,3 +195,20 @@ url = {https://support.hpe.com/hpesc/public/docDisplay?docId=a00113909en_us&page=Vectorization_Directives.html&docLocale=en_US}, urldate = {2025-12-08}, } + +@article{hoare_communicating_1978, + title = {Communicating sequential processes}, + volume = {21}, + issn = {0001-0782, 1557-7317}, + url = {https://dl.acm.org/doi/10.1145/359576.359585}, + doi = {10.1145/359576.359585}, + abstract = {This paper suggests that input and output are basic primitives of programming and that parallel composition of communicating sequential processes is a fundamental program structuring method. When combined with a development of Dijkstra's guarded command, these concepts are surprisingly versatile. Their use is illustrated by sample solutions of a variety of a familiar programming exercises.}, + language = {en}, + number = {8}, + urldate = {2025-12-08}, + journal = {Communications of the ACM}, + author = {Hoare, C. A. R.}, + month = aug, + year = {1978}, + pages = {666--677}, +}