Paralel Programlamaya Giriş

Slides:



Advertisements
Benzer bir sunumlar
Nesneye Yönelik Programlama
Advertisements

Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
SINIFLAR Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
C PROGRAMLAMA DİLİNE GİRİŞ
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Bölüm 2 C Dilinin Temelleri
Nesneye Yönelik Programlama
C Programlama Diline Giriş
Atama ve Girdi/Çıktı Komutları
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
C++’A GİRİŞ Yılmaz Kılıçaslan.
Bölüm 10 Yapılar ve Birleşimler
Nesneye Yönelik Programlama
INPUT/OUTPUT FORMATİNG
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Nesneye Dayalı Programlama
Program Kontrol İfadeleri
Fonksiyonlar.
C++ Yapısı Giriş-Çıkış Komutları Döngü Komutları
MPI İle Paralel Programlama Tunahan Altıntop
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
Paralel Programlamaya Giriş
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
JAVA İLE PROGRAMLAMAYA GİRİŞ
BM-103 Programlamaya Giriş Güz 2014 (7. Sunu)
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
C++’a Giriş Yılmaz Kılıçaslan.
C++ Ders Notları 2.Ders (Dilin Yapısı)
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
C++ Ders Notları 3.Ders (String İşlemleri)
C++.
BM-103 Programlamaya Giriş Güz 2014 (9. Sunu)
Paralel Programlamaya Giriş
Paralel Programlamaya Giriş 2
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
2. HAFTA 2. Hafta.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
3. HAFTA 3. Hafta.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
BİLGİSAYAR programlama II
Veri yapıları Hafta3 Dizi Yapıları.
BİLGİSAYAR programlama II
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BM-308 Paralel Programlamaya Giriş Bahar 2016 (1. Sunu) (Yrd. Doç. Dr. Deniz Dal)
Bilgisayar Programlama III C
Hafta2 Rekürsif Algoritmalar
BM-308 Paralel Programlamaya Giriş Bahar 2016 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Paralel Programlamaya Giriş
C Programlama Dili Bilgisayar Mühendisliği.
C’de Fonsiyonlar Aslı Ergün.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
Paralel Programlamaya Giriş
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
Sunum transkripti:

Paralel Programlamaya Giriş BM-308 Paralel Programlamaya Giriş Bahar 2015 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)

YAZDIĞIMIZ C++ PROGRAMLARININ PERFORMANSININ ÖLÇÜLMESİ Yazdığımız ve executable haline dönüştürdüğümüz C++ programlarımızın CPU tarafından ne kadar sürede işletildiğini bizim için hesaplayan time adında bir Linux komutu vardır. time komutuna argüman olarak çalıştıracağımız executable dosyanın adını ve varsa eğer dosyanın komut satırı parametrelerini vermeliyiz. Örnek: $man time Örnek: $time ./a.out Örnek: $time ./cikti.x Örnek: $time ./cikti.x 100 Örnek: $time ./cikti.x -n 100 ÖRNEK ÇIKTI real 0m2.398s user 0m2.376s sys 0m0.018s

time KOMUTU ÇIKTISI 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) (Executable dosyanızın harddiskten belleğe getirilmesi de süre alır.) user CPU’nun kullanıcının işini gerçekleştirmek üzere harcadığı zaman. (CPU Time) sys Sistem tarafından kullanılan toplam CPU süresi. (İşletim sisteminin sizin programınızı işletirken harcadığı CPU zamanı. Örneğin I/O işlemlerinin gerçekleştirilmesi.)

C++ Programlarında Zaman Ölçümü (Windows) #include <ctime>//clock_t, clock() ve CLOCKS_PER_SECOND #include <iostream>//cout using namespace std; int main(int argc, char* argv[ ]) { clock_t baslangicZamani, bitisZamani; double gecenZaman; baslangicZamani=clock(); ////Süresini Ölçmek İstediğiniz Program Burada//// bitisZamani=clock(); gecenZaman=((double)bitisZamani -(double)baslangicZamani)/CLOCKS_PER_SEC; cout<< "Total Time Taken (saniye cinsinden): " <<gecenZaman<<endl; return 0; }

