Paralel Programlama II (Parallel Programming II)

watch_later 3/03/2016
Linux  C++ Kodlarının Yazılması
Nano bir komut satırı editörü vi ya da bir grafik editörü olan gedit gibi bu editörler yardımıyla programları yazılıp, kaydetme imkanı sağlar.

Komutla eğer HelloWorld.cpp adlı dosya oluşmamışsa oluşturur varsa da üzerine yazılır. Ayrıca Linux’ta her ne kadar dosya uzantılarının bir önemi olmasa da C++ dosyalarının uzantısı derleme aşamasında hatayla karşılaşmamak için .cpp olmalıdır. 
[root@localhost ~]# nano HelloWorld.cpp


Nano Komut Satırı Editör Yapısı
Linux  C++ Kodlarının Derlenmesi
Editör yardımıyla yazılan programı derleyip çalıştırabilirsiniz. Bu işlem için Linux sisteminde kurulu bulunan g++ adlı C++ derleyicisinden faydalanılır.
[root@localhost ~]# g++ HelloWorld.cpp
[root@localhost ~]# ls
a.out Desktop HelloWorld.cpp install.log install.log.syslog

[root@localhost ~]# g++ HelloWorld.cpp –o output.x
[root@localhost ~]# ls
a.out Desktop HelloWorld.cpp install.log install.log.syslog output.x
Linux C++ Kodlarının Çalıştırılması
Derleme işlemi başarıyla sonlandırılır ise derleme yapılan dizinde a.out adında executable (çalıştırılabilir) bir dosya oluşur.  Bu dosya komut satırında çalıştırabilir.
[root@localhost ~]# ./a.out
Hello World!
[root@localhost ~]# ./output.x
Hello World!
argc ve argv Parametreleri

C++ kodlarında main fonksiyonu içinde kullanılan argc (argument count) adlı, int veri tipindeki ilk argüman programın çalıştırılması esnasında komut satırından girilen komutların/kelimelerin sayısını belirtir.
[root@localhost ~]#  ./output.x –n 15 –burak

Örnekte argc(argüman sayısı) 4 olarak değerlendirilir. Çalıştırılan programın adı da argüman sayısına eklenir.

C++ kodlarında main fonksiyonu içinde kullanılan argv parametresi ise komut satırından girilen parametrelere (karakter dizileri) pointer tutan bir dizidir.
Örnekte argv elemanları:
argv[0] = ./output.x
argv[1] = -n
argv[2] = 15
argv[3] = -burak
argv[1][0] = -    ve   argv[1][1] = n
argv[3][0] = - , argv[3][1] = b, argv[3][2] = u, argv[3][3] = r, argv[3][4] = a, argv[3][5] = k 
#include 
using namespace std;
int main(int argc, char* argv[ ])
{
 return 0;
}
Kod bloğu komut satırından çalıştırılan bir C++ programının argümanlarını alt alta ekrana basacaktır.
#include 
using namespace std;
int main(int argc, char* argv[ ])
{
 for(int i=0; i < argc; i++)
     printf(argv[i]); 
 return 0;
}

atoi ve atof Fonksiyonları
Komut satırından girilen her türlü parametre argv dizisi içerisinde string olarak saklanır. (Sayısal olarak girildiği düşünülen argümanlar bileBu yüzden bu parametrelerin sayısal değerlere dönüştürülmesi gerektiğinde atoi ve atof fonksiyonlarına ihtiyaç duyulur.

atoi (char *str): Fonksiyon kendine argüman olarak aldığı stringi integera çevirir.
atof (char *str): Fonksiyon kendine argüman olarak aldığı stringi ondalıklı sayıya(floating point) çevirir.

atoi ve atof fonksiyonlarını C++ programlarımızın içinde kullanabilmek için standart kütüphaneden <cstdlib> header dosyasını programımızın başına eklemeliyiz
#include 
using namespace std;
int main(int argc, char* argv[ ])
{
 int count=atoi(argv[1]);
 for(int i=0; i < count; i++)
    printf("Hello World!");
 return 0;
}
[root@localhost ~]#   ./a.out  5 
Hello World! 
Hello World!
Hello World!
Hello World!
Hello World!
C++ Programlarının Performans Analizleri
Çalıştırılabilir C++ programlarının CPU tarafından ne kadar sürede işletildiğini hesaplayan time adında bir Linux komutu vardır. time komutuna argüman olarak çalıştıracağımız executable dosyanın adı verilmelidir.
[root@localhost ~]#  time ./a.out  5 
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

real   0m0.002s
user  0m0.000s
sys    0m0.002s


real
Programın çalıştırılmaya başlandığı an ile çalışmasının bittiği an arasında geçen reel süredir. (Wall Clock Time) (Çalıştırılabilir dosyanın harddiskten belleğe getirilme süreside eklenir.)
user
CPUnun kullanıcının bir işlemini gerçekleştirmek üzere harcadığı zaman. (CPU Time)
sys
Sistem tarafından kullanılan toplam CPU süresidir. (İşletim sisteminin programı işletirken harcadığı CPU zamanıdır.)


Windows İşletim Sisteminde Program Performans Analizi
#include 
#include 
using namespace std;
int main(int argc, char* argv[ ])
{
 clock_t start, stop;
 double currentTime;
 start=clock();
   //Kod Bloğu
 stop=clock();
 currentTime =(stop – start )/(double)CLOCKS_PER_SEC;
 printf("Şimdiki zaman: %d\n",currentTime);      
 return 0;
}
Linux İşletim Sisteminde Program Performans Analizi
#include //sys/time
#include 
using namespace std;
int main(int argc, char* argv[ ])
{
 struct timeval currentTime;
 double start,stop,elapsedTime;
 
 gettimeofday(&currentTime, NULL); //devir süresi (sn)
 start=currentTime.tv_sec+(currentTime.tv_usec/1000000.0);   
   //Kod Bloğu
 gettimeofday(&currentTime, NULL); //devir süresi (sn)
 stop=currentTime.tv_sec+(currentTime.tv_usec/1000000.0); 
 //geçen süre hesaplanır
 elapsedTime = stop-start;
 printf("Gecen zaman (sn): %d\n",elapsedTime);  
 return 0;
}

Yazılan Hello World! uygulaması Kod Bloğunda çalıştırılırsa:
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Gecen zaman (sn): 0.000137091

Süre ölçümü için <sys / time.h> kütühanesi tanımlanmıştır. timeval iki integer bileşene sahiptir. Bileşenlerinden biri tv_sec 01/01/1970 tarihinden itibaren çalıştırılıdığı ana kadar tutulan saniye değeridir. Diğer bileşeni ise mikrosaniye değeridir. Ölçülen mikrosaniye 1000000 değerine bölünerek saniyeye eklenir. 



Bir sonraki yazımda görüşmek üzere...



sentiment_satisfied Emoticon