LIBDVM~1 (1158353), страница 2

Файл №1158353 LIBDVM~1 (Раздаточные материалы) 2 страницаLIBDVM~1 (1158353) страница 22019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Каждый процессор имеет также внешний номер. ProcNumberext (номер процессора в аппаратурно-программной среде, в которой функционирует система поддержки). Внешний номер опрашивается системой поддержки при ее инициализации с помощью средозависимых средств.

При межпроцессорных обменах в качестве адреса процессора используется его идентификатор ProcIdent. Соответствие

ProcNumberint ≥ ProcIdent

возвращается системе поддержки системой передачи сообщений (Message Passing System) при ее инициализации. Среди процессоров выделенного задаче решающего поля функционально выделены три: главный процессор, процессор ввода/вывода и центральный процессор.

Главный процессор - это первый процессор, на котором была инициализирована параллельная программа (выполняющаяся на нем подзадача рассматривается как исходный инициализатор всех остальных подзадач). Главный процессор имеет нулевой внутренний номер.

Процессор ввода/вывода предназначен для непосредственного общения с файловой системой и стандартно имеет нулевой внутренний номер.

Центральный процессор осуществляет вычисление редукционных функций и стандартно определяется индексным вектором ([PSSize1/2], ... , [PSSizen/2]).

Возможно задание внутренних номеров центрального процессора и процессора ввода/вывода как параметров запуска (нестандартные внутренние номера).

int rtl_GetCurrentProc(void);

Функция возвращает внутренний номер текущего процессора.

int rtl_GetMasterProc(void);

Функция возвращает внутренний номер главного процессора.

int rtl_GetIOProc(void);

Функция возвращает внутренний номер процессора ввода/вывода.

int rtl_GetCentralProc(void);

Функция возвращает внутренний номер центрального процессора.

5.СРЕДСТВА ПЕРЕДАЧИ СООБЩЕНИЙ, НЕЗАВИСИМЫЕ ОТ БАЗОВОЙ СИСТЕМЫ ПЕРЕДАЧИ СООБЩЕНИЙ

Совокупность представленных ниже функций является интерфейсным "срезом" между собственно системой поддержки и используемой ею системой передачи сообщений (MPI, PVM и т.д.) и выходит за рамки средств, предоставляемых системой поддержки программе пользователя. Тем не менее, минимальный средонезависимый набор функций передачи сообщений может оказаться полезным для тестовых и экспериментирующих со средой программ, сопровождающих систему поддержки.

В качестве адреса процессора в рассматриваемых ниже функциях используется внутренний номер процессора, который при непосредственном обращении к функциям системы передачи сообщений заменяется на идентификатор процессора (см.п.4). Логика основных схем передачи сообщений (синхронная, асинхронная и схема "NO WAIT") предполагается известной.

5.1.Синхронный обмен сообщениями

      1. Синхронная передача

int rtl_Send(void *MesPtr, int Count, int Size, int ProcNum);

MesPtr

- указатель на передаваемое сообщение.

Count

- число элементов, содержащихся в передаваемом сообщении.

Size

- длина в байтах одного элемента передаваемого сообщения.

ProcNum

- внутренний номер процессора, которому посылается сообщение.

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

      1. Синхронный прием

int rtl_Recv(void *MesPtr, int Count, int Size, int ProcNum);

MesPtr

- указатель области памяти, в которую необходимо принять сообщение.

Count

- число элементов, содержащихся в принимаемом сообщении.

Size

- длина в байтах одного элемента принимаемого сообщения.

ProcNum

- внутренний номер процессора, сообщение от которого требуется принять.

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

5.2.Асинхронный обмен сообщениями

      1. Асинхронная передача

int rtl_SendA(void *MesPtr, int Count, int Size, int ProcNum, int Tag);

MesPtr

- указатель на передаваемое сообщение.

Count

- число элементов, содержащихся в передаваемом сообщении.

Size

- длина в байтах одного элемента передаваемого сообщения.

ProcNum

- внутренний номер процессора, которому посылается сообщение.

Tag

- номер класса передаваемого сообщения (классификация сообщений в компетенции пользователя системы передачи сообщений).

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

      1. Асинхронный прием

int rtl_RecvA(void *MesPtr, int Count, int Size, int ProcNum, int Tag);

MesPtr

- указатель области памяти, в которую необходимо принять сообщение.

Count

- число элементов, содержащихся в принимаемом сообщении.

Size

- длина в байтах одного элемента принимаемого сообщения.

ProcNum

- внутренний номер процессора, сообщение от которого требуется принять.

Tag

- номер класса передаваемого сообщения.

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

5.3.Обмен сообщениями в режиме "NO WAIT"

      1. Передача в режиме "NO WAIT"

