Floyd(En kısa yol bulma) Paralel Algoritması

Floyd(En kısa yol bulma) Paralel Algoritması

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ı

mpich2 programının kurulduktan sonraki 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

Rasim Çekik demiş ki;
08.12.2012

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