Сообщения
Сообщение содержит пересылаемые данные и служебную информацию. Для того, чтобы передать сообщение, необходимо указать: · ранг процесса-отправителя сообщения; · адрес, по которому размещаются пересылаемые данные процесса-отправителя; · тип пересылаемых данных; · количество данных; · ранг процесса, который должен получить сообщение; · адрес, по которому должны быть размещены данные процессом-получателем. · тег сообщения; · идентификатор коммуникатора, описывающего область взаимодействия, внутри которой происходит обмен. Тег - это задаваемое пользователем целое число от 0 до 32767, которое играет роль идентификатора сообщения и позволяет различать сообщения, приходящие от одного процесса. Теги могут использоваться и для соблюдения определенного порядка приема сообщений. Прием сообщения начинается с подготовки буфера достаточного размера. В этот буфер записываются принимаемые данные. Операция отправки или приема сообщения считается завершенной, если программа может вновь использовать буферы сообщений. Основные понятия MPI Коммуникатор представляет собой структуру, содержащую либо все процессы, исполняющиеся в рамках данного приложения, либо их подмножество. Процессы, принадлежащие одному и тому же коммуникатору, наделяются общим контекстом обмена. Операции обмена возможны только между процессами, связанными с общим контекстом, то есть, принадлежащие одному и тому же коммуникатору (рис. 3.1). Каждому коммуникатору присваивается идентификатор. В MPI есть несколько стандартных коммуникаторов: · MPI_COMM_WORLD - включает все процессы параллельной программы; · MPI_COMM_SELF - включает только данный процесс; · MPI_COMM_NULL - пустой коммуникатор, не содержит ни одного процесса. В MPI имеются процедуры, позволяющие создавать новые коммуникаторы, содержащие подмножества процессов. Ранг процесса представляет собой уникальный числовой идентификатор, назначаемый процессу в том или ином коммуникаторе. Ранги в разных коммуникаторах назначаются независимо и имеют целое значение от 0 до число_процессов - 1 (рис. 3.2). Тег (маркер) сообщения - это уникальный числовой идентификатор, который назначается сообщению и позволяет различать сообщения, если в этом есть необходимость. Если тег не требуется, вместо него можно использовать "джокер" MPI_ANY_TAG.
|