int rtl_Sendnowait(

void* MesPtr, int Count, int Size, int ProcNum,
int Tag , RTL_Request *ReqPtr);

MesPtr

- указатель на передаваемое сообщение.

Count

- число элементов, содержащихся в передаваемом сообщении.

Size

- длина в байтах одного элемента передаваемого сообщения.

ProcNum

- внутренний номер процессора, которому посылается сообщение.

Tag

- номер класса передаваемого сообщения (классификация сообщений в компетенции пользователя системы передачи сообщений).

*ReqPtr

- структура-признак, который устанавливается в состояние "заявка выполнена", когда сообщение будет доставлено адресату.

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

      1. Прием в режиме "NO WAIT"

int rtl_Recvnowait(

void* MesPtr, int Count, int Size, int ProcNum,
int Tag , RTL_Request *ReqPtr);

MesPtr

- указатель области памяти, в которую необходимо принять сообщение.

Count

- число элементов, содержащихся в принимаемом сообщении.

Size

- длина в байтах одного элемента принимаемого сообщения.

ProcNum

- внутренний номер процессора, сообщение от которого требуется принять.

Tag

- номер класса передаваемого сообщения.

*ReqPtr

- структура-признак, который устанавливается в состояние "заявка выполнена", когда сообщение поступит по адресу MesPtr.

Возвращается неотрицательное значение при успешном выполнении функции и отрицательное - в противном случае.

      1. Ожидание завершения передачи или приема

void rtl_Waitrequest(RTL_Request *ReqPtr);

ProcNum

- внутренний номер процессора, которому было послано сообщение или от которого ожидается сообщение.

*ReqPtr

- структура-признак, от которого ожидается состояние "заявка выполнена".

      1. Опрос завершения передачи или приема

int rtl_Testrequest(RTL_Request *ReqPtr);

ProcNum

- внутренний номер процессора, которому было послано сообщение или от которого ожидается сообщение.

*ReqPtr

- структура-признак, от которого ожидается состояние "заявка выполнена".

Возвращается значение:

0

- пересылка сообщения не завершена (*ReqPtr не установлен в состояние "заявка выполнена");

1

- пересылка сообщения завершена (*ReqPtr установлен в состояние "заявка выполнена").

5.4.Передача сообщения от заданного процессора всем остальным (широковещательная передача)

void rtl_BroadCast(void *MesPtr, int Count, int Size, int SenderProcNum);

MesPtr

- указатель на передаваемое сообщение или указатель области памяти, в которую необходимо принять сообщение.

Count

- число элементов, содержащихся в сообщении.

Size

- длина в байтах одного элемента сообщения.

SenderProcNum

- внутренний номер посылающего процессора.

Функция осуществляет передачу, если внутренний номер текущего процессора равен SenderProcNum, и прием - в противном случае.

6.СИНХРОНИЗАЦИЯ ПРОГРАММ, ВЫПОЛНЯЮЩИХСЯ НА РАЗНЫХ ПРОЦЕССОРАХ

long bsynch_(void);

Выполнение функции заключается в том, что центральный процессор (см.п.4) принимает синхросообщения от всех остальных процессоров, а затем рассылает им синхросообщения-ответы. Любой другой процессор передает синхросообщение центральному процессору, после чего принимает от него синхросообщение-ответ. Синхросообщение - это байт, содержимое которого несущественно.

Функция возвращает нулевое значение.

long tsynch_(void);

Функция tsynch_, как и функция bsynch_, выполняет барьерную синхронизацию процессоров текущей процессорной системы, но дополнительно производит выравнивание времен процессоров. Под выравниванием времен понимаются такие действия системы поддержки, в результате которых функция dvm_time (см.п.3) в один и тот же момент астрономического времени будет возвращать на всех процессорах одно и то же время - время, возвращаемое функцией dvm_time на центральном процессоре задачи до выполнения функции tsynch_ .

Выравнивание времен осуществляется следующим образом. Пусть центральный процессор в момент времени t1 (по своему датчику времени) посылает сообщение процессору P, находящемуся в состоянии приема этого сообщения. Процессор P, получив сообщение от центрального, посылает ему время приема этого сообщения T (по своему датчику времени). Центральный процессор, отослав сообщение процессору P, переходит к приему от него сообщения со временем T и принимает его в момент времени t2 по своему датчику времени. После этого центральный процессор отсылает процессору P время (t1+t2)/2 - T , которое при выполнении им функции dvm_time всегда будет добавляться к показанию его датчика времени.

Такая операция осуществляется центральным процессором со всеми остальными процессорами. Чтобы избежать случайных помех, операция выравнивания времен повторяется несколько раз, и для каждого процессора в качестве результата принимается та величина (t1+t2)/2 - T, для которой время передачи сообщения, равное (t1-t2)/2, минимально.

Характеристики

Список файлов учебной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7021
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее