Paralel Programlama 2. Bölüm Mustafa Karakaplan
Birinci Bölüm ● Bilgisayar Kümeleme ve Paralel Programlama Nedir? ● MPI'ya Giriş ve Noktadan Noktaya Haberleşme ● Ortak Mesajlaşma ve Haberleşme, Kesintisiz Haberleşme İkinci Bölüm ● Veri Organizasyonu ve Veri İşleme ● Paralel Matris Işleme ● Temel Sayısal Hesaplamalar ve Kütüphaneler ● Simulasyon ve Optimizasyon
MPI_COMM_WORL D Communicator İşlemciler Sıralar İletişimci Adı
İşlemci Sayısını Bulmak İlk argüman iletişim ortamı İşlemci sayısı ikinci argümana aktarılır MPI_Comm_size (MPI_COMM_WORLD, &p);
İşlemci Sırasını Bulmak İlk argüman iletişim ortamı İşlemci sırası ikinci argümana aktarılır. 0 ile p-1 arasında bir sayı alacaktır. MPI_Comm_rank (MPI_COMM_WORLD, &id);
Otomatik Değişkenlerin Dağılımı 0 id 6 p 4 6 p 2 6 p 1 6 p 5 6 p 3 6 p
Çevrimli İş dağılımı P1P2 P P1P2P0 Sıradan İş dağılımı
Sıralı İş Dağılımı x1=id*(veri/np)+alt x2=(id+1)*(veri/np) P1P2P0 x1=1 ; x2=6x1=7 ; x2=12 x1=13 ; x2= P1P2P0 x1=1 ; x2=4x1=5 ; x2=9 x1=10 ; x2=13 x1=14 ; x2=18 P3
I = (b-a)*(f(a)+ 4f(x c )+f(b))/6 x X=aX=b f(a) f(b) x c = (a+ b)/2 f(X c ) Simpson Kuralı ile İntegral
Simpson Kuralı İle İntegral π = 4/(1+x*x) dx ∫ 0 1 Her işlemci kendi aralığını hesaplayacak x1= my_rank/N p den x2= x1 + 1/N p
İntegral Almada Hatalar ● N noktada integrasyonda ● Monte Carlo da hata 1/N 0.5 ● Trapezoidal 1/N 2 ● Simpson 1/N 4 ● Gaussian 1/N 2m (m tmel nokta için) ● Fakat d boyutlu integral için – Monte Carlo da hata hala 1/N 0.5 – Simpson da hata 1/N 4/d
Paralel Matematik Kütüphaneleri Şimdiye kadar verilen MPI rutinleri ile matematiksel ve bilimsel paralel programlama yapabilirsiniz. Lineer Cebir problemlerini çözmek için paralel kod yazmak yerine bu amaçla yazılmış alt yordamları çağırmak yeterli olacaktır.
Seri ve Paralel Matematik Kütüphaneleri ● GSL Gnu Scientific Library ● BLAS: Basic Linear Algebra Subprograms ● PBLAS: Parallel Basic Linear Algebra Subprograms ● BLACS: Basic Linear Algebra Communication Subprograms ● LAPACK: Linear Algebra PACKage ● ScaLAPACK: Scalable Linear Algebra PACKage
Matris Dağıtma -I
Matris Dağıtma
Matematik Kütüphaneleri BLAS/PBLAS Vektör-Vektör İşlemleri, Matris-Vektör İşlemleri, Matris_Matris İşlemleri LAPACK/ScaLAPACK Özdeğer / Özvektör problemleri, Lineer Denklem sistemleri çözümü
ScaLAPACK'ı kullanılması ● Işlem gridinin belirlenmesi (= ⇒ BLACS) ● Matrisin işlem gridlerine dağıtılması ● ScaLAPACK'ın rutinlerinin çağrılması ● İşlem gridlerini serbest bırakma (= ⇒ BLACS)
Derleme mpicc ornek.c -llapack -lblas -lmpiblacsF77init -lmpiblacs -lscalapack -lm
İşlem Gridi ● 0 dan p-1 e kadar işlemci var. ● BLACS R*C<=p kadar grid oluşturur. ● Gridler i,j şeklinde etiketlenir. ● 0<= i <=R ve 0<= j <= C
Örnek Programlama I MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &p); MPI_Comm_rank(MPI_COMM_WORLD, &myid); Cblacs_get(0, 0, &ctxt);
Örnek Programlama II for (pc=p/2; p%pc; pc--); pr = p/pc; Cblacs_gridinit(&ctxt, "Row-major", pr, pc); Cblacs_pcoord(ctxt, myid, &myrow, &mycol); Cblacs_gridexit(ctxt); MPI_Finalize();
Matris Vektör Çarpma - I int M=15, N=20, ZERO=0, ONE=1; mb = (M - 1)/pr + 1; nb = (N - 1)/pc + 1; x = (double*) malloc(nb*sizeof(double)); y = (double*) malloc(mb*sizeof(double)); A = (double*) malloc(mb*nb*sizeof(double));
Matris Vektör Çarpma -I /*Local Matrisin indislerini belirle */ i0 = myrow*mb; j0 = mycol*nb; m = mb; n = nb; if (myrow == pr-1) m = M - i0; if (mycol == pc-1) n = N - j0; descinit_(descA, &M, &N, &mb, &nb, &ZERO, &ZERO, &ctxt, &mb, &info); descinit_(descx, &ONE, &N, &ONE,&nb, &ZERO, &ZERO, &ctxt, &ONE, &info); descinit_(descy, &M, &ONE,&mb, &ONE,&ZERO, &ZERO, &ctxt, &mb, &info);
Matris Vektör Çarpma - II y = beta * y + alpha * op( A ) * x dgemv_(&transpose, &M, &N, &alpha, A, &LDA, x, &incx, &beta, y, &incy); /* y = alpha*A*x + beta*y */ alpha = 1.0; beta = 0.0; pdgemv_("N", &M, &N, &alpha, A, &ONE, &ONE, descA, x, &ONE, &ONE, descx, &ONE, &beta, y, &ONE, &ONE, descy, &ONE);
GSL Gnu Scientific Library ● Komplex Sayılar ● Permutasyon ● Sıralama ● Lineer Cebir ● FFT ● Monte Carlo İnteg. ● Dif. Denklemler ● Nümerik Diferansiyel ● Kök Bulma ● Polinomun kökleri ● Vektör ve matrisler ● BLAS, CBLAS desteği ● İstatistik ● Simmulated Ann. ● İnterpolasyon ● Minimizasyon ● Fiziksel Sabitler
GSL Örnek /* Derleme gcc bessel.c -lgsl -lcblas -lm */ #include int main (void) { double x = 5.0; double y = gsl_sf_bessel_J0 (x); printf ("J0(%g) = %.18e\n", x, y); return 0; }
Monte Carlo Simulasyonu ● Monte Carlo Simulasyonunda standart sapma 1/N ● P tane işlemci ile varians NP kadar daha az ● Yaklaşık P kadar daha hızlı
Monte Carlo ile pi hesaplama 1 Kare içindeki noktaların sayısının daire içindeki noktalara oranı pi/4 e eşittir.
Çok Katlı İntegral Integral= △ x* △ y* △ z*f(xyz)/N
Optimizayon Yöntemleri * Genetic Algorithm. * Hill-climbing. * Tabu Search. * Simulated Annealling. * Simplex Search. * Steepest Ascents. * Deterministic Crowding. * Differential Evolution.
MPI ve Optimizasyon ● PGAPack Parallel Genetic Algorithm Library ● GAUL The Genetic Algorithm Utility Library ● GALib Genetic Algorithm Library
Gezgin Satıcı Problemi