Hardware - разное

Пример программы на языке C


Начнем с классического примера: программы ``hello, world''.

#include &lt stdio.h&gt

int main() {

printf("Hello, world\n");

return 0;

}

Теперь надо построить PARIX-приложение. Для этого даем команду

px ancc -o hello.px hello.c

Теперь мы получили исполняемый файл hello.px, который можно запустить. Действительно, команда

px run -a p4 hello.px

запустит PARIX-приложение на разделе из 4-х процессоров и вы получите четыре строчки (ответит каждый процессор) Hello, world

Теперь немного модифицируем программу.

#include &lt stdio.h&gt



#include &lt epx/root.h&gt

int main() {

int ID;

ID=GET_ROOT()-&gt ProcRoot-&gt MyProcID;

printf("Hello, world! This is processor %d.\n",ID);

return 0;

}

Скомпилируем программу и запустим. Каждый процессор сообщит свой номер. На этом простом примере демонстрируется важное свойство PARIX: на каждом узле изначально запущены идентичные приложения. Но поведение процесса изменяется в соответствии с позицией процессора в решетке раздела. Функция GET_ROOT осуществляет доступ к (глобальным) данным о конфигурации раздела и положении текущего узла в решетке. Эта функция возвращает указатель на данные следующей структуры:

typedef struct {

int MyProcID; /* my processor number */

int MyX; /* my X coordinate */

int MyY; /* my Y coordinate */

int MyZ; /* my Z coordinate */

int nProcs; /* Number of processors */

int DimX; /* array dimension in X direction */

int DimY; /* array dimension in Y direction */

int DimZ; /* array dimension in Z direction */

} RootProc_t;

Эти данные не являются независимыми, т.к. справедливо следующее

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

nProcs = Dimx * DimY * DimZ

Эта информация позволяет также вычислить идентификаторы соседних процессоров.

Более содержательные примеры см. в каталоге /epx/epx/examples.



Содержание раздела