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;iskompilowanego następująco: cc przyklad.c -lmpima 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().