Programlama | Programlama Dilleri | C Programlama Dili |C++

Hata
  • XML Parsing Error at 1:82. Error 9: Invalid character


MPI ile Mandelbrot Setinin Çizimi

AÇIKLAMA
Bu program MPI dili ile Mandelbrot setinin çizim uygulamas?d?r.
Program içinde 3 adet klasor bulunmaktad?r.

MPI 'in nas?l tüm bilgisayarlara nas?l kurulaca?? ve gerekli ayarlar a?a??daki linkte anlat?lm??t?r.

 

Linki Görebilmeniz ?çin Üye Olman?z Gerekmektedir...

Üye Kay?t



Paralel MPI Kodlar? isimli klasör MPI kodunun ko?tu?u ve Dev-Cpp platformunda olu?turulmu?tur koddur.
MPI kutuphanesinin C++ Builder'da eklenmesi problem olu?turdu?undan dolay? Dev-Cpp seçilmi?tir.

Görsellik ?çin Ko?ulacak Program ve Kodlar? isimli klasör Mandelbrotun setinin çizimini göstermek
amaçl? kullan?lm??t?r.Ayr?ca çizim yap?ld?ktan zoom yapma i?lemi de bulunmaktad?r.Çizilen resimde
bir dikdörtgen seçmeye çal???n?z seçimi yaparken bir dikdörtgenin çizimi gösterilmeyecek fakat zoom yap?lan bolge yeniden çizilecektir. Ve iç içe yap?lan bütün seçimlerde mandelbrot setinin ayn? oldu?u görülecektir.
Bir kaç zoomdan sonra resimde bozulma olacakt?r nedeni ise kullan?lan say?sal sistemin bilgisayarla s?n?rl?
kalmas?d?r.Hiç bozulmayacak ?ekilde bir çizim yap?lmas? kendi tan?mlayaca??n?z bir say? sistemi ile mümkün
olabilir.

Kosulacak ?simli klasör ise program? ko?ma ?eklimizdir. Di?er iki klasördeki exeleri bulunduran bu klasör
tam payla??ma açarak Mandel ciz.exe yi çal??t?r?n?z.Çal??t?rd?ktan sonra programda gerekli ayarlar? yap?n?z.
Örnek Ko?ma:

Bilgisayar ?simleri: A?da  MPI kurulu olan bilgisayar isimleri hangilerinde ko?mak istenirse
bu bilgisayarlar?n a? isimlerini yazmaya dikkat ediniz.Server bilgisayarda da ko?ulmas? istenirse onunda ismi eklenmelidir.

PROCESS SAYISI: Tüm bilgisayarlar da ko?acak toplam process say?s?n? giriniz.Program otomatik olarak process
say?s?n? ko?ulacak toplam bilgisayar say?s?na bölerek(ana bilgisayar dahil) her birine uygun process say?s?
gönderecektir.Ko?ulan processleri Görev Yöneticisindeki i?lemler sekmesinde görebilirsiniz. Bütün bilgisayarlarda ko?an processleri bu ?ekilde görebilirsiniz.

Server Bilgisayar?n A? Üzerindeki ?smini Giriniz: Mandel Ciz.exe yi ko?tu?unuz bilgisayar?n a? ismini giriniz

Tam Payla??ma Aç?lacak MandelMpi.exe'nin ve Mandel Ciz.exe'nin Bulundu?u Klasörün A? Payla??m Ad?n? Giriniz:
Buda bizden indirdi?iniz dosya olan "Kosulacak" t?r. E?er payla??m ad?n? de?i?tirirseniz onu yazman?z gerekir.

Program?n Tamam?n? A?a??daki Linkten ?ndirebilirsiniz

Linki Görebilmeniz ?çin Üye Olman?z Gerekmektedir...

