Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Οδηγίες εργαστηρίου 9 ο Εξάμηνο
Λογαριασμοί Έχετε 2 accounts (και 2 διαφορετικά home directories!) danaos.cslab.ece.ntua.gr ntua (όπως στα λειτουργικά) Για πρόσβαση στα μηχανήματα που βρίσκονται στο χώρο του εργαστηρίου cluster 16 μηχανημάτων (amorgos, skyros, lemnos, lesvos, salamina, poros, kythnos, naxos, serifos, skopelos, kerkyra, leykada, ithaki, kefalonia, zakynthos, paxoi) ουρά lab Εκεί δουλεύουμε για: Υλοποίηση Debugging Testing Eπίδειξη ασκήσεων scirouter.cslab.ece.ntua.grcslab ece Για πρόσβαση στα μηχανήματα στο server room του cslab (ουρά clones) Εκεί δουλεύουμε για: Λήψη μετρήσεων σε προκαθορισμένες μέρες και ώρες 2
Πρόσβαση 3
Οι ουρές lab και clones έχουν: ΠΡΟΣΟΧΗ Διαφορετική αρχιτεκτονική (πρέπει να ξανακάνετε compile από τη μία στην άλλη) Διαφορετικό home directory (πρέπει να μεταφέρετε τα αρχεία σας) 4
compilation για την ουρά lab Για εκτέλεση στην ουρά lab parlab40@scirouter: ~$ ssh amorgos parlab40@amorgos: ~$ mpicc myprog_mpi.c -O3 Wall o myprog_mpi parlab40@amorgos: ~$ gcc myprog_omp.c -O3 Wall fopenmp o myprog_omp ΧΡΗΣΙΜΟΠΟΙΕΙΣΤΕ MAKEFILES 5
compilation για την ουρά clones: make_ on_ clones.sh Για εκτέλεση στην ουρά clones Δημιουργία κατάλληλου script (βλ. παράδειγμα παρακάτω make_on_clones.sh) Έστω ότι θέλουμε να κάνουμε make στο directory του scirouter /home/parallel/parlab40/fw #!/bin/bash ## Give the Job a descriptive name #PBS -N makejob ## Output and error files #PBS -o makejob.out #PBS -e makejob.err ## How many machines should we get? #PBS -l nodes=1 ## Start ## Run make in the src folder (~/fw/ in this template) cd /home/parallel/parlab40/fw/ make parlab40@scirouter: ~$ qsub q clones make_on_clones.sh 6
#!/bin/bash Εκτέλεση στην ουρά lab: mpirun_on_lab.sh ## Give the Job a descriptive name #PBS -N testjob ## Output and error files #PBS -o testjob.out #PBS -e testjob.err ## Limit memory, runtime etc. #PBS -l walltime=01:00:00 #PBS -l pmem=100mb ## How many nodes should we get from the system? #PBS -l nodes=8 ## Start #echo "PBS_NODEFILE = $PBS_NODEFILE" #cat $PBS_NODEFILE ## Run the job (use full paths to make sure we execute the correct thing) mpirun -np 8 -hostfile $PBS_NODEFILE --bynode /home/parallel/parlab40/fw/fw_mpi 2048 parlab40@scirouter: ~$ qsub q lab mpirun_on_lab.sh 7
#!/bin/bash Εκτέλεση στην ουρά clones: mpirun_on_clones.sh ## Give the Job a descriptive name #PBS -N testjob ## Output and error files #PBS -o testjob.out #PBS -e testjob.err ## Limit memory, runtime etc. #PBS -l walltime=01:00:00 #PBS -l pmem=100mb ## How many nodes:processors_per_node should we get? #PBS -l nodes=8:ppn=8:mx10g:lowmem ## Start ## Run the job (use full paths to make sure we execute the correct thing) /usr/local/open-mpi/bin/mpirun / / p / / p -x MX_ RCACHE=8 --mca btl tcp,self -np 4 --bynode \ /home/users/goumas/benchmarks/mpi_code/fw/fw_mpi 2048 parlab40@scirouter: ~$ qsub q clones mpirun_on_clones.sh 8
scripts Τα template scripts make_on_clones.sh, mpirun_on_lab.sh και mpirun_on_clones.sh θα τα βρείτε στο /home/parallel/scripts στον scirouter 9
Job info H εντολή qsub απαντά με το όνομα της δουλειάς σας στον torque: parlab40@scirouter:~$ qsub -q lab the_script.sh 26160.localhost Λήψη πληροφοριών για τη δουλειά: parlab40@scirouter:~$ qstat -f 26160.localhost Λήψη πληροφοριών για την ουρά: parlab40@scirouter:~$ queue d lab parlab40@scirouter:~$ queue d clones Για να δούμε όλα τα jobs: parlab40@scirouter:~$ showq Για να σβήσουμε μία δουλειά από την ουρά: parlab40@scirouter:~$ qdel 26160 10
#include <stdio.h> #include <stdlib.h> #include <mpi.h> #include <unistd.h> MPI_test.c int main(int argc, char **argv) { char name[256]; int size; int myrank; int N=1024; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); gethostname(name, sizeof(name)); N=atoi(argv[1]); fprintf(stdout,"%s: rank=%d, size=%d, N=%d \n",name, myrank,size,n); } MPI_Finalize(); return 1; 11