|
Промежуточная между MPI и OpenMP технология параллельного программирования.Наиболее распространенными на сегодня базовыми технологиями параллельного программирования являются технологии MPI и OpenMP. Технология MPI менее требовательна к аппаратуре связи между процессорами, на которой она может быть эффективно реализована, но гораздо более требовательна к программисту, труднее в применении, нежели технология OpenMP. Аппаратура, на базе которой возможна эффективная реализация OpenMP (SMP-серверы), стоит дорого и плохо масштабируется. Аппаратура, пригодная для реализации MPI (специализированные сети вычислительных кластеров), гораздо дешевле, и масштабируется практически неограниченно, но обладает гораздо более низкой эффективностью. В последние годы специализированные сети вычислительных кластеров довольно быстро совершенствуются, оставаясь сравнительно дешевыми и хорошо масштабируемыми. Разрыв в показателях эффективности и качества межпроцессорного взаимодействия между SMP-серверами и специализированными сетями все еще велик, но он стал гораздо меньше, чем был несколько лет назад, за счет совершенствования специализированных сетей. Нынешние специализированные сети могут многое из того, чего сети не могли еще 5-10 лет назад. В связи с этим, актуальным представляется вопрос о промежуточной технологии программирования, которая могла бы дать программисту возможность почувствовать эти улучшения, не дожидаясь момента, когда разрыв между двумя классами аппаратуры закроется полностью. Такая технология была разработана более 10 лет назад фирмой Cray, и первоначально на компьютерах других фирм почти не применялась. Сегодня тот уровень качества и эффективности коммуникационного оборудования, который когда-то был доступен лишь фирме Cray и ей подобным, уверенно достигнут и даже перекрыт в категории кластерных вычислительных систем. Настало время распространить наработки Cray по промежуточной технологии параллельного программирования, успешно прошедшие многолетнюю проверку практикой, на суперкомпьютеры кластерного типа. Технология называется shmem (от shared memory – разделяемая память), и представляет собой, как и MPI, библиотеку функций (подпрограмм). От MPI эта технология унаследовала статическое (во время запуска программы) порождение процессов, а также явное различие между «своей» и «чужой» для данного процесса памятью. От OpenMP – наличие разделяемого, так или иначе доступного всем процессам пространства памяти, и барьерную синхронизацию как основной режим синхронизации процессов. Пространство памяти в shmem устроено следующим образом. Если в программе объявлен массив А, то этот массив у каждого процесса будет свой (как в MPI). Однако, каждый процесс может осуществить прямой доступ к массиву А любого другого процесса, обращаясь к функциям «положить» (put()) или «взять» (get()). В отличие от MPI, при доступе к «чужим» данным «ответной любезности» от «хозяина» данных не требуется. Прямой доступ к «чужим» данным не подразумевает, в отличие от обмена сообщениями в MPI, принудительной синхронизации при каждом акте передачи данных от процесса к процессу. Поэтому в shmem, в отличие от MPI (и подобно OpenMP), необходимую по смыслу программы синхронизацию приходится организовывать отдельно от обменов данными. Для этого применяются барьеры. В MPI барьерная синхронизация предусмотрена, но имеет вспомогательный характер, применяется далеко не во всех программах. В shmem же, подобно OpenMP, этот способ синхронизации является основным. Важной отличительной чертой shmem является высокая эффективность обмена короткими сообщениями (особенно при записи). В некоторых видах приложений, таких, например, как расчеты на неструктурированных сетках, процессы обмениваются данными, которые расположены в памяти не крупными сплошными кусками, а многочисленными мелкими порциями, разбросанными по памяти сложным образом. При использовании MPI в этих случаях приходится из соображений эффективности прибегать к запаковке данных в крупные пакеты при отправке и распаковке при приеме. При использовании shmem в этом нет нужды: мелкие порции данных (вплоть до отдельных чисел) можно отправлять отдельными операциями «put()» сразу в необходимое место. Эффективность от этого практически не страдает, а программа, как правило, заметно упрощается. Библиотека shmem может быть использована тремя следующими способами:
Примечания: ¹ На сегодня такая реализация есть — SKIF-MPI См. также |
|
||||||||||||||||||||||||||||||||
Тел. +7(499)220-79-72; E-mail: inform@kiam.ru |