Параллельные вычисления с общей памятью
Параллельные вычисления с общей памятью (shared memory): модель (образец) параллельных вычислений, в которой вся рабочая (оперативная) память или её существенная часть доступна всем исполняющим устройствам (процессорам и др.).
С точки зрения классификации Флинна модель определяется как МКОД.
Некоторые образцы оборудования, непосредственно разрешающего работу в этой модели: машины с многоядерными процессорами, SMP, графические адаптеры NVIDIA и ATI, имеющие соответствующие программные инструментальные средства.
Некоторые примеры программных средств, позволяющих работать в этой модели: POSIX threads и вообще любые многонитевые среды исполнения, инструментальные средства, открывающие возможности параллельного счёта на графическом оборудовании NVIDIA и ATI — CUDA, ATI Streams.
В этой типе параллельных вычислений взаимодействие задач (передача данных) обеспечивается неявно, поэтому основное внимание при программировании обращается на осуществление со-исполнения (параллельности) и на синхронизацию, а также на методы снижения связанных с этим затрат.
Парадигмы программирования с общей памятью могут различаться в своих способах совместного пользования данными, моделях параллельности, поддержки синхронизации.
Модели на основе процессов предполагают, что все данные, связанные с процессом, скрыты от прочих процессов, если явно не указано иное (например, использование системных функций UNIX shmget и shmat). Это ограничение важно в многопользовательских системах для обеспечения защиты, но не является обязательным при совместной работе множественных параллельных процессов над одной проблемой. Затраты, связанные с обеспечением защиты, делают процессы менее пригодными для параллельного программирования в этой парадигме.
Напротив, лёгкие процессы (lightweight process) и нити (треды) предполагают, что вся память глобальна. Ослабляя защиту, такие реализации потоков команд разрешают более быструю обработку, и поэтому являются предпочтительной моделью в этой парадигме.
Модели параллельного программирования на основе директив расширяют модель с общей памятью, осуществляемую на основе нитей, средствами помогающими при создании и синхронизации тредов.
— Ю.Т.
Источники
- Введение в параллельное программирование...