logo
Лекции - Чернышева

Общие сведения.

Parsytec Power X`plorer имеет 8 процессоров.МВС – многопроцессорная вычислительная система.

У каждого процессора есть номер и три координаты

Typede struct {

int MyProcID; // номер

int MyX; // координата по оси X

int MyY; // координата по оси Y

int MyZ; // координата по оси Z

int nProcs; // общее число процессоров

int DimX; // количество процессоров по оси X

int DimY; // количество процессоров по оси Y

int DimZ; // количество процессоров по оси Z

} RootProc_t;

Эти характеристики однозначно определяют процессор. Эта структура прописана в заголовочном файле sys/root.h

Какие значения могут принимать характеристики процессора?

MyProcID = 0,1,2,3,…,nProcs – 1 (т.к. с нуля)

MyX = 0,1,2,3…,DimX-1

MyY = 0,1,2,3…,DimY-1

MyZ = 0,1,2,3…,DimZ-1

nProcs 1,2,3,…

DimX = 1,2,3,…

DimY = 1,2,3,…

DimZ = 1,2,3,…

Как эти значения связаны между собой?

nProcs = DimX * DimY * DimZ

MyProcID = MyZ * DimX * DimY + MyY * DimX + MyX

Физически все процессоры соединены в решётку

квази – «псевдо», «якобы»

DimX = 5

DimY = 4

DimZ = 1

nProcs = 20

MyZ = 0

Характеристика процессора осуществляется следующим образом:

RootProc_t * ProcRoot;

MyProcID = GET_Root()->ProcRoot->MyProcID;

int MyProcID, nProcs;

int MyX,MyY,MyZ;

int DimX,DimY,DimZ;

MyX = GET_ROOT()->ProcRoot ->MyX; (аналогично для MyY и MyZ)

#define PC_MyProcID GET_ROOT()->ProcRoot->MyProcID

#define PC_nProcs GET_ROOT()->ProcRoot->nProcs

#define PC_MyX GET_ROOT()->ProcRoot->MyX

#define PC_DimX GET_ROOT()->ProcRoot->DimX

аналогично для MyY, MyZ, DimY, DimZ

характеристики программируются следующим образом:

MyProcID = PC_MyProcID;

#include <sys/root.h>

#include <sys/param.h>

#include <stdio.h>

Установка каналов связи между процессорами

LinkCB_t * PrewLink;

LinkCB_t * NextLink;

Прототип функции установки каналов связи:

LincCB_t * ConnectLink (int Processor, int RequestID, int & error)

Processor – номер процессора, с которым устанавливают связь;

RequestID – идентификатор запроса на установку данной связи (должен совпадать у соединяемых процессоров);

Error – адрес переменной целого типа куда записывается возможная ошибка.

Функция возвращает идентификатор канала связи

Пример: Установить канал связи с предыдущим и последующим процессором по оси x:

LincCB_t * PrewLink, * NextLink; int error;

PrewLink = ConnectLink (MyProcID-1,77,& error);

NextLink = ConnectLink (MyProcID+1,88,& error);

Установка каналов связи между процессорами программируется раздельно в соединяемых процессорах. В каждом процессоре указывается номер процессора, с которым устанавливается связь, и идентификатор запроса на установку канала связи. Если один процессор вышел на функцию установки канала связи, то он ждёт пока другой процессор выйдет на свою функцию установки связи. Неправильное программирование установки канала связи ведёт к бесконечному ожиданию.