Üye Kay?t

 Program?n Görsellik ?çin Ko?ulan Kodu:

  1. //---------------------------------------------------------------------------
  2.  
  3. #include <vcl.h>
  4. #pragma hdrstop
  5. #include <stdio.h>
  6. #include "Unit1.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma resource "*.dfm"
  10. TForm1 *Form1;
  11. double x1=-2.0,y1=-2.0,x2=2.0,y2=2.0;
  12. int cx1,cx2,cy1,cy2;
  13. //---------------------------------------------------------------------------
  14. __fastcall TForm1::TForm1(TComponent* Owner)
  15.         : TForm(Owner)
  16. {
  17. }
  18. //---------------------------------------------------------------------------
  19. AnsiString Donustur(AnsiString a)
  20. {
  21. int pos;
  22. AnsiString r=a;
  23. if((pos=a.Pos(","))>0)
  24.   r=a.SubString(1,pos-1)+"."+a.SubString(pos+1,(a.Length()-pos-4
  25.   ));
  26. return r;
  27. }
  28.  
  29. void __fastcall TForm1::Button1Click(TObject *Sender)
  30. {
  31.  
  32.  int i,j;
  33.  int tut=StrToInt(Edit1->Text)/ListBox1->Items->Count;
  34.  String x="C:\\Program Files\\MPICH2\\bin\\mpiexec.exe -wdir \\\\";
  35.  x+=Edit3->Text;
  36.  x+="\\";
  37.  x+=Edit4->Text;
  38.  x+="\\ -hosts ";
  39.  x+=ListBox1->Items->Count;
  40.  x+=" ";
  41.  for(int k=0;k<ListBox1->Items->Count;k++)
  42.  {
  43.  x+=ListBox1->Items->Strings[k];
  44.  x+=" ";
  45.  x+=tut;
  46.  x+=" ";
  47.  }
  48.  
  49.  x+=" \\\\";
  50.  x+=Edit3->Text;
  51.  x+="\\";
  52.  x+=Edit4->Text;
  53.  x+="\\MandelMpi.exe "+Donustur(FloatToStr(x1))+" "+Donustur(FloatToStr(y1))+" "+Donustur(FloatToStr(x2))+" "+Donustur(FloatToStr(y2));
  54.  WinExec(x.c_str(),NULL);
  55. while((!FileExists("tamam.dat"))&&(!FileExists("sonuc.dat")));
  56.  
  57. FILE *ptr;  unsigned char ch;
  58. String yeap="\\\\";
  59. yeap+=Edit3->Text;
  60. yeap+="\\";
  61. yeap+=Edit4->Text;
  62. yeap+="\\";
  63. yeap+="sonuc.dat";
  64. ptr=fopen(yeap.c_str(),"rb");
  65. Graphics::TBitmap * Resim=new Graphics::TBitmap();
  66. Resim->Width=800;
  67. Resim->Height=600;
  68. for(i=0;i<600;i++)
  69.  for(j=0;j<800;j++)
  70.    {
  71.    fread(&ch,1,1,ptr);
  72.  
  73.     Resim->Canvas->Pixels[j][i]=TColor(RGB(ch,ch,ch));
  74.    }
  75.    fclose(ptr);
  76.    Image1->Picture->Bitmap=Resim;
  77.    DeleteFile("tamam.dat");
  78.    DeleteFile("sonuc.dat");
  79. }
  80. //---------------------------------------------------------------------------
  81.  
  82. void __fastcall TForm1::Image1MouseDown(TObject *Sender,
  83.       TMouseButton Button, TShiftState Shift, int X, int Y)
  84. {
  85. cx1=X;
  86. cy1=Y;
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
  90.       TShiftState Shift, int X, int Y)
  91. {
  92. cx2=X;
  93. cy2=Y;
  94. double tx1=x1+(double)(cx1)/(double)Image1->Width*(x2-x1);
  95. double tx2=x1+(double)(cx2)/(double)Image1->Width*(x2-x1);
  96. double ty1=y1+(double)(cy1)/(double)Image1->Height*(y2-y1);
  97. double ty2=y1+(double)(cy2)/(double)Image1->Height*(y2-y1);
  98. x1=tx1;
  99. x2=tx2;
  100. y1=ty1;
  101. y2=ty2;
  102. Button1Click(this);
  103. }
  104. //---------------------------------------------------------------------------
  105. void __fastcall TForm1::Button2Click(TObject *Sender)
  106. {
  107. x1=-2.0;
  108. x2=2.0;
  109. y1=-2.0;
  110. y2=2.0;
  111. ListBox1->Items->Clear();
  112. Edit1->Text="";
  113. Edit2->Text="";
  114. }
  115. //---------------------------------------------------------------------------
  116. void __fastcall TForm1::Button3Click(TObject *Sender)
  117. {
  118. ListBox1->Items->Add(Edit2->Text);
  119. Edit2->Text="";
  120. }
  121. //---------------------------------------------------------------------------
  122.  

