Pi.c

UHeM sitesinden
Atla: kullan, ara

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.