Paweł Tatarczak
Projekt zadania domowego z Systemów Operacyjnych
MPI jest biblioteką umożliwiającą pisanie programów wykonywanych równolegle. Składa się z zestawu ok. 100 funkcji zapewniających identyfikację, synchronizację i przesyłanie danych między wykonywanymi procesami. Podstawowe funkcje to (wszystkie funkcje zwracają 0 jeśli nie było błędu i >0 wpp.):
Więcej informacji: http://www.mat.uni.torun.pl/res/mpi/.
Modyfikując bibliotekę LinuxThreads, napisać bibliotekę MaleMPI pozwalającą na używanie funkcji MPI. Założenia: funkcje MPI mogą używać tylko zmiennych zdefiniowanych po MPI_Init(). Z Linuxthreads można "wyrzucić" funkcje obsługujące parametry tworzenia, semafory (mutex) i zmienne warunkowe (condition variables) oraz znacznie uprościć tworzenie i przerywanie wątków. Docelowo wykonanie programu np. silnia.c:
#include "mpi.h"
void main(int argc, char** argv)
{
MPI_Init(&argc, &argv)
int myrank,size;
int i;
double j,pom;
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
pom=1.0;
for(i=0;i<100/size;i++) pom *= myrank*(100/size) + i + 1;
if(myrank > 0) MPI_Send(&pom,1,MPI_DOUBLE,0,MPI_ANY_TAG,
MPI_COMM_WORLD);
else if(myrank==0)
{
for(i=0;i
skompilowanego następująco:
cc przyklad.c -lmpi
ma dać poprawne wykonanie.
Wskazówka: MPI_Init zdefiniować w mpi.h jako
#define MPI_Init(x) _MPI_Init(x); } _MPI_main() {
gdzie _MPI_Init(x) tworzy sieć wątków z funkcją wykonywaną _MPI_main().