Paralel Ko?an Program Kodu:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <mpi.h>
int MandelHesapla(double x,double y)
{
    int count=0,max=255;
    double temp;
    double zx=0;
    double zy=0;
    double length=0;
    while(length<4.0 && count<max)
    {
      temp=zx*zx-zy*zy+x;
      zy=2*zx*zy+y;
      zx=temp;
      length=zx*zx+zy*zy;
      count++;
    }
    return count;       
}
double xmin,ymin,xmax,ymax;
unsigned char mandel[480000];
int main(int argc, char *argv[])
{
   
  if(argc!=1 && argc!=5)
  {
    printf("Kullanimi : %s <xmin> <ymin> <xmax> <ymax>",argv[0]);
    exit(1);
  }
  if(argc==1)
  {
    xmin=-2.0;
    ymin=-2.0;
    xmax=2.0;
    ymax=2.0;
  }
  else
  {
    xmin=atof(argv[1]);
    ymin=atof(argv[2]);
    xmax=atof(argv[3]);
    ymax=atof(argv[4]);
  }
 
  int numaram,boyut,i,satirno;
  MPI_Status status;
  MPI_Init(&argc,&argv);
  MPI_Comm_size(MPI_COMM_WORLD,&boyut);
  MPI_Comm_rank(MPI_COMM_WORLD,&numaram);
 
  if(numaram==0)
  {
    for(i=0;i<boyut-1;i++)
      MPI_Send(&i,1,MPI_INT,i+1,1,MPI_COMM_WORLD);
    for(i=boyut-1;i<600;i++)
    {
      int procno;
      MPI_Recv(&satirno,1,MPI_INT,MPI_ANY_SOURCE,1,MPI_COMM_WORLD,&status);
   
 
      MPI_Recv(mandel+satirno*800,800,MPI_CHAR,status.MPI_SOURCE,1,MPI_COMM_WORLD,&status);
   
     
      MPI_Send(&i,1,MPI_INT,status.MPI_SOURCE,1,MPI_COMM_WORLD);
  
 
    }
 
    for(i=0;i<boyut-1;i++)
    {
      MPI_Recv(&satirno,1,MPI_INT,MPI_ANY_SOURCE,1,MPI_COMM_WORLD,&status);
      MPI_Recv(&mandel[satirno*800],800,MPI_CHAR,status.MPI_SOURCE,1,MPI_COMM_WORLD,&status);
      MPI_Send(&i,1,MPI_INT,status.MPI_SOURCE,2,MPI_COMM_WORLD);
    }
 
    FILE * fp,*tr;
    fp=fopen("sonuc.dat","wb");
    fwrite(mandel,480000,1,fp);
    fclose(fp);
    tr=fopen("tamam.dat","wb");
    fclose(tr);
   
  }
  else
  {
      bool tamam=false;
      unsigned char hesap[800];
      int numara;
      while(!tamam)
      {
        MPI_Recv(&numara,1,MPI_INT,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);//Sat?r numaras?n? al
        if(status.MPI_TAG!=2)
        {
        double xartis=(xmax-xmin)/800.0;
        double y=ymin+(double)numara*(ymax-ymin)/600.0;
        double x;
        for(x=xmin,i=0;i<800;i++,x+=xartis)
        {
          hesap[i]=MandelHesapla(x,y);
        }
     
        MPI_Send(&numara,1,MPI_INT,0,1,MPI_COMM_WORLD);
  
        MPI_Send(hesap,800,MPI_CHAR,0,1,MPI_COMM_WORLD);
  
        }
        else
        {tamam=true;}
      }
  }
MPI_Finalize();
printf("Bitti\n");
}
 

Yorumlar (0)
Sadece kayıtlı kullanıcılar yorum yazabilir!
Son Güncelleme ( Perşembe, 07 Nisan 2011 23:24 )  
404 Not Found

404

Not Found

The resource requested could not be found on this server!


Proudly powered by LiteSpeed Web Server

Please be advised that LiteSpeed Technologies Inc. is not a web hosting company and, as such, has no control over content found on this site.