Скачать презентацию MPI for Python Подготовили Игумин А А Поливода Скачать презентацию MPI for Python Подготовили Игумин А А Поливода

Лекция Python_MPI.ppt

  • Количество слайдов: 26

MPI for Python Подготовили: Игумин А. А. Поливода А. С. MPI for Python Подготовили: Игумин А. А. Поливода А. С.

За последние годы, высокопроизводительные вычисления стали доступным ресурсом для многих других исследователей в научном За последние годы, высокопроизводительные вычисления стали доступным ресурсом для многих других исследователей в научном сообществе, чем когда-либо прежде. Соединение качественного программного обеспечения из открытого источника и удобных аппаратных средств, стали предпосылками к широкой популярности кластера класса Беовульф и кластера рабочей станции. Среди множества параллельных вычислительных моделей, передачи сообщений оказалась эффективной. Эта парадигма особенно хорошо подходит для архитектуры с распределенной памятью и используется на сегодняшний день в большинстве требовательных научных и технических приложениях, связанных с моделированием, имитацией, конструкцией и обработкой сигналов. Высокопроизводительные вычисления традиционно связаны с разработкой программного обеспечения и использования скомпилированного языка. Однако, в типичных прикладных программах, лишь небольшой части кода срочно может понадобиться эффективно скомпилированный язык. Остальная часть кода, как правило, связана с управлением памятью, обработкой ошибок, вводом/выводом и взаимодействием с пользователем, и эта часть, как правило, наиболее сильно подвержена ошибкам и состоит из трудоемких частей кода, которые надо писать и отлаживать во время всего процесса разработки. Интерпретируемые языки высокого уровня могут быть эффективны и выгодны для таких задач. Для Python был создан пакет, позволяющий приложениям использовать нескольким процессорам стандарт MPI в самих скриптах (сценариях) Python.

* OOMPI Некоторые пакеты из открытых источников Этот источник не имеет прямого отношения к * OOMPI Некоторые пакеты из открытых источников Этот источник не имеет прямого отношения к Python, но это отличный объектноориентированный подход к реализации MPI Это C++ библиотеки спецификации классов, которые инкапсулируют в MPI функциональную иерархию классов. Это обеспечивает гибкий и интуитивно понятный интерфейс, добавляющий некоторые абстракции, такие как порты и сообщения, при этом упрощая и обогащая синтаксис. * py. MPI перестраивает интерпретатор Python предоставляя при этом встроенный модуль для передачи сообщений. Это позволяет осуществлять интерактивные параллельные запуски, которые полезны для анализа и отладки. Его интерфейс подходит для основных параллельных вычислений. Нет полной поддержки для определения новых коммуникаторов и топологии процесса. Общие объекты Python могут обмениваться сообщениями между процессорами. Нет поддержки числовых массивов. * Scientific Python Предоставляет набор модулей Python, которые полезны для научных вычислений. Осуществляется интерфейс MPI и BSP (массовая синхронная параллельная модель, состоит из процессоров, передающих другу сообщения через коммуникационную сеть) Интерфейс прост в использовании, но не закончен и не похож на специфический интерфейс MPI. Присутствует поддержка числовых массивов.

MPI для Python представляет собой объектноориентированный подход к передаче сообщений, который основан на стандартных MPI для Python представляет собой объектноориентированный подход к передаче сообщений, который основан на стандартных MPI-2 C++ привязках. Интерфейс был разработан с упором на передачу синтаксиса MPI и семантики стандарта MPI-2 в C++ привязках для Python. Любой пользователь, который до этого пользовался стандартными С/С++ привязками, мог использовать эту модель без дополнительного изучения интерфейса.