C++ Programlarında Zaman Ölçümü (Linux) #include <sys/time.h>//struct timeval, gettimeofday #include <iostream>//cout using namespace std; int main(int argc, char* argv[ ]) { struct timeval currentTime; double startTime,endTime,elapsedTime; // Get the current time. 2nd argument NULL because we don't care about time zone gettimeofday(&currentTime, NULL); //Seconds from the epoch time startTime=currentTime.tv_sec+(currentTime.tv_usec/1000000.0); ////Süresini Ölçmek İstediğiniz Program Burada//// // Get the current time endTime=currentTime.tv_sec+(currentTime.tv_usec/1000000.0); // Calculate the elapsed time in seconds elapsedTime = endTime-startTime; cout << "Total Time Taken (saniye cinsinden): " << elapsedTime<< endl; return 0; } int gettimeofday(timeval *tp, NULL) include: <sys/time.h> Note In C programs (as opposed to C++) the word "struct" must appear before "timeval". Gets the time of day. The parameter must be a pointer to a previously declared timeval variable (or in C, a struct timeval variable). This struct type is also defined in <sys/time.h>. A timeval has two components, both ints. One (called tv_sec) is exactly the value that would be returned by time, the time in seconds since 1/1/1970. The other (called tv_usec) is the number of microseconds into that second. Don't be fooled: although the units are microseconds, the value is nothing like that accurate. On many systems, 10000 is added 100 times per second. Example: timeval tim; gettimeofday(&tim, NULL); double t1=tim.tv_sec+(tim.tv_usec/1000000.0); do_something_long(); gettimeofday(&tim, NULL); double t2=tim.tv_sec+(tim.tv_usec/1000000.0); printf("%.6lf seconds elapsed\n", t2-t1); The second parameter (NULL) used to be to retrieve the local time zone, but time zones are no-longer handled that way.

Tek Boyutlu Bir Dizinin Dinamik Olarak Oluşturulması (Allocation) ve Yok Edilmesi (Deallocation) //Allocation int *diziPtr=new int[diziBoyutu]; //Deallocation delete [ ] diziPtr;

Tek Boyutlu Dinamik Bir Dizinin Elemanlarına Değer Atanması for(int i=0;i<diziBoyutu;i++) diziPtr[i]=rand()%2015; //*(diziPtr+i)=rand()%2015;

Matrislerin Dinamik Olarak İki Boyutlu Oluşturulması //First Dimension (Rows) int **matrixPtr=new int*[rowSizeOfMatrix]; //Second Dimension (Columns) for(int i=0;i<rowSizeOfMatrix;i++) matrixPtr[i]=new int[columnSizeOfMatrix];

Dinamik Olarak ve İki Boyutlu Oluşturulmuş Bir Matrisin Elemanlarına Değer Atanması for(int i=0;i<rowSizeOfMatrix;i++) for(int j=0;j<columnSizeOfMatrix;j++) matrixPtr[i][j]=rand()%2015; //*(*(matrixPtr+i)+j);

Dinamik Olarak Oluşturulmuş İki Boyutlu Matrislerin Yok Edilmesi //Deallocate Columns for(int i=0;i<rowSizeOfMatrix;i++) delete [ ] matrixPtr[i]; //Deallocate Rows delete [ ] matrixPtr;

Matrislerin Dinamik Olarak Tek Boyutlu Oluşturulması ve Matris Elemanlarına Değer Atanması int *matrixPtr=new int[rowSizeOfMatrix*columnSizeOfMatrix]; int matrixIJ; for(int i=0;i<rowSizeOfMatrix;i++) for(int j=0;j<columnSizeOfMatrix;j++) { matrixIJ=i*columnSizeOfMatrix+j; matrixPtr[matrixIJ]=rand()%2015; }

UYGULAMA Kullanıcıdan komut satırı üzerinden 2 argüman alacak bir C++ programı yazınız. Kullanıcıdan alınan 1. argüman bir tam sayıdır. Bu tam sayı dinamik olarak oluşturulacak ve içinde integer değerler saklayacak olan tek boyutlu bir dizinin eleman sayısıdır. Kullanıcıdan alınan 2. argüman dizinin içerisine atanacak olan rastgele tam sayıların üst limitidir. Yazacağınız C++ programı söz konusu dizinin içini rastgele tam sayılarla doldurduktan sonra dizinin en büyük elemanını bularak ekrana yazdırmalıdır. Komut satırının 1. argümanı olarak 10 veya daha küçük bir sayı girilmişse eğer dizinin elemanları da ekrana bastırılmalıdır. Programınızı komut satırından derleyiniz ve çalıştırınız. Çalışma zamanını tespit ediniz.

HATIRLATMA C++ ta rastgele sayı üretmek için kullanılan rand ve srand fonksiyonları <cstdlib> kütüphanesi içinde tanımlıdır. srand fonksiyonuna zamanı çekirdek (seed) olarak verebilmek için time fonksiyonu 0 parametresi ile (time(0)) kullanılmalıdır. Bu fonksiyon <ctime> kütüphanesi içinde tanımlıdır.