rtsDDr (1158447), страница 2
Текст из файла (страница 2)
void dvm_FreeArray(void *ArrayPtr);
Макроопределение возвращает в свободную память блок памяти, заданный указателем ArrayPtr, и устанавливает значение этого указателя равным NULL. Допустимо обращение к макроопределению со значением указателя ArrayPtr равным NULL.
| void dvm_AllocStruct ( | | <Type>, |
Макроопределение выделяет блок памяти размера sizeof(Type) байтов и присваивает его адрес указателю StructPtr. Если блок памяти требуемого размера выделен быть не может, то выполнение задачи пользователя или системы поддержки будет прекращено.
void dvm_FreeStruct(void *StructPtr);
Макроопределение возвращает в свободную память блок памяти, заданный указателем StructPtr, и устанавливает значение этого указателя равным NULL. Допустимо обращение к макроопределению со значением указателя StructPtr равным NULL.
3Опрос времени выполнения программы в независимой от аппаратурно-программной среды форме
double dvm_time(void);
Функция возвращает время выполнения программы в секундах. Отметим, что содержание понятия времени выполнения может быть разным для различных сред.
4Опрос внутренних номеров функционально выделенных процессоров
Запуск программы пользователя для выполнения на многопроцессорной системе требует задания (в качестве параметров запуска) характеристик многопроцессорной системы как многомерного массива: размерности и размеров по каждому измерению. Пусть размерность многопроцессорной системы задана равной n, а размер по измерению k равным PSSizek (1 ≤ k ≤ n). Тогда при инициализации системы поддержки каждому процессору будет присвоен внутренний номер ProcNumberint:
| | n | n |
где Ik значение индекса процессора по измерению k индексного пространства многопроцессорной системы (0 ≤ Ik ≤ PSSizek 1).
То есть, внутренний номер это линейный индекс процессора в индексном пространстве многопроцессорной системы.
Каждый процессор имеет также внешний номер 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") предполагается известной.
Область памяти, предназначенная для передаваемого или принимаемого сообщения, должна быть запрошена динамически с помощью рассмотренных в п. 2 функций.
5.1Синхронный обмен сообщениями
5.1.1Синхронная передача
| int rtl_Send ( | void | *MesPtr, |
| MesPtr | | указатель на передаваемое сообщение. |
| Count | | число элементов, содержащихся в передаваемом сообщении. |
| Size | | длина в байтах одного элемента передаваемого сообщения. |
| ProcNum | | внутренний номер процессора, которому посылается сообщение. |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.1.2Синхронный прием
| int rtl_Recv ( | void | *MesPtr, |
| MesPtr | | указатель области памяти, в которую необходимо принять сообщение. |
| Count | | число элементов, содержащихся в принимаемом сообщении. |
| Size | | длина в байтах одного элемента принимаемого сообщения. |
| ProcNum | | внутренний номер процессора, сообщение от которого требуется принять. |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.2Асинхронный обмен сообщениями
5.2.1Асинхронная передача
| int rtl_SendA ( | void | *MesPtr, |
| MesPtr | | указатель на передаваемое сообщение. |
| Count | | число элементов, содержащихся в передаваемом сообщении. |
| Size | | длина в байтах одного элемента передаваемого сообщения. |
| ProcNum | | внутренний номер процессора, которому посылается сообщение. |
| Tag | | номер класса передаваемого сообщения (классификация сообщений в компетенции пользователя системы передачи сообщений). |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.2.2Асинхронный прием
| int rtl_RecvA ( | void | *MesPtr, |
| MesPtr | | указатель области памяти, в которую необходимо принять сообщение. |
| Count | | число элементов, содержащихся в принимаемом сообщении. |
| Size | | длина в байтах одного элемента принимаемого сообщения. |
| ProcNum | | внутренний номер процессора, сообщение от которого требуется принять. |
| Tag | | номер класса принимаемого сообщения. |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.3Обмен сообщениями в режиме "NO WAIT"
5.3.1Передача в режимме "NO WAIT"
| int rtl_Sendnowait ( | void | *MesPtr, |
| MesPtr | | указатель на передаваемое сообщение. |
| Count | | число элементов, содержащихся в передаваемом сообщении. |
| Size | | длина в байтах одного элемента передаваемого сообщения. |
| ProcNum | | внутренний номер процессора, которому посылается сообщение. |
| Tag | | номер класса передаваемого сообщения (классификация сообщений в компетенции пользователя системы передачи сообщений). |
| *ReqPtr | | структура-признак, который устанавливается в состояние "заявка выполнена", когда сообщение будет доставлено адресату. |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.3.2Прием в режиме "NO WAIT"
| int rtl_Recvnowait ( | void | *MesPtr, |
| MesPtr | | указатель области памяти, в которую необходимо принять сообщение. |
| Count | | число элементов, содержащихся в принимаемом сообщении. |
| Size | | длина в байтах одного элемента принимаемого сообщения. |
| ProcNum | | внутренний номер процессора, сообщение от которого требуется принять. |
| Tag | | номер класса принимаемого сообщения. |
| *ReqPtr | | структура-признак, который устанавливается в состояние "заявка выполнена", когда сообщение поступит по адресу MesPtr. |
Возвращается неотрицательное значение при успешном выполнении функции и отрицательное в противном случае.
5.3.3Ожидание завершения передачи или приема
void rtl_Waitrequest(RTL_Request *ReqPtr);
| *ReqPtr | | структура-признак, от которого ожидается состояние "заявка выполнена". |
5.3.4Опрос завершения передачи или приема
int rtl_Testrequest(RTL_Request *ReqPtr);
| *ReqPtr | | структура-признак, от которого ожидается состояние "заявка выполнена". |
Возвращается значение:
| 0 | | пересылка сообщения не завершена (*ReqPtr не установлен в состояние "заявка выполнена"); |
| 1 | | пересылка сообщения завершена (*ReqPtr установлен в состояние "заявка выполнена"). |
5.4Передача сообщения от заданного процессора всем остальным (широковещательная передача)
| int rtl_BroadCast ( | void | *MesPtr, |