В стандартной библиотеке Python поддерживаются различные механизмы для сохранения данных. В MPI для Python, В стандартной библиотеке Python поддерживаются различные механизмы для сохранения данных. В MPI для Python, Comm является базовым классом коммуникаторов. Intracomm и Intercomm классы sublcasses класса Comm. Is_inter () метод (и Is_intra (), для удобства, онне является частью спецификации MPI), определен для коммуникатора объектов и может быть использован для определения конкретных коммуникаторов класса. Два предопределенных случаев интракоммуникаторами доступны: COMM_SELF и COMM_WORLD. Из них, новые коммуникаторы могут быть созданы как нужные. Количество процессов в коммуникаторе и вызывающий процесс ранга может быть, соответственно, полученные с методами get_size () и Get_rank (). Соответствующей группы процесса может быть получена из коммуникатор вызове Get_group () метода, который возвращает экземпляр группы класса. Набор операций с группой объектов, таких как, как Union (), Intersect () и разницу () полностью поддерживаются, а также создание новых коммуникаторов от этих групп, используя Create (). Новые экземпляры коммуникатора может быть получен с Clone () метод объектов Comm, Dup () и Split () методы Intracomm и Intercomm объектов и способов Create_intercomm () и Merge () из Intracomm и Intercomm объектов, соответственно. Виртуальные топологии (Cartcomm, Graphcomm, и Distgraphcomm классов, являясь их специализации Intracomm класс) полностью поддерживаются. Новые экземпляры могут быть получены из интракоммуникаторами в случаях использование методов Create_cart () и Create_graph () класса Intracomm.

В контексте MPI-1 спецификации, параллельное приложение является статическим, то есть не процессы могут быть В контексте MPI-1 спецификации, параллельное приложение является статическим, то есть не процессы могут быть добавлены или удалены из запущенного приложения после его начала. К счастью, это ограничение было исправлено в MPI-2. В новой спецификации добавлены модели управления процессами обеспечения основного интерфейса между приложением и внешними ресурсами и процесс менеджеров. Это MPI-2 расширение может быть очень полезно, особенно для последовательных приложений, построенных на верхней части параллельных модулей, или параллельных приложений с помощью модели клиент / сервер. MPI-2 модели процессов предоставляет механизм для создания новых процессов и установки связи между ними и существующих приложений MPI. Она также обеспечивает механизмы для установления связи между двумя существующими MPI приложений, даже когда не начаты другие. В MPI для Python, новые независимые группы процессов могут быть созданы вызовом Spawn () методов в интеркоммуникаторах(то есть, например Intracomm). Этот вызов возвращает новый интеркоммуникатор (то есть, Intercomm например) на группу родительского процесса. Группа дочерний процесс может получить соответствующий интеркоммуникатор с помощью метода Get_parent () (класс), определенный в классе Comm.

На каждой стороне, интеркоммуникатор может быть использован для выполнения точка/точка и коллективной коммуникации между На каждой стороне, интеркоммуникатор может быть использован для выполнения точка/точка и коллективной коммуникации между родителями и дочерней группой процессов. Кроме того, непересекающиеся группы процессов могут установить связь с использованием клиент-серверный подход. Любое серверное приложение должно сначала вызвать Open_port (), чтобы открыть порт и Publish_name () функцию, чтобы опубликовать предоставляемые услуги, и следующий вызов Accept () в экземпляре Intracomm. Любые клиентские приложения могут сначала найти опубликованные службы с помощью вызова Lookup_name (), которая возвращает порт, в котором сервер можно связаться, и следующий вызов Connect () метод в экземпляре Intracomm. Оба Accept () и Connect () методы возвращают экземпляр Intercomm. Когда связь между клиент / сервер процессами больше не нужна, все они должны совместно вызвать Disconnect () метод Class. Comm. Кроме того, сервер приложения должны освободить ресурсы путем вызова Unpublish_name () и Close_port () функции.

Односторонняя связь (также называется Remote Access Memory, RMA) дополняет традиционные двусторонние( отправлять / принимать Односторонняя связь (также называется Remote Access Memory, RMA) дополняет традиционные двусторонние( отправлять / принимать на основе MPI модели общения с односторонними, PUT / GET интерфейса). Односторонние коммуникации, которые могут воспользоваться возможностями узкоспециализированного сетевого оборудования. Кроме того, это расширение снижает задержки программного обеспечения и накладных расходов в приложения, написанных с использованием разделяемой памяти типа парадигмы. Спецификация MPI основана на использовании объектов называемых окнами, они интуитивно определены в ячейках памяти процесса, которые были доступны для удаленных операций чтения и записи. Блоки могут быть доступны через три функции: отправить (удаленный Send), получить (удаленная запись), и сохранить (удаленный обновление или уменьшение) элементов данных. Гораздо большее число функций поддерживает различные функции синхронизации; Семантика этих операций синхронизации являются довольно сложной. В MPI для Python, односторонние операции доступны с помощью экземпляров Win класса. Новые объекты создаются путем вызова Create () методом для всех процессов внутри коммуникатора и указателя памяти буфера. Когда экземпляр больше не нужен, должен быть вызван метод Free (). Три односторонние операции MPI для удаленного запись, чтение и накапливание доступны через вызов метода Put (), Get (), и Accumulateт () соответственно в Win случаях. Эти методы должны иметь целый ранг, определение целевого процесса и целое смещение относительно базового адреса удаленного блока памяти, доступ к односторонней операции чтения, записи и редукции неявно неблокирующий, и должны быть синхронизированы при использовании в двух основных режимах. Активная синхронизация требует вызова процесса Start () и Complete() методов в начале процесса, а цель процесса сотрудничает Post () и Wait () методами. Существует также вариант для коллективного варианта Fence() метода. Пассивная синхронизация является более “снисходительной”, только начало процесса вызывает Lock () и Unlock () методы. Замки предназначены для защиты удаленного доступа, для блокировки удаленного окна и защиты локальной загрузки / сохранения, которые были заблокированы локальными окнами.

Обмен «Точка-точка» является одним из основных возможностей системы передачи сообщений. Этот механизм работает, как Обмен «Точка-точка» является одним из основных возможностей системы передачи сообщений. Этот механизм работает, как передача данных между парами процессов, одна сторона отправляет, другая получает. MPI предоставляет набор отправленных и полученных функций, позволяющих связывать данные с соответствующим тегом.

* В MPI для Python, Send(), Recv() и Sendrecv() обеспечивают поддержку Блокирования обмена точка-точка * В MPI для Python, Send(), Recv() и Sendrecv() обеспечивают поддержку Блокирования обмена точка-точка в пределах Intracomm и Intercomm экземпляров * В MPI для Python, Isend () и Irecv () методы класса Comm начать отправлять и получать операций без блокировки. Эти методы возвращают Request, для идентификации о начале работы. Завершением работы можно управлять с помощью Test(), Wait() и Cancel() методами запроса класса.

В MPI для Python, Send_init() и Recv_init() методы класса Comm, которые создают запрос для В MPI для Python, Send_init() и Recv_init() методы класса Comm, которые создают запрос для отправки и получения операции. Эти методы возвращают экземпляр класса Prequest. С помощью метода Start() начинается обмен данными и его завершением можно управлять описанными ранее методами.

MPI для Python обеспечивает поддержку почти всех коллективных обменов. Alltoallw () и Reduce_scatter () MPI для Python обеспечивает поддержку почти всех коллективных обменов. Alltoallw () и Reduce_scatter () методы в Python не поддерживаются. В MPI для Python, Bcast(), Scatter(), Gather(), Allgather() и Alltoall() , Scatterv(), Gatherv(), Allgatherv() и Alltoallv() - методы поддерживаются. Bcast(), Scatter(), Gather(), Allgather() и Alltoall() могут взаимодействовать с объектами Python. Операции редукции доступны через Reduce(), Allreduce(), Scan() и Exscan() методы.

В MPI для Python, все MPI операций ввода / вывода осуществляются через экземпляр класса В MPI для Python, все MPI операций ввода / вывода осуществляются через экземпляр класса File; Метод Open() позволяет открывать файл и после использования операций вводавывода метод Close() вызывает закрытие файла. Файлы, также могут быть удалены путем вызова метода Delete(). Методы Set_view () и Get_view () – позволяют данным быть видимыми и доступными из отрытых файлов.

Initialization and Exit Модуль функции Init () или Init_thread () и Finalize () обеспечивают Initialization and Exit Модуль функции Init () или Init_thread () и Finalize () обеспечивают MPI инициализации и завершения соответственно. Внимание: MPI_Init () или MPI_Init_thread () – вызывается, когда вы импортируете модуль MPI из пакета mpi 4 py, если MPI еще не инициализирован.

*Номер версии MPI может быть получен из функционального модуля Get_version (). Get_processor_name () функция *Номер версии MPI может быть получен из функционального модуля Get_version (). Get_processor_name () функция может быть использована для доступа к имени процессора. Значения атрибутов, привязанных к COMM_WORLD можно получить с помощью метода Get_attr(). *Функции MPI таймера доступны через Wtime() и Wtick() функции.

Функции обработки ошибок почти полностью поддерживается Питоном. Ошибки, возникающие при вызове MPI, вызывают экземпляр Функции обработки ошибок почти полностью поддерживается Питоном. Ошибки, возникающие при вызове MPI, вызывают экземпляр класса Exception, который является подклассом стандартных исключений Python Runtime. Error. Внимание: При импорте from mpi 4 py. MPI import приведет к конфликту со стандартным базовым классом Exception в Python. В целях активизации коммуникатора обмена с другими модулями, Python взаимодействует с MPI на основе параллельных библиотек Обработчики ошибок ERRORS_RETURN, ERRORS_ARE_FATAL Методы класса {Class}. Set_errhandler() and{Class}. Get_errhandler().

Этот пакет предоставляет Питону привязки для стандарта Message Passing Interface (MPI). Это осуществлено на Этот пакет предоставляет Питону привязки для стандарта Message Passing Interface (MPI). Это осуществлено на основе MPI-1/MPI-2 спецификации и предоставляет API, который основан на стандарте MPI-2 C ++ привязок. Этот пакет поддерживает: Удобную коммуникацию любого объекта Питона: двухточечный (передача/прием), коллективный (передача, разбиение и сбор, восстановление), Быстрая коммуникация объекта Питона, подвергающая буферизации интерфейса Питона, (множества Num. Py, встроенные объекты байтов/последовательности/множества) двухточечный (Блокирующий/неблокирующий, передача/прием), коллективный (передача, блок/вектор, рассеивание/сборка, восстановление), Группы процессов и коммуникационные области Создание новых внутренних/внешних коммуникаторов Декартовы графы & топология графа Параллельный вход/выход: Чтение/запись Блокирующий/неблокирующий & коллективный/неколлективный отдельные/общие указатели файла & явное смещение Управление динамическим процессом порождение & многократное порождение прием/соединение публикация имени & поиск Односторонние операции (PUT, GET, накапливать)

Если у вас есть доступ администратора (либо войдите в систему в качестве администратора при Если у вас есть доступ администратора (либо войдите в систему в качестве администратора при помощи смены учетных записей), и вы хотите установить MPI для Python в вашей системе для всех пользователей, надо сделать следующее: $ python setup. py install В предыдущем шаге пакет mpi 4 py устанавливается в стандартную папку по умолчанию: prefix/lib/python. X. X/site-packages. Если у вас нет привилегий или вы хотите установить MPI для Python для одного (либо для групп) пользователя, у вас есть два варианта в зависимости от целевой версии Python. • Для Python 2. 6 и выше: $ python setup. py install --user • Для Python 2. 5 и ниже (при условии, что ваши корневые директории доступны через переменную окружения HOME): $ python setup. py install --home=$HOME Наконец, добавьте $HOME/lib/python или $HOME/lib 64/python для вашей среды переменных переменную PYTHONPATH.

Выдача в командной строке: $ mpiexec -n 5 python demo/helloworld. py или (в случае Выдача в командной строке: $ mpiexec -n 5 python demo/helloworld. py или (в случае старших MPI-1 реализаций): $ mpirun -np 5 python demo/helloworld. py интерпретатор запустит пять процессов Python и запустить тестовый скрипт demo/helloworld. py. Вы также можете запустить все модульные тесты сценариев: $ mpiexec -n 5 python test/runalltest. py или, если у вас установлена основная тестирующая структура фремворка: $ mpiexec -n 5 nosetests -w test

* SWIG (англ. Simplified Wrapper and Interface Generator) — свободный инструмент для связывания (англ. * SWIG (англ. Simplified Wrapper and Interface Generator) — свободный инструмент для связывания (англ. ) программ и библиотек написанных на C/C++ со скриптовыми языками, такими как Tcl, Perl, Python, Ruby, PHP или другими языками наподобие Java, C#, Scheme или OCaml. Основная цель — достигнуть связи с минимальными усилиями: в файлы заголовка программы добавляется небольшое количество указаний, по которым SWIG генерирует исходный код для склеивания C/C++ и нужного языка.