Pararel Programlama Nedir?
Pararel programlama birçok hesaplamalar içeren programi,büyük hesaplamari birden fazla işlemciye ve bilgisayara bölerek işlemimizin sonucunu daha kısa sürede ulaşmamızı sağlar.
Genellikle yazılan yazılımlar seri hesaplamalar icin yazılır.Tek bir işlem merkezi (CPU) ve tek bir bilgisayarda çalışmak üzere yazılır.Burda anlatacıgım şeyler prarel programlama üzerinedir.Birçok insanin hiçbilmediği bir dunyadir Aydınlatmak için Hazırladım bu dökümani..).
Neden pararel programlama kullanmalıyız avantajları nelerdir?
• Zaman veya paradan Tasarruf.
• Eşzamanlı çalışma sağlar
• Büyük problemleri çözer
• Lokal olmayan kaynaklarin kullanimini saglar
Pararel programlama genellikle c tabanlı dilleri kullanarak yapılır.
Bu dökümanda MPI programı kullanarak C de nasıl prarel programlama yapabiliriz onu anlatacagim..
MPI kütüphanelerini anlatmak cok zaman alır lakin aşşada linkini vereceğim kaynaktan öğrenebilirsiniz ,bu konu programlamayı öğretmek amacıyla değil programlamayı bilen kişilerin pararel programlamayı öğrenmesi amacıyla açılmıştır.
MPI programının hazırlanması ?
Başlat>tüm programlar [FONT="]> MPICH2 - > wmpiregister.exe [/FONT]
[FONT="]wmpiregister.exe e tıklıyoruz ekranda [/FONT][FONT="]MPIEEXEC – register wrapper[/FONT] gözükecektir.
Resimde gözüktüğü gibi password encrypted into the registry mesajini alırsanız.Kayıt işmeniniz tamamlanmıştır demektir root bilgisayardaki.Burda dikkat etmemiz gereken nokta Diğer pc dede aynı işlemi yapmamız gerekmektedir.Örneğin kullanıcı adını cybermafia şifreyide 123456 yaptik diyelim 2. pc mizdedeki kullanıcı adı ve şifremiz cybermafia:123456 olmalıdır.Başka bir önemli nokta;pararel programlama yapabilmemiz için windowsta kullanıcı hesabı yaratmalıyız kullanıcı adı cybermafia şifreside 123456 olacak şekilde.Başlat>Denetim Masası>Kullanıcı Hesapları ve Aile koruması>kullanıcı Hesapları>hesapları yönet>yeni hesap oluştur.
yönetici olarak oluşturmamız daha sağlıklı olacaktir.Kullanıcı adını cybermafia yapıp sonrada hesaba prola ekleyip ,parolayıda 123456 yaparsak mpich2 programının cybermafia accountunu kullanmasını sağlarız.Kısacasi [FONT="]MPIEEXEC – register wrapper da hangi parola ve şifreyi kullandıysak,o kullanıcı adı ve şifreyle windows accountu yaratmamız gerekmektedir.Ve bu işlemi kac tane bilgisayarda pararellemek istiyorsak okadar bilgisayarda yapmamız gerekiyor.[/FONT]
[FONT="] Kayıt işlemi ve winde account açma içlemimiz bitti.Sırada programı kullanma var;[/FONT]
[FONT="] Başlat >tüm programlar>MPIch2>[FONT="][FONT="]mpiexec.exe [/FONT][/FONT][/FONT]
[FONT="]mpiexec.exe e tıklıyoruz karşımıza alt resimdeki ekranın çıkması lazım.[/FONT]
mpich2 sagolsun bize ornek bir pararel programlama programı koymus onu calistirmamiz icin 3 noktaya (...) tıklayıp rresimde gözüktüğü gibi cpi.exe yi secmemiz lazım ,number of processi 1 yapiyoruz şuan işlemimizi tek bilgisayarda deniyoruz.Ve execute e tıklıyoruz.
bu ekran gelirse yani command prompt a bu ekran gelirse , tek islemcide hicbir sorunumuz yok programımız calisiyor demektir,eger calisiyorsa gerisi daha kolay.
2 işlemcide nasıl yapıyoruz?
resimdeki gibi dikkat etmemiz gereken sonuc pclerin adreslerini ve process sayımızı belirlemek
bunları yaptıktan sonra execute tusuna basiyoruz şu ekranın çıkması lazım;
eğer cıkarsa 2 pc de 2 farkli işlemcide programımızı çalıştırdık demektir..
Burda kullandığım MPI_HELLO.EXE yi direk olarak vermeyeceğim.kaynak kodunu vereceğim..Kaynak koduyla nasıl proje yaratırız nasıl exe haline getiririz aşşada anlatacağım
Microsoft C++ 6.0 da proje yaratma
1) [FONT="]MS Developer Studio - Visual C++ ı açalım.[/FONT]
[FONT="] 2)Create a new project yapalım[/FONT]
[FONT="]
[/FONT]
[FONT="]3) project nami mizi girdikten sonra okleyip Finishleyip project wizardi kapatalım.[/FONT]
[FONT="] 4)Project>settings e tıklayalım[/FONT]
[FONT="] 5)Debug and realase i [FONT="][FONT="]multithreaded libraries e çevirmemiz lazım onuda resimli olarak anlattım.[/FONT][/FONT][/FONT]
[FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="]10)kaynak kodumuzu ekleyip build yapıyoruz.[/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT]
[FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="]Örnek kaynak kodları[/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT]
[FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="]p.s:2. kaynak kodu,pararel programlamada anlattiğim cpi.exe nin kaynak kodudur.[/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT]
Pararel programlama birçok hesaplamalar içeren programi,büyük hesaplamari birden fazla işlemciye ve bilgisayara bölerek işlemimizin sonucunu daha kısa sürede ulaşmamızı sağlar.
Genellikle yazılan yazılımlar seri hesaplamalar icin yazılır.Tek bir işlem merkezi (CPU) ve tek bir bilgisayarda çalışmak üzere yazılır.Burda anlatacıgım şeyler prarel programlama üzerinedir.Birçok insanin hiçbilmediği bir dunyadir Aydınlatmak için Hazırladım bu dökümani..).
Neden pararel programlama kullanmalıyız avantajları nelerdir?
• Zaman veya paradan Tasarruf.
• Eşzamanlı çalışma sağlar
• Büyük problemleri çözer
• Lokal olmayan kaynaklarin kullanimini saglar
Pararel programlama genellikle c tabanlı dilleri kullanarak yapılır.
Bu dökümanda MPI programı kullanarak C de nasıl prarel programlama yapabiliriz onu anlatacagim..
MPI kütüphanelerini anlatmak cok zaman alır lakin aşşada linkini vereceğim kaynaktan öğrenebilirsiniz ,bu konu programlamayı öğretmek amacıyla değil programlamayı bilen kişilerin pararel programlamayı öğrenmesi amacıyla açılmıştır.
MPI programının hazırlanması ?
Başlat>tüm programlar [FONT="]> MPICH2 - > wmpiregister.exe [/FONT]
[FONT="]wmpiregister.exe e tıklıyoruz ekranda [/FONT][FONT="]MPIEEXEC – register wrapper[/FONT] gözükecektir.
Resimde gözüktüğü gibi password encrypted into the registry mesajini alırsanız.Kayıt işmeniniz tamamlanmıştır demektir root bilgisayardaki.Burda dikkat etmemiz gereken nokta Diğer pc dede aynı işlemi yapmamız gerekmektedir.Örneğin kullanıcı adını cybermafia şifreyide 123456 yaptik diyelim 2. pc mizdedeki kullanıcı adı ve şifremiz cybermafia:123456 olmalıdır.Başka bir önemli nokta;pararel programlama yapabilmemiz için windowsta kullanıcı hesabı yaratmalıyız kullanıcı adı cybermafia şifreside 123456 olacak şekilde.Başlat>Denetim Masası>Kullanıcı Hesapları ve Aile koruması>kullanıcı Hesapları>hesapları yönet>yeni hesap oluştur.
yönetici olarak oluşturmamız daha sağlıklı olacaktir.Kullanıcı adını cybermafia yapıp sonrada hesaba prola ekleyip ,parolayıda 123456 yaparsak mpich2 programının cybermafia accountunu kullanmasını sağlarız.Kısacasi [FONT="]MPIEEXEC – register wrapper da hangi parola ve şifreyi kullandıysak,o kullanıcı adı ve şifreyle windows accountu yaratmamız gerekmektedir.Ve bu işlemi kac tane bilgisayarda pararellemek istiyorsak okadar bilgisayarda yapmamız gerekiyor.[/FONT]
[FONT="] Kayıt işlemi ve winde account açma içlemimiz bitti.Sırada programı kullanma var;[/FONT]
[FONT="] Başlat >tüm programlar>MPIch2>[FONT="][FONT="]mpiexec.exe [/FONT][/FONT][/FONT]
[FONT="]mpiexec.exe e tıklıyoruz karşımıza alt resimdeki ekranın çıkması lazım.[/FONT]
mpich2 sagolsun bize ornek bir pararel programlama programı koymus onu calistirmamiz icin 3 noktaya (...) tıklayıp rresimde gözüktüğü gibi cpi.exe yi secmemiz lazım ,number of processi 1 yapiyoruz şuan işlemimizi tek bilgisayarda deniyoruz.Ve execute e tıklıyoruz.
bu ekran gelirse yani command prompt a bu ekran gelirse , tek islemcide hicbir sorunumuz yok programımız calisiyor demektir,eger calisiyorsa gerisi daha kolay.
2 işlemcide nasıl yapıyoruz?
resimdeki gibi dikkat etmemiz gereken sonuc pclerin adreslerini ve process sayımızı belirlemek
bunları yaptıktan sonra execute tusuna basiyoruz şu ekranın çıkması lazım;
eğer cıkarsa 2 pc de 2 farkli işlemcide programımızı çalıştırdık demektir..
Burda kullandığım MPI_HELLO.EXE yi direk olarak vermeyeceğim.kaynak kodunu vereceğim..Kaynak koduyla nasıl proje yaratırız nasıl exe haline getiririz aşşada anlatacağım
Microsoft C++ 6.0 da proje yaratma
1) [FONT="]MS Developer Studio - Visual C++ ı açalım.[/FONT]
[FONT="] 2)Create a new project yapalım[/FONT]
[FONT="]
[FONT="]3) project nami mizi girdikten sonra okleyip Finishleyip project wizardi kapatalım.[/FONT]
[FONT="] 4)Project>settings e tıklayalım[/FONT]
[FONT="] 5)Debug and realase i [FONT="][FONT="]multithreaded libraries e çevirmemiz lazım onuda resimli olarak anlattım.[/FONT][/FONT][/FONT]
[FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="]10)kaynak kodumuzu ekleyip build yapıyoruz.[/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT]
[FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="][FONT="]Örnek kaynak kodları[/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT][/FONT]
Kod:
[FONT="]/* This is an interactive version of cpi */[/FONT]
[SIZE=2] [FONT="]#include "mpi.h"[/FONT][/SIZE]
[SIZE=2] [FONT="]#include <stdio.h>[/FONT][/SIZE]
[SIZE=2] [FONT="]#include <math.h>[/FONT][/SIZE]
[SIZE=2] [FONT="]double f(double);[/FONT][/SIZE]
[SIZE=2] [FONT="]double f(double a)[/FONT][/SIZE]
[SIZE=2] [FONT="]{[/FONT][/SIZE]
[SIZE=2] [FONT="] return (4.0 / (1.0 + a*a));[/FONT][/SIZE]
[SIZE=2] [FONT="]}[/FONT][/SIZE]
[SIZE=2] [FONT="]int main(int argc,char *argv[])[/FONT][/SIZE]
[SIZE=2] [FONT="]{[/FONT][/SIZE]
[SIZE=2] [FONT="] int done = 0, n, myid, numprocs, i;[/FONT][/SIZE]
[SIZE=2] [FONT="] double PI25DT = 3.141592653589793238462643;[/FONT][/SIZE]
[SIZE=2] [FONT="] double mypi, pi, h, sum, x;[/FONT][/SIZE]
[SIZE=2] [FONT="] double startwtime = 0.0, endwtime;[/FONT][/SIZE]
[SIZE=2] [FONT="] int namelen;[/FONT][/SIZE]
[SIZE=2] [FONT="] char processor_name[MPI_MAX_PROCESSOR_NAME];[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Init(&argc,&argv);[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Comm_size(MPI_COMM_WORLD,&numprocs);[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Comm_rank(MPI_COMM_WORLD,&myid);[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Get_processor_name(processor_name,&namelen);[/FONT][/SIZE]
[SIZE=2] [FONT="] fprintf(stdout,"Process %d of %d is on %s\n",[/FONT][/SIZE]
[SIZE=2] [FONT="] myid, numprocs, processor_name);[/FONT][/SIZE]
[SIZE=2] [FONT="] fflush(stdout);[/FONT][/SIZE]
[SIZE=2] [FONT="] while (!done) {[/FONT][/SIZE]
[SIZE=2] [FONT="] if (myid == 0) {[/FONT][/SIZE]
[SIZE=2] [FONT="] fprintf(stdout, "Enter the number of intervals: (0 quits) ");[/FONT][/SIZE]
[SIZE=2] [FONT="] fflush(stdout);[/FONT][/SIZE]
[SIZE=2] [FONT="] if (scanf("%d",&n) != 1) {[/FONT][/SIZE]
[SIZE=2] [FONT="] fprintf( stdout, "No number entered; quitting\n" );[/FONT][/SIZE]
[SIZE=2] [FONT="] n = 0;[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] startwtime = MPI_Wtime();[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);[/FONT][/SIZE]
[SIZE=2] [FONT="] if (n == 0)[/FONT][/SIZE]
[SIZE=2] [FONT="] done = 1;[/FONT][/SIZE]
[SIZE=2] [FONT="] else {[/FONT][/SIZE]
[SIZE=2] [FONT="] h = 1.0 / (double) n;[/FONT][/SIZE]
[SIZE=2] [FONT="] sum = 0.0;[/FONT][/SIZE]
[SIZE=2] [FONT="] for (i = myid + 1; i <= n; i += numprocs) {[/FONT][/SIZE]
[SIZE=2] [FONT="] x = h * ((double)i - 0.5);[/FONT][/SIZE]
[SIZE=2] [FONT="] sum += f(x);[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] mypi = h * sum;[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);[/FONT][/SIZE]
[SIZE=2] [FONT="] if (myid == 0) {[/FONT][/SIZE]
[SIZE=2] [FONT="] printf("pi is approximately %.16f, Error is %.16f\n",[/FONT][/SIZE]
[SIZE=2] [FONT="] pi, fabs(pi - PI25DT));[/FONT][/SIZE]
[SIZE=2] [FONT="] endwtime = MPI_Wtime();[/FONT][/SIZE]
[SIZE=2] [FONT="] printf("wall clock time = %f\n", endwtime-startwtime); [/FONT][/SIZE]
[SIZE=2] [FONT="] fflush( stdout );[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] }[/FONT][/SIZE]
[SIZE=2] [FONT="] MPI_Finalize();[/FONT][/SIZE]
[SIZE=2] [FONT="] return 0;[/FONT][/SIZE]
[SIZE=2] [FONT="]}[/FONT][/SIZE]
