Paralel Programlamaya Giriş

Slides:



Advertisements
Benzer bir sunumlar
String Diziler(Katarlar)
Advertisements

Bölüm 10 Yapılar ve Birleşimler
Nesneye Yönelik Programlama
Paralel Programlamaya Giriş
Paralel Programlamaya Giriş
Paralel Programlamaya Giriş 2
Paralel Programlamaya Giriş
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İLGİSAYAR programlama II
Hafta2 Rekürsif Algoritmalar
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BM-308 Paralel Programlamaya Giriş Bahar 2016 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
BÖLÜM 4 PROGRAMLAMA DİLLERİ. PROGRAMLAMA DİLLERİNDE KULLANILAN VERİ TİPLERİ Bilgisayarda işlenen veriler iki türdür: Sayısal Alfasayısal.
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
TC Windows Editörü DevC++. KURULUM PROGRAMIN KURULACAĞI YER BURADA BELİRLENİYOR.
9. HAFTA 25 Nisan2016. Fonksiyon M-Dosyaları Fonksiyon dosyaları ilk satırda “function” kelimesi bulunan “.m” uzantısı bulunan dosyalardır. MATLAB içinde.
PHP Nedir? ● Bir web sayfası oluşturabilmeniz için: ● HTML kullanmalısınız. ● Sayfadaki etkileşimi artırmak için ● JavaScript/VBScript ● Görselliği bütün.
Bağlama ve Kapsam Kavramları
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
Bölüm 5 Döngü Komutları while Komutu while Komutu Diğer Operatörler (Bileşik atama, artırma ve azaltma operatörleri ) Diğer Operatörler (Bileşik atama,
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
ÇOK BOYUTLU SİNYAL İŞLEME
BSM208 PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Dil Çevrimi (Hafta4) 1.
Bölüm 2 C Dilinin Temelleri
BİLGİSAYAR PROGRAMLAMA DERSİ
DOSYA YÖNETİMİ MUSTAFA TEZCAN MART, 2017.
Algoritma ve Programlamaya Giriş
C’de Fonsiyonlar Aslı Ergün.
BM-103 Programlamaya Giriş Güz 2016 (3. Sunu)
BM-103 Programlamaya Giriş Güz 2016 (8. Sunu)
BM-103 Programlamaya Giriş Güz 2016 (7. Sunu)
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ı.
Veri Yapıları ve Algoritmalar
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H05
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BM-103 Programlamaya Giriş Güz 2016 (11. Sunu)
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı
Algoritma ve Programlamaya Giriş
Delphi Ders5 Asli Ergün.
NBP103 Programlama Temelleri Öğr. Gör. Mahmut Kılıçaslan
Temel Bilgisayar Bilgileri
BMS-301 Kabuk Programlama Güz 2017 (7. Sunu) (Yrd. Doç. Dr. Deniz Dal)
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
ARDUİNO Arduino Eğitimleri Bölüm 4 Programlama Dili Temelleri - II
Bilgisayar Programlamasına ve Veri Analizine Giriş
BİLGİSAYAR programlama II
BİLGİSAYAR programlama II
NİŞANTAŞI ÜNİVERSİTESİ
Arduino Programlama Dili
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
Bölüm 4: Kontrol Yapıları I (Seçim Yapma)
TEKNOLOJİ VE TASARIM DERSİ 7.D.1. Özgün Ürünümü Tasarlıyorum.
Fonksiyonlar ve Alt Programlar
6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ
Bilgisayar Bilimi Fonksiyon Yazma.
Değerler ve Değişkenler
NİŞANTAŞI ÜNİVERSİTESİ
GRAFİK Basit grafik işlemlerinin gerçekleştirilmesi
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
NİŞANTAŞI ÜNİVERSİTESİ
MTM216 GÖRSEL PROGRAMLAMA
MTM216 GÖRSEL PROGRAMLAMA
İleri Algoritma Analizi
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Algoritmalar ve Programlama II Ders 11: Kalıtım
Sunum transkripti:

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

LİNUX ORTAMINDA C++ KODLARININ YAZILMASI, DERLENMESİ VE ÇALIŞTIRILMASI İlk aşamada .cpp uzantılı bir C++ program dosyası oluşturunuz. Bu işlemi touch komutu ile yapabilirsiniz. Örnek: $touch HelloWorld.cpp Daha sonra ya bir komut satırı editörü (vi veya nano gibi) ya da bir grafik editörü (gedit gibi) yardımıyla programınızı yazınız ve kaydediniz. Artık programınızı derleyip çalıştırabilirsiniz. Bu işlem için bizim sistemimizde kurulu bulunan g++ adlı C++ derleyicisinden faydalanabilirsiniz. Örnek: $g++ HelloWorld.cpp

LİNUX ORTAMINDA C++ KODLARININ YAZILMASI, DERLENMESİ VE ÇALIŞTIRILMASI Derleme işlemi başarıyla sonlandırılır ise eğer derlemeyi yaptığınız dizinde a.out adında executable (çalıştırılabilir) bir dosya oluşur. Bu dosyayı komut satırından aşağıdaki gibi çalıştırabilirsiniz. (Programınızın komut satırı argümanı almadığını varsayıyorum.) Örnek: $./a.out Eğer programınızın a.out dışında bir executable dosya adıyla çalıştırılmasını istiyorsanız programınızı şöyle derlemelisiniz. Örnek: $g++ HelloWorld.cpp -o cikti.x Örnek: $./cikti.x

UYGULAMA 1 Kullanıcıdan ekrana kaç kere Hello World yazacağını klavye yoluyla cout ve cin deyimleri ile alan bir C++ programı yazınız, derleyiniz ve calıştırınız. (main fonksiyonu kendine argüman almıyor.) (Dosya adı olarak HelloWorld1.cpp kullanabilirsiniz.)

argc ve argv Parametreleri int main() { return 0; } int main(int argc, char* argv[ ]) { return 0; }

argc ve argv Parametreleri (devam) 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. Örnek: $ ./cikti.x -n 100 Yukarıdaki örnekte argc 3 olarak değerlendirilir. Çalıştırılan programın adı da (./cikti.x) argc nin sayısına katkıda bulunur.

argc ve argv Parametreleri (devam) main fonksiyonu içinde kullanılan argv parametresi ise komut satırından girilen parametrelere (karakter dizileri) pointer tutan bir dizidir. Örnek: $ ./cikti.x -n 100 Yukarıdaki örnekte argv[0] = ./cikti.x argv[1] = -n argv[2] = 100 argv[1][0] = - ve argv[1][1] = n

ÖRNEK Aşağıdaki kod parçası komut satırından çalıştırılan bir C++ programının argümanlarını ekrana basar. Argumanlar.cpp #include <iostream>//cout using namespace std; int main(int argc, char* argv[ ]) { for(int i=0; i < argc; i++)    cout<<argv[i]<<endl; return 0; }

atoi ve atof Fonksiyonları Komut satırından girilen her türlü parametre argv dizisi içerisinde string (karakter dizisi) olarak saklanır. (Rakam olarak girildiği düşünülen argümanlar bile.) Yani bütün bu parametreler karakter dizileridir aslında. Bu yüzden bu parametrelerin rakamlara dönüştürülmesi gerektiğinde atoi ve atof fonksiyonlarına ihtiyaç duyulur. atoi (char *str): fonksiyonu kendine argüman olarak aldığı string i integer a çevirir. atof (char *str): fonksiyonu kendine argüman olarak aldığı string i ondalıklı sayıya çevirir. (floating point) 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 <cstdlib>

ÖRNEK for (i=1; i<argc; i++) { if (argv[i][0] == '-') Aşağıdaki C++ kod parçası ne iş yapar? for (i=1; i<argc; i++) { if (argv[i][0] == '-') if (argv[i][1] == 'n') count=atoi(argv[++i]); break; }

UYGULAMA 2 Kullanıcıdan ekrana kaç kere Hello World yazacağını komut satırından argüman olarak alan bir C++ programı yazınız, derleyiniz ve calıştırınız. (main fonksiyonu kendine argüman alıyor.) (Dosya adı olarak HelloWorld2.cpp kullanabilirsiniz.)

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ü (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 3 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.