×
Yeni bir madde oluştur
Sayfa başlığınızı buraya yazın:
We currently have 15 articles on UHeM Wiki. Type your article name above or create one of the articles listed here!



    UHeM Wiki
    15Maddeler

    MPI ile yazılmış örnek bir C programı. Program PI sayısını hesaplamaktadır.

    Kaynak Kod

    /**
     * code by William Emmanuel S. Yu
     * for testing LAM install in ahpc cluster
    **/
     
    #include <mpi.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (int argc,char* argv[]) {
            int n, myid, numprocs, i,j,k,l;
            double PI25DT = 3.14159265358979323846264338327950288419716;
            double mypi, pi, h, sum, x;
            double dummy = 0.0;
            double t1,t2;
     
     
            MPI_Init(&argc,&argv);
            MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
            MPI_Comm_rank(MPI_COMM_WORLD, &myid);
     
            t1 = MPI_Wtime();
     
            n = 100;
     
            h = 1.0 / (double) n;
            sum = 0.0;
            for (i=myid+1; i<=n; i += numprocs){
                    x = h * ((double)i - 0.5);
                    sum += (4.0 / (1.0 + x*x));
     
                    for(j=0;j<1000;j++)
                       for(k=0;k<1000;k++)
                          for(l=0;l<100;l++)
                             dummy = dummy + j+ k + l;
            }
            mypi= h * sum;
     
            MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
            printf("Myid is %d: mysum: %5.2f dummy: %5.3f\n",myid,sum,dummy);
            if (myid == 0)
                    printf("pi is %.25f, Error is %.25f\n\n\n\n", pi, fabs(pi-PI25DT));
     
            t2 = MPI_Wtime();
     
            printf("Elapsed time [%2d] is %8.2f\n",myid,t2-t1);
     
            MPI_Finalize();
            return 0;
    }
    

    Derleme

    Programı derleyebilmek için öncelikle .bashrc dosyasına[1] aşağıdakilerini eklemeniz gereklidir:

    export INTEL_LICENSE_FILE=/RS/progs/intel/licenses
    # intel mpi için
    . /RS/progs/intel/impi/3.1/bin64/mpivars.sh
    # c, c++ ve fortran derleyicileri kullanabilmek için
    . /RS/progs/intel/Compiler/11.1/069/bin/iccvars.sh intel64
    

    Ardından aşağıdaki komutu kullanarak programınızı derleyebilirsiniz. Derleme sonrasında oluşan dosyanın adı pi.x dir. Artık bu programı LSF kullanarak sisteme verebilirsiniz.

    source ~/.bashrc
    mpicc pi.c -o pi.x
    

    Çalıştırma

    Derlenen programı sisteme teslim edebilmek için LSF yazılımı kullanılmaktadır. Bunu için aşağıdakine benzer bir dosyayı /RS/users/<user_name> altında yaratmak gereklidir.

    #!/bin/bash
    #BSUB -P proje_ismi
    #BSUB -q kuyruk_isimi
    #BSUB -m sunucu_sistemi
    #BSUB -o %J.out
    #BSUB -e %J.err
    #BSUB -a intelmpi
    #BSUB -n 16
     
    mpirun.lsf /RS/users/<user_name>/pi.x
    
    proje_ismi
    Buraya kullanıcı hesabınız açıldıktan sonra size gelen e-posta içerisindeki proje adını yazmalısınız. Proje adları aynı zamanda UNIX grubuna karşılık geldiği için, üye olduğunuz grupları listelemek işinize yarayabilir. Bunun için id komutunu kullanabilirsiniz.
    kuyruk_ismi
    LSF'de ayrıntılı açıklandığı gibi sistemde birden fazla kuyruk sistemi bulunmaktadır. Hangi kuyuklar iş gönderme yetkinizin olduğunu bqueues -u <user_name>[2] komutu ile görebilirsiniz. <user_name> ifadesini kullanıcı adınızla değiştirmelisiniz. Örnek:
    [hbm51401@elogin ~]$ bqueues -u hbm51401
    QUEUE_NAME      PRIO STATUS          MAX JL/U JL/P JL/H NJOBS  PEND   RUN  SUSP 
    hbm514_e2        40  Open:Active     256   32    -    -     0     0     0     0
    
    sunucu_sistemi
    anadolu_dual_w, anadolu_quad_w, karadeniz_w, ege_e, ege2_w seçeneklerinden birisi belirtilir. Seçtiğiniz kuyruk ile sunucu sisteminin uyumlu olmasına dikkat etmelisiniz. Seçtiğini kuyruk için hangi sunucu sistemini yazabileceğinizi bqueues -l <kuyuuk_ismi> komutunu kullanabilirsiniz. Bu komutun çıktısının son bölümünde kuyrukta tanımlı sunucu sistemlerinin adları yer almaktadır. Bu konuda ayrıntılı bilgi UHEM Sunucu Sistemlerindeki Yeni Yapılanma ve Değişen Kullanım Prosedürleri'nde bulunmaktadır.
    -n 16
    Toplam çekirdek sayısı girilir.

    Hazırladığınız dosyayı /RS/users/<user_name> altında pi.lsf adı ile kaydettikten sonra

    bsub < pi.lsf
    

    komutunu kullanarak işi teslim edebilirsiniz. LSF ile ilgili ayrıntılı bilgiyi LSF Kullanım Kılavuzu'nda bulabilirsiniz.


    1. Bu dosya /AKDENIZ/users/<user_name> klasöründe bulunmaktadır. <user_name> bölümü kullanıcı adınızla değiştirin.
    2. LSF komutlarını çalıştırabilmek için sisteme ilk girişte source /RS/progs/LSF/conf/profile.lsf komutunu çalıştırmalısınız. Bu komutu tekrar tekrar çalıştırmak istemiyorsanız .bashrc dosyasına koyabilirsiniz.