Witam!
Używam płyty LiveCD Pelican HPC do uruchamiania domowego superkomputera.
Jak dotąd sprawdzałem na nim aplikację o takim kodzie:
Nic ambitnego.
Kompilację pliku hello.c wykonuję poleceniem
Uruchomienie skompilowanego programu wykonuję tak
lub
Jak widać to nic ambitnego.
Chciałem napisać aplikację która przyjmuje dwie liczby jako parametry (od do) np 1 1000000
Potem, żeby liczba z argumentu 2 była dzielona przez liczbę procesorów jakie ma ten klaster. W efekcie otrzymujemy tyle zbiorów liczb dla każdego procesora co liczba procesorów w uruchomionym klastrze. Każdy procesor z każdej liczby ze swojego zbioru wyciąga pierwiastek 2 stopnia i dodaje do swojej zmiennej wynik, a potem na koniec, żeby nastąpiło zsumowanie wyników z poszczególnych procesorów w jeden i wyświetlenie
np podaje programowi 1 10
mam 3 komputery w tym jeden z 2 procesorami, więc obliczenia wyglądały by tak (zarysowo oczywiście )
node0=sqrt(4)+sqrt(8)
node1A=sqrt(3)+sqrt(7)
node1B=sqrt(2)+sqrt(6)+sqrt(10)
node2=sqrt(1)+sqrt(5)+sqrt(9)
Jest node1A i node1B bo zakładam na tym schemacie że to jest komputer z dwoma procesorami.
Gdy wszystkie skończą to żeby nastąpiło zsumowanie do zmiennej znajdującej się w weźle master czyli node0 czyli wg takiej zasady.
node0=node0+node1A+node1B+node2
Brakuje mi jak na razie wprawy w pisaniu tego typu aplikacji, a gdybym miał taką to bym mógł się myślę w końcu rozkręcić żeby pisać własne...
Jest ktoś wstanie pomóc napisać mi taką aplikację to proszę o pomoc...
Używam płyty LiveCD Pelican HPC do uruchamiania domowego superkomputera.
Jak dotąd sprawdzałem na nim aplikację o takim kodzie:
Kod:
#include <stdio.h>
#include "mpi.h"
int main(int argc,char *argv[]){
int nproc;
int iproc;
char proc_name[MPI_MAX_PROCESSOR_NAME];
int nameLenght;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Comm_rank(MPI_COMM_WORLD, &iproc);
MPI_Get_processor_name(proc_name, &nameLenght);
printf("Hello world, I am host %s with rank %d of %d\n", proc_name, iproc, nproc);
MPI_Finalize();
return 0;
}
Nic ambitnego.
Kompilację pliku hello.c wykonuję poleceniem
Kod:
mpicc -o hello hello.c
Kod:
mpirun -np C hello
Kod:
mpirun -np N hello
Jak widać to nic ambitnego.
Chciałem napisać aplikację która przyjmuje dwie liczby jako parametry (od do) np 1 1000000
Potem, żeby liczba z argumentu 2 była dzielona przez liczbę procesorów jakie ma ten klaster. W efekcie otrzymujemy tyle zbiorów liczb dla każdego procesora co liczba procesorów w uruchomionym klastrze. Każdy procesor z każdej liczby ze swojego zbioru wyciąga pierwiastek 2 stopnia i dodaje do swojej zmiennej wynik, a potem na koniec, żeby nastąpiło zsumowanie wyników z poszczególnych procesorów w jeden i wyświetlenie
np podaje programowi 1 10
mam 3 komputery w tym jeden z 2 procesorami, więc obliczenia wyglądały by tak (zarysowo oczywiście )
node0=sqrt(4)+sqrt(8)
node1A=sqrt(3)+sqrt(7)
node1B=sqrt(2)+sqrt(6)+sqrt(10)
node2=sqrt(1)+sqrt(5)+sqrt(9)
Jest node1A i node1B bo zakładam na tym schemacie że to jest komputer z dwoma procesorami.
Gdy wszystkie skończą to żeby nastąpiło zsumowanie do zmiennej znajdującej się w weźle master czyli node0 czyli wg takiej zasady.
node0=node0+node1A+node1B+node2
Brakuje mi jak na razie wprawy w pisaniu tego typu aplikacji, a gdybym miał taką to bym mógł się myślę w końcu rozkręcić żeby pisać własne...
Jest ktoś wstanie pomóc napisać mi taką aplikację to proszę o pomoc...
Ostatnia edycja: