Aşağıda floyd algoritması ile çölülen en kıssa yol bulma probleminin paralel programlama ile kodlaması mevcuttur.#include
#include
#include
int main(int argc, char** argv)
{
int MyRank, NumProcs, i, n, first, last, prod=1, result=1, Root=0,a[100][100],b[100][100],k,r,j,m;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &MyRank);
MPI_Comm_size(MPI_COMM_WORLD, &NumProcs);
if(MyRank == Root)
{
for (i=1; i<=3; i++)
for (j=1; j<=3;j++)
{
printf("%d. satir %d. sutun degerini giriniz\n",i,j);
scanf("%d",&a[i][j]);
}
}
for(m=1;m<=3;m++)
{
MPI_Bcast(&a, 1, MPI_INT, Root, MPI_COMM_WORLD);
first = (MyRank*9)/NumProcs;
last = ((MyRank+1)*9)/NumProcs;
//Last is the first element of the next processor
for(i=first+1; i<=last; i++)
{
r=i%3;
if(r!=0)
{
k=i/3+1;
r=i%3;
}else
{
k=i/3;
r=3;
}
if(a[k][r]>a[k][m]+a[m][r])
a[k][r]=a[k][m]+a[m][r];
else
a[k][r]=a[k][r];
}
MPI_Reduce(&a, &result, 1, MPI_INT, MPI_PROD, Root, MPI_COMM_WORLD);
printf("\nm=%d icin matrisimiz ", m);
if(MyRank == Root)
for(i=1;i<=3;i++)
{printf("\n ");
for(j=1;j<=3;j++)
printf("\t%d ", a[i][j]);
}
printf("\n ");
}
MPI_Finalize();
return 0;
}
Paralel Programlama Aşamaları
-visual studio programı açılır..
-yeni proje ekle den visual c++ kısmındaki win32 sekmesine gelinir ve win32 Console Application seçilir..
-gelen sayfada empty project seçilir..
-açılan projede, Source Files a sağ tıklanır Add->New Item seçilir..
-gelen sayfada C++File(.cpp) seçilip devam edilir..
-projemize sağ tıklayarak properties seçilir..
-Configuration -> All Configurations seçiliyken C/C++ -> General -> Additional Include Directories e mpich2 nin include klasörü eklenir
-Configuration -> All Configurations seçiliyken linker -> general -> Additional library Directories e mpich2 nin lib klasörü eklenir
-Configuration -> active(debug) seçiliyken c/c++ -> code generation -> runtime library -> multi-threaded debug yapılır
-Configuration -> debug seçiliyken, linker -> input -> additional dependencies -> cxxd.lib ve mpi.lib eklenir
-Configuration ->release seçiliyken, c/c++ -> code generation -> runtime library -> multi threaded yapılır
-Configuration ->active(release) seçiliyken, linker -> input -> additional dependencies -> cxx.lib ve mpi.lib eklenir
-projemize kod girilir ve çalıştırma seçeneği release seçilir..
-çalıştırıldıktan sonra oluşan exe uzantılı dosya mpich2 nin bin klasörüne kopyalanır..
-exe uzantılı dosyayı çalıştırmak için,başlat -> çalıştır -> cmd yazılır..
-gelen sayfada mpich2 nin bin klasörüne cd ve cd.. komutları kullanılarak erişilir..
-son komut ise; mpiexec -localonly -n işlemci_sayısı exe_uzantılı_dosyanın_ismi şeklindedir..
Her türlü sorularınız cevaplanacaktır.
Yorumlar1
Merhaba Hocam yazdığınız kodun acıklamısnı alma imkanımız varmı.Şimdiden tesekürler.
Yorumlarınızı Bekliyoruz
Yorum Yazın
Yorum Yapın