+
GRAFİK İŞLEM BİRİMİNDE YERALTI SU KAYNAKLARININ MODELLENMESİNDE KULLANILMAK
ÜZERE PRECONDITIONED CONJUGATE GRADIENT ALGORİTMASI GERÇEKLEŞTİRİMİ
IMPLEMENTATION OF PRECONDITIONED CONJUGATE GRADIENT ALGORITHM FOR
GROUNDWATER MODELLING ON GRAPHICAL PROCESSING UNIT
YİĞİTCAN AKSARI
Hacettepe Üniversitesi
Lisansüstü Eğitim – Öğretim ve Sınav Yönetmeliğinin
BİLGİSAYAR Mühendisliği Anabilim Dalı İçin Öngördüğü
YÜKSEK LİSANS TEZİ
olarak hazırlanmıştır.
2010
ÇOK ÇEKİRDEKLİ MİMARİDE YERALTI SU KAYNAKLARININ ANALİZİ VE MODELLENMESİNDE
KULLANILMAK ÜZERE BİR UYGULAMA TASARIMI VE GERÇEKLEŞTİRİMİ
DESIGN AND IMPLEMENTATION OF AN APPLICATION FOR GROUNDWATER ANALYSIS AND MODELLING ON
MULTIPROCESSOR ARCHITECTURE
YİĞİTCAN AKSARI
Hacettepe Üniversitesi
Lisansüstü Eğitim – Öğretim ve Sınav Yönetmeliğinin
BİLGİSAYAR Mühendisliği Anabilim Dalı İçin Öngördüğü
YÜKSEK LİSANS TEZİ
olarak hazırlanmıştır.
2010
Fen Bilimleri Enstitüsü Müdürlüğü’ne,
Bu çalışma jürimiz tarafından BİLGİSAYAR MÜHENDİSLİĞİ ANABİLİM DALI’nda YÜKSEK LİSANS TEZİ olarak kabul edilmiştir.
Başkan : ...............................................
(Prof.Dr. Ali Saatçi)
Üye (Danışman) : ...............................................
(Yrd.Doç.Dr. Harun Artuner)
Üye : ...............................................
(Yrd.Doç.Dr. Levent Tezcan)
Üye : ...............................................
(Yrd.Doç.Dr. Kayhan İMRE)
Üye : ...............................................
(Dr. Ahmet Burak CAN)
ONAY
Bu tez ...../...../..... tarihinde Enstitü Yönetim Kurulunca kabul edilmiştir.
Prof.Dr. Adil Denizli
FEN BİLİMLERİ ENSTİTÜSÜ
MÜDÜRÜ
...,
i
BAŞLIK
Yiğitcan AKSARI
ÖZ
Conjugate Gradient yöntemi doğrusal denklem dizgelerinin çözümünde kullanılan
bir sayısal çözümleme algoritmasıdır. Yöntemin yakınsamasını hızlandırmak
amacıyla preconditioner’lar geliştirilmiştir. Preconditioned conjugate gradient
yöntemi doğrudan yöntemlerle çözülmesi zor sorunların çözülmesinde etkin bir
şekilde kullanılmaktadır. Yeraltı su kaynaklarının modellenmesi de bu sorunlardan
biridir.
Bu yöntemlerin hızlandırılması büyük zaman tasarrufu sağlamaktadır, fakat
bilgisayar kümeleri ile yapılan gerçekleştirimler küçük bir kesimin erişiminde
olabilmektedir. Vektör bilgisayar benzeri yapılara sahip olan Grafik İşlem
Birimleri(GİB) kullanarak ise bu hızlanmaların ucuz maliyetle son kullanıcıya
ulaştırılması mümkündür.
Tez çalışmasında iki preconditioning algoritması ile çalışabilen conjugate gradient
yöntemi GİB üzerinde gerçekleştirilmiştir. Yeraltı su kaynaklarının
modellenmesinde kullanılan MODFLOW uygulaması ile bütünleştirilmiş halde
geliştirilen yöntem mevcut uygulama ile karşılaştırılmış ve başarım açısından
incelenmiştir.
Anahtar Kelimeler: CUDA, Koşut Programlama, Conjugate Gradient Yöntemi,
Sonlu Fark Yöntemi
Danışman: Yrd. Doç. Dr. HARUN ARTUNER, Hacettepe Üniversitesi, Bilgisayar
Mühendisliği Bölümü
ii
BAŞLIK
Yiğitcan AKSARI
ABSTRACT
….
Keywords: CUDA, Parallel Programming, Conjugate Gradient Method, Finite
Difference Method
Advisor: Asst. Professor HARUN ARTUNER, Hacettepe University, Department of
Computer Engineering.
iii
TEŞEKKÜR
...
iv
İÇİNDEKİLER DİZİNİ
Sayfa
ÖZ i ABSTRACT ............................................................................................................. ii TEŞEKKÜR ............................................................................................................ iii
İÇİNDEKİLER DİZİNİ ............................................................................................. iv
ÇİZELGELER DİZİNİ ............................................................................................. ix
SİMGELER VE KISALTMALAR DİZİNİ .................................................................. x
1. GİRİŞ ........................................................................................................ 1
2. GRAFİK İŞLEM BİRİMLERİ İLE KOŞUT PROGRAMLAMA ................... 3
2.1. Grafik İşlem Birimlerinin Tarihsel Gelişimi ..................................................... 3
2.2. GİB Mimarisi ................................................................................................. 5
2.3. Örnek Bir GİB Mimarisi - CUDA .................................................................... 5
2.3.1. Nvidia GeForce GTX 200 Mimarisi ...................................................... 6
2.3.1.1. Warp İçi Dallanmaların Etkileri ...................................................... 7
2.3.1.2. Single Instruction Multiple Thread (SIMT) ..................................... 8
2.3.2. CUDA Programlama Modeli................................................................. 8
2.3.2.1. İş Parçacığı Sıradüzeni ................................................................. 9
2.3.2.2. Bellek Sıradüzeni ........................................................................ 11
3. MODELLEME ......................................................................................... 14
3.1. Örnek çalışma: Yeraltı Su Kaynaklarının Bilgisayar Yardımıyla
Modellenmesi ..................................................................................................... 14
3.2. Yeraltı Su Kaynaklarının Modellenmesinde Kullanılan Yazılımlar ............... 14
3.2.1. MODFLOW ........................................................................................ 14
3.2.2. Diğer Yazılımlar ................................................................................. 14
3.3. Yeraltı Su Akışı Denklemlerinin Çözümünde Kullanılan Yöntemler ............ 15
3.3.1. Preconditioned Conjugate Gradient Yöntemi ..................................... 15
v
Yeraltı su kaynaklarının modellenmesinde, kısmi diferansiyel denklemler
çözümünde kullanılan sonlu fark ve sonlu eleman metodları da bu
özelliklere sahip sistemler oluşturur [1]. ...................................................... 15
3.3.1.1. Modified Incomplete Cholesky Preconditioner(MICCG) .............. 17
3.3.1.2. Least-squares Polynomial Preconditioner (POLCG) ................... 18
4. GERÇEKLEŞTİRİM................................................................................ 20
4.1. Sonlu Fark Yöntemi .................................................................................... 20
4.2. Conjugate Gradient Gerçekleştirimi ............................................................ 20
4.2.1. Conjugate Gradient Yönteminde Bellek ve İşlem İyileştirmeleri ......... 20
4.2.2. Conjugate Gradient Yönteminde Matrislerin Bellekte Saklanma Şekli21
4.2.3. P'nin hesaplanması............................................................................ 23
4.2.4. A Matrisi ile P vektörünün çarpılıp V'de saklanması ve PAP ile
ALPHA'nın hesaplanması.............................................................................. 24
4.2.5. Head ve Residual vektörlerinin hesaplanması ve en büyük değerlerinin
saklanması ..................................................................................................... 25
4.2.6. Kayan Noktalı Sayılarla Birikimli Toplama Gerçekleştirimi ................. 25
4.2.6.1. Kayan Noktalı Sayılarla Birikimli Toplama Hataları ..................... 26
4.2.6.2. GİB’de Kayan Noktalı Sayıların Birikimli Toplanması .................. 27
4.2.6.3. Kayan Noktalı Sayıların Toplanmasının Hız ve Hassasiyet
Açısından GİB ve AİB’nin Karşılaştırılması ................................................. 28
4.3. MICCG ........................................................................................................ 30
4.3.1. Forward ve Back Substitution Gerçekleştirimi.................................... 31
4.3.2. Forward Substitution’ın üç boyutlu sonlu fark yöntemi için koşut
çözülmesi ....................................................................................................... 33
4.3.3. Modelin GİB üzerinde yerleştirimi ...................................................... 33
4.3.4. Modelin GİB üzerindeki yerleştirimine bağlı yöntemler ...................... 34
4.3.4.1. Satır-sütun-katman(SSK) yerleştirimi .......................................... 35
vi
4.3.4.2. Katman-satır-sütun(KSS) yerleştirimi .......................................... 36
4.3.4.3. Yerleştirim yöntemlerinin başarımlarının karşılaştırılması ........... 37
4.3.4.4. Modelin GİB üzerinde yerleştirimi hakkında sonuçlar .................. 40
4.3.4.5. Modelin blok içinde yerleştirimi .................................................... 40
4.3.4.6. Blok içi yerleştirimde koşutluğun arttırılması için kullanılan
yöntemler .................................................................................................... 41
4.3.4.7. Blok içi yerleştirim yöntemlerinin karşılaştırılması ....................... 44
4.3.5. Modelin GİB üzerindeki yerleştiriminden bağımsız bir yöntem........... 46
4.3.5.1. GİB yerleşiminden bağımsız yöntemin başarımı ve diğer
yöntemlerle karşılaştırılması ....................................................................... 48
4.3.6. MICCG Gerçekleştiriminin Başarımı .................................................. 52
4.4. POLCG Gerçekleştirimi ve Başarımı ........................................................... 53
4.5. MICCG ve POLCG Yöntemleri ile Preconditioned Conjugate Gradient
Gerçekleştirimin Başarımlarının Karşılaştırılması .............................................. 53
5. SONUÇ VE ÖNERİLER ......................................................................... 57
6. KAYNAKLAR ......................................................................................... 59
vii
ŞEKİLLER DİZİNİ
Şekil 2.1 GİB ve AİB İçin Saniyedeki Kayan Noktalı İşlem ve Bellek Bant
Genişlikleri(4) .......................................................................................................... 4
Şekil 2.2 AİB ve GİB’de Aritmetik İşlem Birimlerinin(şekilde ALU) Dağılımı(4) ... 5
Şekil 2.3 GeForce GTX 280 Koşut İşlem Mimarisi(5) ......................................... 6
Şekil 2.4 Warp’ta Dallanma Örneğinin Akış Çizelgesi ........................................ 7
Şekil 2.5 CUDA Iş parçacığı sıradüzeni ............................................................ 10
Şekil 2.6 Farklı Bellek Türlerinin Farklı Bağlamlardan Erişilebilirlikleri .............. 12
Şekil 4.1 A matrisinin görünümü(13).(NCOL modeldeki sütun sayısı, NROW
modeldeki satır sayısı)........................................................................................... 22
Şekil 4.2 Şekil 4.3’teki modelin UT matrisi......................................................... 31
Şekil 4.3 Örnek bir model ................................................................................. 32
Şekil 4.4 Örnek modelin koşut işletilmesindeki bağlılıklar ve aşamalar ............ 33
Şekil 4.5 128x64 boyutlarındaki bir modelin GİB üzerinde gösterimi. ............... 34
Şekil 4.6 48 satır, 32 sütun ve 4 katmandan oluşan bir modelin GİB üzerine
satır-sütun-katman yerleştirimi .............................................................................. 36
Şekil 4.7 48 satır, 32 sütun ve 4 katmandan oluşan bir modelin GİB üzerine
katman-satır-sütun yerleştirimi .............................................................................. 37
Şekil 4.8 Sütun sayısı 100-2000 aralığında değiştirilen 1000 satır ve 8
katmandan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre ........ 38
Şekil 4.9 Satır sayısı 100-2000 aralığında değiştirilen 1000 sütun ve 8
katmandan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre ........ 38
Şekil 4.10 Katman sayısı 1-16 aralığında değiştirilen 1000 satır ve 1000
sütundan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre ........... 39
Şekil 4.11 KSS yönteminin AİB’ye göre hızlanması ........................................ 40
Şekil 4.12 GİB’de blok içi iş parçacıklarının yerleşimi ......................................... 41
Şekil 4.13 4 satır ve 16 sütundan oluşan bir modelin tek boyutlu 16’lık blok
yerleştirimi(üst) ve 4x4 boyutlarında bir alt matris yerleştirimi(alt) ile çözülmesi. ... 42
Şekil 4.14 Bir warp’ta çözüm için gereken aşama sayısının, bloğun sütun
sayısına göre değişimi ........................................................................................... 44
viii
Şekil 4.15 Sütun sayısı 100-2000 aralığında değiştirilen 1000 satır ve 8
katmandan oluşan modelin iki yöntem için forward subs’ın aldığı süre ................. 45
Şekil 4.16 Satır sayısı 100-2000 aralığında değiştirilen 1000 sütun ve 8
katmandan oluşan modelin iki yöntem için forward subs’ın aldığı süre ................. 46
Şekil 4.17 GİB’de dört katmanlı bir modelin yerleştirimi...................................... 47
Şekil 4.18 Paylaşımlı bellekte saklanan 푥 × 푦 boyutlarındaki veriyi işleyen(푥 +
1) × (푦 + 1) boyutlarındaki alt matris. Turuncu kareler komşu bloklardan gelen,
mavi kareler blok içinde hesaplanan değerleri tutmaktadır. ................................... 48
Şekil 4.19 Farklı model boyutlarına bağlı hızlanma oranları. Ölçümler alınırken
diğer boyutlar 100 değerine sabitlenmiş şekilde belirtilen boyutun büyüklüğü
değiştirilmiştir. 49
Şekil 4.20 Küp bir modelin farklı kenar boyutlarına bağlı hızlanma oranları. ...... 50
Şekil 4.21 Değişik satır ve sütun sayılarına sahip modellerde yeni yöntem ile
KSS'ye göre elde edilen hızlanma. Ölçüm alınırken katman 8’e, diğer boyut ise
1000’e sabitlenmiştir. ............................................................................................. 51
Şekil 4.22 Değişik katman sayılarına sahip modellerde KSS'ye göre elde edilen
hızlanma. Modelin diğer boyutları 1000'e sabitlenmiştir. ....................................... 52
Şekil 4.23 Double Veri Tipi Biçimi(16) ............................................................. 26
Şekil 4.24 16 adet değerin 푂(log2)’de toplanması.............................................. 28
Şekil 4.25 Dizi Boyutuna Göre KTA’nın Aldığı Sürenin Farklı Ortamlara göre
Karşılaştırılması ..................................................................................................... 29
ix
ÇİZELGELER DİZİNİ
Çizelge 2.1 GeForce GTX 200 GİB’lerinde Eşzamanlı Çalıştırılabilecek İş
Parçacığı Sayısı ...................................................................................................... 7
Çizelge 2.2 Vektör Toplaması Yapan Örnek Bir CUDA Koşut İşlev’i ve C
Dilinden Çağrılması ................................................................................................. 8
Çizelge 2.3 GİB’deki Bellek Çeşitlerinin Yazma/Okuma Özellikleri ve Kullanım
Amaçlarına Göre Sınıflandırılması ........................................................................ 13
Çizelge 4.1 SRNEW değerinin ve P matrisinin hesaplanmasının AİB ve GİB
üzerinde gerçekleştirimlerinin aldığı süre ve hızlanma oranları ............................. 24
Çizelge 4.2 V ve PAP ile ALPHA'nın hesaplanmasının AİB ve GİB üzerinde
gerçekleştiriminin aldığı süre ve hızlanma oranı .................................................... 24
Çizelge 4.3 Head ve Residual vektörlerinin hesaplanmasının AİB ve GİB üzerinde
gerçekleştiriminin aldığı süre ve hızlanma oranı .................................................... 25
Çizelge 4.4 MICCG yöntemi ile preconditioned matrisin elde edilmesi için AİB ve
GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı................................. 52
Çizelge 4.5 POLCG yöntemi ile preconditioned matrisin elde edilmesi için AİB ve
GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı................................. 53
Çizelge 4.6 MICCG ve POLCG yöntemleri ile conjugate gradient yönteminin bir iç
yinelemesi için AİB ve GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı
.............................................................................................................................. 54
Çizelge 4.6 MICCG ve POLCG yöntemleri ile bir yinelemenin ek yükü için AİB ve
GİB üzerinde harcanan süre ve hızlanma oranı .................................................... 54
Çizelge 4.5 Farklı Boyutlarda Double Türündeki Sayı Dizilerinin KTA Kullanılarak
Kümülatif Toplanması için Geçen Süre(ms) ve AİB’ye Göreli Hızlanma ............... 28
Çizelge 4.6 Fortran Ardıl Toplama ve CUDA KTA ile hesaplanan değerlerin
Fortran KTA ile hesaplanan değerlere göre Mean Absolue Percentage Error’ları . 30
Çizelge 4.7 Conjugate Gradient CUDA Gerçekleştirimi için Fortran Ardıl
Toplama ve CUDA KTA ile hesaplanan değerlerin Fortran KTA ile hesaplanan
değerlere göre Mean Absolue Percentage Error’ları ............................................. 30
x
SİMGELER VE KISALTMALAR DİZİNİ
AİB Ana İşlem Birimi
CUDA Compute Unified Device Architecture
GAGİBP Genel Amaçlı Grafik İşlem Birimi Programlama
GİB Grafik İşlem Birimi
KTA Kahan Toplama Algoritması
1
1. GİRİŞ
Sayısal çözümleme, matematiksel sorunların çözülmesi için geliştirilmiş sayısal
kestirim yöntemlerini içeren bilim dalıdır. Bu yöntemler kullanılarak doğrudan
yöntemlerle çözümü zor olan sorunlar, sonuca yakınsamaya çalışılarak
çözülmektir. Conjugate gradient de sayısal çözümleme alanında yaygın olarak
kullanılan bir yöntemdir. Conjugate gradient yöntemi kullanılarak belli şartları
sağlayan doğrusal denklem dizgeleri çözülebilmektedir [1]. Yeraltı su kaynaklarının
modellenmesi de bu yöntemin kullanım alanlarından biridir [2].
Yinelemeli olarak kullanılan bu sayısal çözümleme yöntemi büyük doğrusal
denklem dizgelerinin çözülmesi için uzun işletim zamanı gerektirmektedir. Bu
sebeple yöntemin koşut olarak çözülmesi MPI (Message Passing Interface) [3]
kullanılarak gerçekleştirilmiştir [4]. Ancak sayısal çözümleme yöntemlerinin
yakınsaması da önemli bir başarım ölçütüdür. Bu sebeple conjugate gradient
yöntemi kullanılarak çözülebilen fakat yine de uzun işletim süreleri gerektiren
sorunlar için yakınsamayı hızlandıran preconditioner’lar geliştirilmiştir [5].
Preconditioner kullanan yöntemler de, süper bilgisayarlar ve vektör bilgisayarlar
kullanılarak gerçekleştirilmiştir [6]. Fakat süper bilgisayar gerektiren algoritmaların
ve buna bağlı yazılımların yüksek maliyetli donanım ihtiyacı sebebiyle yaygın
kullanım kazanamamaktadır. Bu donanımların yerine son zamanlarda maliyeti
daha düşük olan Grafik İşlem Birimleri(GİB) kullanılmaktadır.
GİB’ler günümüzde gelişkin görsel işlemler yerine getirmek için çok çekirdekli ve
koşut bir yapıya evrilmişlerdir. Grafik kütüphanelerinin amaç dışı kullanılmasıyla
GİB’ler üzerinde genel amaçlı programlama yapılabilmekteydi. Bu durum Nvidia’nın
2007’de CUDA’yı (Compute Unified Device Achitecture) duyurması ile değişmiştir
[7]. CUDA sayesinde, GİB’i genel amaçlı programlama için grafik işlemlerinden
soyutlanmış şekilde kullanmak mümkün olmuştur.
Tez çalışması kapsamında preconditioned conjugate gradient yöntemi CUDA
kullanılarak GİB üzerinde gerçekleştirilmiştir. Bu gerçekleştirimin yapılması için hali
2
hazırda yaygın şekilde yeraltı su kaynaklarının modellenmesinde kullanılan bir
yazılım olan MODFLOW temel alınmıştır. MODFLOW’daki conjugate gradient
yöntemi ve iki preconditioning yöntemi GİB’de gerçekleştirilmiştir. Conjugate
gradient yöntemi genel olarak koşut programlamaya uygun, veri bağımsız bir
algoritmadır. Fakat GİB mimarisinde sorun çıkaran; tekil bir değere birikimli
toplama ve yakınsama kararının verilmesi için en büyük değerin bulunması
işlemlerini de içermektedir. Ayrıca iki preconditioning yönteminden daha yüksek
başarıma sahip olan yöntemin gerçekleştirimi için back ve forward substitution
algoritmalarına ihtiyaç duyulmaktadır. Back ve forward substitution ve
preconditioned conjugate gradient yöntemi MODFLOW’da kullanılan sonlu fark
yöntemi için bilgimize göre ilk defa bizim tarafımızdan GİB’lerde gerçekleştirilmiştir.
Tez metni, GİB’lerin tarihsel gelişimi, Nvidia tarafından geliştirilmiş olan CUDA’nın
özellikleri ve GİB mimarisi anlatılarak başlayacaktır. Kesim 2’de conjugate gradient
yöntemi ve preconditioning yöntemleri anlatılacaktır. Kesim 3’te ise bu
matematiksel yöntemlerin bilgisayar ortamında GİB kullanılarak gerçekleştirilmesi
ve başarımları üzerine eğilinecektir. Öncelikle conjugate gradient yönteminin
gerçekleştirimi ve kayan noktalı sayılarla birikimli toplama için geliştirilen yöntem ile
elde edilen başarım değerlendirilecektir. Ardından Modified Incomplete Cholesky
Preconditioner(MICCG) gerçekleştirimi kapsamında forward ve back substitution
algoritmalarının GİB üzerinde yerleştirime bağlı ve bağımsız yöntemlerle
gerçekleştirimi anlatılacak ve başarım ölçümleri verilecektir. Diğer preconditioning
algoritması olan Least-squares Polynomial Preconditioner’ın (POLCG) GİB
üzerinde gerçekleştirimi anlatıldıktan ve başarım ölçümleri verildikten sonra iki
yöntem ve toplam başarım karşılaştırılacaktır. Son kesimde ise yapılan çalışmanın
sonuçlarından ve devamında yapılabilecek geliştirmelerden bahsedilecektir.
3
2. GRAFİK İŞLEM BİRİMLERİ İLE KOŞUT PROGRAMLAMA
2.1. Grafik İşlem Birimlerinin Tarihsel Gelişimi
Ekran kartları grafik sorunlarına çözüm üretmek için geliştirilmiştir. Fakat 1999'da
Nvidia'nın Geforce 256 ekran kartı ile donanımsal olarak aydınlatma ve
dönüştürme işlemlerini gerçekleştirmeye başlaması ile ekran kartları Grafik İşlem
Birimi(GİB) olarak adlandırılmaya başladı [8]. 2001'de Nvidia tarafından Geforce 3
Serisi GİB'lerin piyasaya sürülmesi ile genel işlemler için GİB'lerin kullanılabilmesi
mümkün hale gelmiştir. Bu donanımlarda üzerinde işlem yapılacak dizi ya da
matrisler doku formuna dönüştürülmekte ve üzerlerinde işlem yapılmaktaydı [9].
Bunun için genellikle OpenGL kullanılmaktaydı. Örneğin bir OpenGL doku türü
seçilmekte ve aslen renk bilgilerinin olması gereken yere sayısal değerler
atanmaktaydı. Yani RGBA (Red-Green-Blue-Alpha) renk kanallarına sahip bir
dokuda, bu değerlerin her biri float değişkenler olarak tutulmaktaysa her doku
pikseline işlem yapılacak dört değerin atanması ve haritalanması gerekmekteydi.
Bu atanma işlemi yapıldıktan sonra işlemler yapılması için kernel’ler (koşut işlev)
yazılmaktadır.
Koşut işlevler Nvdia'nın Cg [10] adını verdiği basit bir C benzeri programlama dili
ile yazılmakta ve en azından GİB'e gönderilen veriler üzerinde yapılacak genel
amaçlı işlemlerin karmaşık shader işlemleriyle gerçekleştirilmesinden
kurtarmaktadır. Fakat koşut işlev içinde sağlanan bu rahatlık gene de geçilen doku
türünün bilinmesi ve ona göre programlama yapılmasını gerektiriyordu. Ayrıca
doku türleri ve mimarilerin seriden seriye değişmiş olması tüm donanımlar üzerinde
hatasız ve değişikliksiz kod yazılmasını zorlaştırmakta ve sorunlara sebep
olmaktaydı. Aynı zamanda genel amaçlı programlama yapmak için gerekli grafik
programlama bilgisi öğrenme koşullarını zorlaştırmaktaydı.
Nvidia GİB’lerinin Intel ana işlem birimleri(AİB) ile tarihsel olarak karşılaştırılması
için Şekil 2.1 incelenebilir;
4
Şekil 2.1 GİB ve AİB İçin Saniyedeki Kayan Noktalı İşlem ve Bellek Bant
Genişlikleri [7]
5
2.2. GİB Mimarisi
GİB’lerin AİB’lerinden mimarileri yaptıkları işler sebebiyle farklılaşmıştır. Bu farklar
da Şekil 2.1’de görüldüğü üzere kayan noktalı sayı işlemlerinde oluşmuştur. Bu
konuda böyle büyük bir fark oluşmasının sebebi, GİB’lerin grafik işlemlerinin temeli
olan doku kaplama işlemlerinin, işlem yoğun ve yüksek seviyede koşutluk
gerektirmesidir. Bu sebeple akış denetimindense veri işlemeye Şekil 2.2’de de
görülebileceği gibi GİB’lerde AİB’lerden çok daha fazla yer ayrılmıştır.
Şekil 2.2 AİB ve GİB’de Aritmetik İşlem Birimlerinin(şekilde ALU) Dağılımı [7]
GİB’ler bu sebeple işlem yoğun sorunlara çözüm üretebilmekte etkilidirler. İşlem
yoğun sorunlar; aynı programın yüksek miktarda veri birimi için koşut olarak
gerçekleştirilmesi gereken, bellek erişiminin az, aritmetik işlemlerin yoğun olduğu
sorunlar olarak özetlenebilir. Her veri birimi için aynı kod işletildiğinden akış
denetiminde basit çözümler yeterlidir. Aynı zamanda aritmetik işlem yoğun olduğu
için bellek erişimlerinde kaybedilen zaman büyük önbellek alanlarına ihtiyaç
olmadan hızlı kayan noktalı işlem başarımı sayesinde gözardı edilebilmektedir.
2.3. Örnek Bir GİB Mimarisi - CUDA
CUDA, NVIDIA şirketi tarafından geliştirilen GİB’ler için grafik kodlarına ihtiyaç
duymadan genel amaçlı programların geliştirilmesini sağlayan bir yazılım geliştirme
ortamıdır [7]. CUDA, eski Genel Amaçlı Grafik İşlem Birimi Programlama(GAGİBP)
diyalektiğinden farklı olarak üzerinde çalışılan ortamın bir GİB olduğunu
6
kullanıcıdan soyutlamaktadır. Bu soyutlama sayesinde koşut yazılımlar
geliştirilirken grafik programlamaya dair bilgiye sahip olmaya ya da genel amaçlı bir
matrisi ekran kartı üzerinde işlenecek hale getirmek için fazladan kod yazmaya
gerek yoktur. Bu sebeplerle CUDA gittikçe gelişen ve ekran kartlarını gün geçtikçe
daha çok yardımcı işlemci konumuna yaklaştıran bir görev üstlenmektedir.
2.3.1. Nvidia GeForce GTX 200 Mimarisi
Tezde kullandığımız Nvidia GTX 280 model ekran kartı, Nvidia’nın Haziran
2008’de piyasaya sürdüğü GTX 200 mimarisine sahip ekran kartları ailesinden
gelmektedir. GAGİBP, GİB mimarisine çok bağlı olduğu için bu bölümde kullanılan
ekran kartının mimarisine değinilecektir. GTX 280 ekran kartının koşut işlem
mimarisi Şekil 2.3’te görülebilir.
Şekil 2.3 GeForce GTX 280 Koşut İşlem Mimarisi [11]
7
Şekil 2.3’te siyah kutularla gösterilmiş şekiller İş Parçacığı İşleme Kümesi(Thread
Processing Cluster) olarak adlandırılmaktadır. Bu kümelerin içinde açık yeşille
belirtilmiş Streaming Processor(SP)lar bulunmaktadır. Bu çekirdekler sekizer adet
gruplandırılmış ve bir Streaming Multiprocessor(SM) içinde bulunmaktadır. Her
Streaming Processor 32 adet iş parçacığının eşzamanlı çalışmasını sağlayan warp
yapısına sahiptir. SM’ler de eğer yönettikleri SP’lerin her biri aynı kodu işletiyor ve
kodda dallanma olmuyorsa aynı anda 32 adet warp’ı birden yönetebilirler.
Çizelge 2.1 GeForce GTX 200 GİB’lerinde Eşzamanlı Yönetilebilecek İş
Parçacığı Sayısı
Yonga TPC SM / TPC İş Parçacığı / SM Toplam İş Parçacığı / Yonga
GeForce GTX 200 10 3 1.024 30.720
Az önce belirttiğimiz varsayıma göre iş parçacıklarının tümü eşzamanlı olarak (her
SP 32 iş parçacığı, her SM 32 warp) yönetilebilirse Çizelge 2.1’de çıkarıldığı gibi
GeForce GTX 280’de eşzamanlı olarak 30.720 adet iş parçacığı çalıştırılabilir.
2.3.1.1. Warp İçi Dallanmaların Etkileri
Bir SP’de 32 iş parçacığının aynı anda çalışabilmesi ancak aynı kod satırının
dallanma olmaksızın çalıştırabilmesi ile mümkündür. Eğer dallanma belli iş
parçacıklarının birbirine bağlılığına dayalıysa koşutluktan ödün verilmek zorunda
kalınır.
Şekil 2.4 Warp’ta Dallanma Örneğinin Akış Çizelgesi
else
0 nolu thread bekler diğer thread'ler çalışır
if(threadIdx.x = 0)
0 nolu thread çalışır diğer thread'ler bekler
8
Şekil 2.4’teki gibi bir dallanma iki dallanmada da aynı sürenin harcandığı
varsayılırsa işlemin dallanmasız halinin iki katı kadar süre alır. Dallanmaların
homojen dağılması kabul edilebilir süre kayıplarına sebep olur. Fakat dallanma
heterojenliği arttıkça ve en kötü koşullarda ardıllaştığında başarım azalır.
Dallanmaların farklı sürelerde işletilebileceği de hesaba katılırsa dallanmaların
toplam maliyeti her bir dallanmanın işletim süresinin toplamı olarak hesaplanabilir.
Bu sebeple warp içinde dallanmaları azaltmak başarıma katkıda bulunmaktadır.
2.3.1.2. Single Instruction Multiple Thread (SIMT)
Nvidia, GİB’lerinde iki farklı koşut işlem mimarisi gerçekleştirmiştir. TPC’lerdeki
işletim MIMD mimarisi kullanılırken, SM’lerdeki işletimde SIMT yapısı
kullanılmaktadır. Bu yapı SIMD’e yakın olsa da, hem başarım hem de
programlama kolaylığı sağlamaktadır. SIMT, iş parçacıklarının rastgele dağılımına
olanak sağlar ve verilerin vektör olarak tanımlanmasına gerek duymaz. SIMT her iş
parçacıklarının dallanmasına olanak sağladığı ve dallanmaları donanım tarafında
ele aldığı için programlama kolaylığı sağlar. Bu dallanmalar ardıl olarak ele alınır
ve çok parçalı dallanmalarda başarım kaybına sebep olur.
2.3.2. CUDA Programlama Modeli
CUDA Programlama Modeli, C dilini genişleterek GİB’deki birimlere erişimi ve kod
yazılmasını kolaylaştırmayı amaçlamaktadır. Bu amaçla CUDA, C genişletmesi ile
GİB’de çalışmak üzere koşut işlev’ler yazılabilmektedir.
Çizelge 2.2 Vektör Toplaması Yapan Örnek Bir CUDA Koşut İşlev’i ve C Dilinden
Çağrılması //koşut işlev tanımı
__global__ void VekTop(float* A, float* B, float* C)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
9
}
int main(){
…
// koşut işlev çağrısı
VekTop<<<1, N>>>(A, B, C);
}
Çizelge 2.2’de görüldüğü üzere koşut işlev tanımlanırken __global__ tanım
belirteci kullanılır. Ayrıca <<<...>>> sözdizimi kullanılarak koşut işlevin kaç iş
parçacığı ile hangi yapıda düzenlenmiş iş parçacıklarıyla çalışabileceği
tanımlanmaktadır. Bu sözdizimi koşut işlevin çalışacağı ızgarayı tanımlamaktadır.
2.3.2.1. İş Parçacığı Sıradüzeni
Izgara, CUDA’da tanımlanan iş parçacığı sıradüzeninin en üstünde bulanan
yapıdır. Iş parçacığı sıradüzenini CUDA’da yazılım geliştirme mantığında önemli bir
rol oynamaktadır. Iş parçacığı sıradüzenini, ızgara, blok ve iş parçacığı olarak üç
adımda incelenebilir. Şekil 2.5’te bu yapıların yerleşimi incelenebilir.
10
Şekil 2.5 CUDA Iş parçacığı sıradüzeni
Izgara, tek ya da iki boyutlu olarak tanımlanabilen ve içinde blokları barındıran
yapıdır. Izgara temelde verinin boyutlarına ve şekline bağlıdır, fakat blokların sayısı
ve içlerinde bulundurduğu iş parçacığı sayıları da boyutları belirleyen
etkenlerdendir. Izgaranın en fazla alabileceği boyut 65535(2 ) ile sınırlıdır. Izgara
11
GİB’de eşzamanlı çalıştırılabilecek blok ve iş parçacığı sayısını geçecek şekilde
tanımlanabilir, bu durum donanım tarafından ele alınmaktadır.
Blok, bir SP içerisinde çalıştırılacak iş parçacıklarının sayısını ve yerleşim şeklini
tanımlamak için kullanılan yapıdır. Tek, iki veya üç boyutlu olarak tanımlanabilir ve
en fazla 512 adet iş parçacığı içerebilir. Mevcut Nvidia GİB’leri, iş parçacıkları 32’lik
gruplar yani warp’lar halinde çalıştırdıkları için bu iş parçacıklarının hepsinin
eşzamanlı çalışması sözkonusu değildir.
Yüksek başarım elde edebilmek için blok boyutunun SP’nin tüm kaynaklarını etkin
kullanabilecek şekilde tanımlanması gereklidir. SP başına ayrılmış paylaşımlı
bellek boyutu ve yazmaç adeti, tüm GİB üzerinde doluluk sağlanması için dikkat
edilmesi gereken etmenlerdir.
Bloklar birden çok SP üzerine bölüştürülemezler, fakat bir SP üzerinde birden çok
blok çalışabilir. Bu durum da donanımsal olarak ele alınır ve GİB’de tam doluluk
sağlama amaçlı bir uygulamadır.
2.3.2.2. Bellek Sıradüzeni
Nvidia GİB’lerinde üç farklı bellek türü tanımlamıştır. Bunlar; global, paylaşımlı ve
yerel bellektir.
Global bellek, GİB’in RAM’idir. Her blok tarafından okuma ve yazma yapılabilir
fakat önbellekli olmadığı için erişim hızı yavaştır. Ancak AİB’den GİB’e ya da
GİB’den AİB’ye veri kopyalanmasında ve bloklar arası iletişim kurulmasında gerekli
ve etkilidir.
Paylaşımlı bellek, SM’lerde bulunur ve bellek SM’de çalışan bloklar arasında eşit
olarak paylaştırılır. Global bellekten hızlıdır fakat ancak blok içinden erişim
mümkündür. Tekrarlı erişimler gereken veriler için tekrar tekrar global belleğe
erişim maliyetini ortadan kaldırır. Aynı zamanda blok içinde haberleşme
sağlayabilecek bir yapıya sahiptir
12
Yerel bellek, RAM’de her iş parçacığı için ayrılmış bir bellektir. Erişim hızı global
bellekle aynıdır. Yazmaçlarda yer kalmadığı durumlarda derleyici bazı değişkenleri
ya da paylaşımlı bellekte yer tutması beklenen verileri yerel belleğe atmaktadır.
Şekil 2.6 Farklı Bellek Türlerinin Farklı Bağlamlardan Erişilebilirlikleri
Bunlar dışında iki farklı bellek türü tanımlanmıştır. Bunlar sabit ve doku belleğidir.
Bu bellek türleri önbelleklidir fakat ikisi de salt okunurdur. Bu sebeple tüm ızgara
tarafından ihtiyaç duyulan skalar ya da dizi sabitleri tutmak amacıyla kullanılabilir.
Son olarak GİB’lerde belirli sayıda yazmaç bulunur. Bu yazmaçlarda, koşut işlev
içinde tanımlanan değişkenler tutulur. Çok hızlı fakat kısıtlı sayıdadırlar.
Tüm bellek türlerinin kullanım amaçlarına göre sınıflandırılması aşağıdaki
çizelgede incelenebilir;
13
Çizelge 2.3 GİB’deki Bellek Çeşitlerinin Yazma/Okuma Özellikleri ve Kullanım
Amaçlarına Göre Sınıflandırılması
Kullanım Amacı Yazma/Okuma Bellek Çeşidi Tüm ızgara tarafından ihtiyaç duyulan bir
sabit Salt Okunur Sabit Bellek
Tüm ızgara tarafından ihtiyaç duyulan dizi
yapısında bir sabit Salt Okunur Doku Belleği
Blok için paylaşım Yaz/Oku Paylaşımlı Bellek Koşut işlev içi değişkenler Yaz/Oku Yazmaçlar Girdi ve çıktı Yaz/Oku Global Bellek
14
3. MODELLEME
3.1. Örnek çalışma: Yeraltı Su Kaynaklarının Bilgisayar Yardımıyla Modellenmesi
3.2. Yeraltı Su Kaynaklarının Modellenmesinde Kullanılan Yazılımlar
Yeraltı su kaynaklarının modellenmesi, yüksek miktarda işlem gerektirdiği ve küçük
bir bölgenin bile insan eliyle modellenmesi uzun süreler aldığı için bu konuda pek
çok modelleme yazılımı geliştirilmiştir.
3.2.1. MODFLOW
MODFLOW, yeraltı su kaynaklarının modellenmesi için kullanılan sonlu-fark yeraltı
su kaynakları model’inin kısaltmasıdır. 1981’den bu yana USGS(US Geological
Survey) tarafından geliştirilmektedir. Birimsel bir yapıda geliştirildiği için 1984
yılında yayımlanan ilk sürümü ile günümüzde temel kodları benzerdir. 1988 yılında
yazılım Fortran-66 dilinden Fortran-77’ye uyum sağlayacak hale getirilerek
MODFLOW-88 adı altında yayımlanmıştır. [12]
Ardından 90’lı yıllarda tezde de üzerinde çalıştığımız conjugate gradient
yöntemlerini içeren birimler ve farklı birimler eklenmiş ve MODFLOW-96 adıyla
yayımlanmıştır. Ardından pek çok yeni birimin ana koda eklemlenmesi ile 2000 ve
2005 yılında iki yeni sürüm daha yayımlanmıştır. Günümüzde bu iki sürüm de
güncellenmekte ve yaygın olarak kullanılmaktadır.
3.2.2. Diğer Yazılımlar
ABD kaynaklı MODFLOW haricinde yeraltı su kaynaklarının modellenmesinde
kullanılan diğer yazılımlar arasında HydroGeoSphere [13], FEFLOW [14] ve MIKE
SHE [15] sayılabilir. Bunlar Avrupa kaynaklı yazılımlardır. Bu tezde MODFLOW
yazılımının tercih edilme sebebi ücretsiz olarak dağıtılması ve kaynak kodunun
15
açık olmasıdır. Diğer yazılımlar ya açık kaynak kodlu olmadıkları ya da ücretli
oldukları için tercih edilmemiştir.
3.3. Yeraltı Su Akışı Denklemlerinin Çözümünde Kullanılan Yöntemler
Tezde faydalandığımız MODFLOW programı hidrolik head’ler için oluşturulan
model tarafından üretilen denklemleri çözmek için preconditioned conjugate
gradient yöntemini kullanmaktadır [2]. LEVENT HOCA
3.3.1. Preconditioned Conjugate Gradient Yöntemi
Conjugate gradient yöntemi Eş. 3.1’teki gibi ifade edilebilen sistemler için etkili
çalışabilektedir.
퐴푥 = 푏 Eş. 3.1
Bu eşitlikte kullanılan değişkenler aşağıda açıklanmıştır.
퐴 : Değerleri bilinen, kare, simetrik ve positive-definite (ya da positive-indefinite) matristir.
x : Değerleri bilinmeyen bir vektördür. b : Değerleri bilinen bir vektördür.
Yeraltı su kaynaklarının modellenmesinde, kısmi diferansiyel denklemler
çözümünde kullanılan sonlu fark ve sonlu eleman metodları da bu özelliklere sahip
sistemler oluşturur [1].
Eş. 3.1 eşitliğinde bahsedilen A matrisi, yapısal olmayan büyük bir seyrek katsayı
matrisidir. Doğrusal yöntemlerle çözümün uzamasına sebebiyet veren bu
özelliklere sahip matrisler, conjugate gradient ve benzeri iteratif yöntemlerle daha
kısa sürede çözülebilmektedir. Conjugate gradient yöntemi, preconditioning ile
kullanılarak çözüme yakınsaması hızlandırılabilmektedir. Takip eden bölümlerde
preconditioned conjugate gradient yöntemi ele alınacaktır.
16
İteratif yöntemlerde Amatrisi’nin, iki matrise parçalanabileceği ve bu matrislerin
toplamı olarak ifade edilebileceği farzedilir [16]. Buna göre 퐴 matrisi şöyle de ifade
edilebilir; 퐴 = 푀 + 푁. Yeni ifadede 푀 matrisi 퐴’nın preconditioned hali olarak
çağrılır. Amaç evrilmesi (invert) kolay olan ve 퐴 matrisini en iyi şekilde temsil eden
bir 푀 matrisi elde etmektir. 푀matrisi farklı yöntemlerle elde edilebilir, bu
yöntemlere Bölüm 3.3.1.1 ve Bölüm 3.3.1.2’de değinilecektir. A matrisinin ikiye
bölünebilmesi kuralı ve Eş. 3.1 ile birleştirilebilir. Bunun sonucunda da 푘’ncı
adımdaki yineleyen eşitliğe ulaşılabilir;
푀푥 = 푀푥 + 푏 − 퐴푥 Eş. 3.2
Bu eşitlik Eş. 3.3 ve Eş. 3.4 eşitlikleri kullanılarak sadeleştirilebilir;
푟 = 푏 − 퐴푥 Eş. 3.3
푠 = 푥 − 푥 Eş. 3.4
Bu sadeleştirmenin sonucunda Eş. 3.5 eşitliğine ulaşılır;
푠 = 푀 푟 Eş. 3.5
Bu çıkarımların eşliğinde conjugate gradient yöntemleri öncelikle işe residual’ı
hesaplayarak başlar. Bu Eş. 3.6 ile hesaplanabilir;
푟 = 푏 − 퐴푥 Eş. 3.6
Conjugate gradient yöntemi ilk residual’ı hesapladıktan sonra Eş. 3.7‘den
başlayarak her yineleme için alttaki eşitlikleri uygular;
푠 = 푀 푟 Eş. 3.7
푘 = 0푖ç푖푛푝 = 푠 Eş. 3.8
17
푘 > 0푖ç푖푛 훽 = 푠 푟
푠 푟푝 = 푠 + 훽 푝
Eş. 3.91
훼 =푠 푟푝 퐴푝
Eş. 3.10
푥 = 푥 + 훼 푝 Eş. 3.11
푟 = 푟 − 훼 퐴푝 Eş. 3.12
Eş. 3.3 göz önünde bulundurulursa beklenen bir derecede (10 ya da 10 gibi)
푟 ’nın sıfıra yakınsaması algoritmanın sonlandırılması için koşul olarak
kullanılmakta olduğu görülebilir. Bu denkliği sağlayan yinelemede hesaplanan 푥
vektörü de conjugate gradient yönteminin sonuç vektörünü oluşturur.
3.3.1.1. Modified Incomplete Cholesky Preconditioner(MICCG)
MICCG’de preconditioning matrisi Eş. 3.13’deki gibi tanımlanır.
푀 = 푈 퐷푈 Eş. 3.13
푈 ana köşegeninde ve 퐴 matrisinde sıfır olmayan değerlerin eşit olduğu bir üst
üçgen matristir. 푈 ve 퐴 matrisi arasında Eş. 3.14’deki gibi bir bağlantı kurulabilir.
푗 > 푖푖ç푖푛푢 = 푎 Eş. 3.14
퐷 pozitif bir köşegen matristir ve değerleri Eş. 3.15’teki gibidir.
푑 = Eş. 3.15
퐷 matrisinin hesaplanması için Eş. 3.15’ten görüleceği üzere 푈 matrisinin ana
köşegeni hesaplanmalıdır. Ana köşegenin hesaplanması Eş. 3.16‘da belirtilen
yineleyen ilişki ile hesaplanabilir. Bu eşitlikte 푟,푐,푣 değerleri 퐴 matrisindeki ana
1 Üst indis olarak gösterilen T, matrisin devrik hali anlamına gelmektedir.
18
köşegen haricindeki konumlarda bulunan değerlerdir ve satıra bağlı oldukları için
tek indis ile gösterilmişlerdir.
푢 = 푎
푢 = 푎푟 (푟 − 푐 − 푣 )
푢
푢 = 푎푟 (푟 − 푐 − 푣 )
푢
...
Eş. 3.16
푀 matrisinden 푠 ’ya ulaşılması için Eş. 3.17 eşitliğinin çözülmesi iki adımda
gerçekleşmektedir. Bunun için öncelikle Eş. 3.18 eşitliği forward substitution ile 푣
için çözülmeldir. Ardından Eş. 3.19 eşitliği backward substitution ile 푠 için
çözülmelidir.
푈 퐷푈푠 = 푟 Eş. 3.17
푈 퐷푣 = 푟 Eş. 3.18
퐷푈푠 = 퐷푣 Eş. 3.19
3.3.1.2. Least-squares Polynomial Preconditioner (POLCG)
POLCG ile tanımlanan preconditioning matrisinin evrik hali, A matrisinin evrik
halinin Neuman serisine göre kuvvet serisi açılımıdır [2].
푀 = 퐼 + 퐴 + 퐴 + ⋯+ 퐴 Eş. 3.20
Yaklaşık bir çözüm terimlerin ağırlıklandırılması ve 푙’nin 3 olarak alınması ile alttaki
gibi olmaktadır. 푐 , 푐 ve 푐 katsayıları algoritmanın yakınsamasını iyileştirmek için
seçilmiştir.
푠 = 푀 푟 = 푐 푟 + 푐 푟 퐴 + 푐 푟 퐴 + 푟 퐴 Eş. 3.21
19
Değerlerin tekrar hasaplanmaması için Eş. 3.21 üç adımda alttaki gibi
hesaplanmaktadır.
푧 = 푐 푟 + 푟 퐴
푧 = 푐 푟 + 푧 퐴
푠 = 푐 푟 + 푧 퐴
Eş. 3.22
20
4. GERÇEKLEŞTİRİM
4.1. Sonlu Fark Yöntemi
4.2. Conjugate Gradient Gerçekleştirimi
Preconditioned conjugate gradient yönteminin gerçekleştirimi preconditioner’ların
ve conjugate gradient yönteminin gerçekleştirilmesi olarak ikiye ayrılabilir. Bu
kesimde de preconditioner gerçekleştirimleri hariç gerçekleştirimler ele alınacaktır.
Gerçekleştirim kesimi boyunca conjugate gradient yönteminin denenmesinde
%40’ından fazlası dolu 317 × 638 × 8 boyutlarında bir yeraltı su akış modeli
kullanılmıştır. Bu kısımda verilecek başarım ölçümleri aksi belirtilmediği sürece bu
model kullanılarak elde edilmiştir.
4.2.1. Conjugate Gradient Yönteminde Bellek ve İşlem İyileştirmeleri
Conjugate gradient yönteminin gerçekleştirilmesi için kullanılan eşitlikler, vektör-
matris ya da vektör-vektör çarpımları gerektirdiği için bu işlemlerin mümkün
olduğunca az tekrarlanması ve sonuçların tekrar kullanılabilirliği önem
kazanmaktadır.
Eş. 3.9 ve Eş. 3.10’da tekrarlanan 푠 ve 푟 vektörünün çarpım(푠 푟 ) işlemi sadece
Eş. 3.9’da hesaplanmaktadır. Bu işlemin sonucu skalar bir değişkende tutulmakta
ve Eş. 3.9’da gerekli olan bu çarpımların bir önceki yinelemedeki değeri de, başka
skalar değişkende saklanması ile hesaplanmaktadır. Buna göre önceden belirtilen
eşitlikler şöyle değişmektedir;
푆푅푁퐸푊 = 푠 푟 Eş. 4.1
푘 > 0푖ç푖푛 훽 = 푆푅푁퐸푊푆푅푁퐸푊
푝 = 푠 + 훽 푝 Eş. 4.22
2 푆푅푁퐸푊푘−1 ile kastedilen değer aslen tek bir skalar değişken olup sadece önceki
yinelemedeki 푆푅푁퐸푊푘 değerini saklamaktadır.
21
훼 =푆푅푁퐸푊푝 퐴푝
Eş. 4.3
Aynı şekilde Eş. 3.10 ve Eş. 3.12 eşitliklerinde tekrarlanan 퐴 matrisi ile 푝
vektörünün çarpım işleminin (퐴푝 ) ara çözümü 푉 adında bir matriste tutulmaktadır.
Böylece Eş. 3.10 ve Eş. 3.12 üstteki değişlikler de hesaba katıldığında alttaki gibi
değişmektedir;
푉 = 퐴푝 Eş. 4.4
훼 =푆푅푁퐸푊푝 푉
Eş. 4.5
푟 = 푟 − 훼 푉 Eş. 4.6
Gerçekleştirimde bu değişiklikler sağlandığında iki adet vektör-vektör çarpımından
ve bir adet matris-vektör çarpımından tasarruf edilmektedir.
4.2.2. Conjugate Gradient Yönteminde Matrislerin Bellekte Saklanma Şekli
Conjugate gradient yöntemi ile çözülmeye çalışan A matrisi seyrek bir matristir. A
matrisin boyutunu yeraltı su kaynaklarının modellenmesinde kullanılan üç boyutlu
modelin boyutları belirler.
푁 = (푛 × 푚 × 푘) Eş. 4.7
Bu eşitlikte kullanılan değişkenler aşağıda açıklanmıştır.
푁 : A matrisinin boyutu 푛 : Modelin satır sayısı 푚 : Modelin sütun sayısı 푘 : Modelin katman sayısı.
A matrisi modelin boyutunun büyümesinden çok fazla etkilendiği için A matrisinin
dolu elemanlarının oluşturduğu şekilden faydalanılmaktadır [17]. Yeraltı su
kaynaklarının üç boyutlu modellenmesinde her hücrenin en fazla altı adet komşusu
olmaktadır. Bu altı adet komşuluk bir hücrenin iki dikey ve dört yatay komşularını
22
içermektedir. Bu komşuluklar bir matris(A matrisi) ile ifade edildiğinde Şekil 4.1 A
matrisinin görünümü.Şekil 4.1‘deki gibi görünmektedir.
Şekil 4.1 A matrisinin görünümü [17].(NCOL modeldeki sütun sayısı, NROW
modeldeki satır sayısı)
Şekil 4.1’deki E ile isimlendirilmiş ana köşegen modeldeki hücreleri tutmaktadır.
Matrisin üst ve üst üçgeninde üçer adet anlamlı köşegen vardır. Üst üçgen ele
alındığında F ile gösterilen ve ana köşegenin komşusu olan köşegen yatay ve bir
sonraki komşuyu tanımlamaktadır. H ile gösterilen köşegen ana köşegenin yatay
komşularından alttaki komşuyu tanımlamaktadır. S köşegeni ise dikey
komşulardan bir alttaki katmandaki komşuyu tanımlamaktadır.
23
A matrisi üç boyutlu matrisi tek boyutlu bir dizi gibi tanımlamaktadır. Bu sebeple
şekilde de görülebileceği gibi H köşegenindeki bir eleman -modelde bir alt satırdaki
komşu- A matrisinde modelin sütun sayısı kadar ötede bulunmaktadır. Aynı şekilde
katman bağlamındaki komşu modelin bir katmanındaki hücre sayısı kadar
ötededir(sütun sayısı x satır sayısı).
A matrisi simetrik bir matris olduğu için üst üçgendeki köşegenler ile alt üçgendeki
köşegenler aynıdır. Bu sebeple ana köşegen haricinde üç adet köşegenin
tutulması A matrisini özelliklerini kaybetmeden saklamayı olanaklı kılar. Ana
köşegen harici köşegenler ana köşegenden küçük boyutlara sahiptir, fakat bunların
farklı boyutlarda saklanması sınır taşma hatalarının kontrolünü gerektireceği için
her bir köşegen ana köşegen boyutlarında tanımlanmıştır.
Sadece köşegenlerin saklanması ile A matrisinin bellekte kapladığı yer Eş. 4.7’de
tanımlanmış boyut değişkenlerinin kullanılması Eş. 4.8 ile bulunabilir.
푁 = 4 × (푛 × 푚 × 푘) Eş. 4.8
Bu yöntem ile A matrisinin tamamen oluşturulup bellekte saklanmasını imkansız
hale getiren boyuttaki sorunların çözülmesi mümkün olmaktadır. A matrisinin
tamamının saklanmasında gereken bellek miktarının, yöntemin bellek gereksinime
oranı Eş. 4.9 eşitliği ile bulunabilir.
푂푟푎푛 =(푛 × 푚 × 푘)
4 Eş. 4.9
4.2.3. P'nin hesaplanması
Bölüm 3.3.1’te, Eş. 3.8 ve Eş. 3.9 ile elde edilen ara değerlerin saklandığı P matrisi
hesaplanmaktadır. Bu işlem iki kısımdan oluşmaktadır. İlk kesim SRNEW adlı
değerin birikimli toplama ile elde edilmesini gerektirir. GİB üzerinde birikimli
toplama yöntemine Bölüm 4.5’de değinilecektir. İkinci bölüm ise SRNEW değeri
kullanılarak P matrisinin oluşturulmasıdır. Bu iki kesimin AİB ve GİB
gerçekleştirimlerinin aldıkları süre ve hızlanmaları da Çizelge 4.1’de belirtilmiştir.
24
Çizelge 4.1 SRNEW değerinin ve P matrisinin hesaplanmasının AİB ve GİB
üzerinde gerçekleştirimlerinin aldığı süre ve hızlanma oranları
Yöntem AİB(ms) GİB(ms) Hızlanma
SRNEW Hesaplanması 6,227 2,482 2,5X
P’nin hesaplanması 12,495 0,245 51X
SRNEW değerinin hesaplanması birikimli toplamadan dolayı kısmen
koşutlaştırılabildiği için düşük bir hızlandırma sağlamıştır. P matrisinin
hesaplanması ise tamamiyle veri bağımsız bir işlem olduğu için 51 kat hızlanma
sağlanmıştır.
4.2.4. A Matrisi ile P vektörünün çarpılıp V'de saklanması ve PAP ile ALPHA'nın hesaplanması
Eş. 3.10 ve Eş. 3.12’de gerekli olan A matrisi ile P vektörünün çarpımı(퐴푝 ), işlem
tekrarını ortadan kaldırmak için V adında ara değer tutan bir vektörde
saklanmaktadır. Eş. 3.10 eşitliğinin böleni olan 푝 퐴푝 , P vektörünün A ile
çarpılması sonucu bir vektör oluşturmaktadır, bu vektörün aynı boyutta devrik bir
vektör ile çarpılması sonuç olarak skalar bir değer çıkarmaktadır. Bu değere PAP
adı verilmiştir ve V vektörünün hesaplanıp P vektörü ile elemanlarının çarpılıp
toplanması ile elde edilir. Bu da yine bir birikimli toplama işlemi gerektirir. Bu
sebeple her ne kadar V vektörünün hesaplanması veri bağımsız olsa da PAP
değerinin bulunması esnasında bir başarım kaybı olur. ALPHA değerinin
hesaplanması ise Eş. 4.3’te görüldüğü gibi SRNEW değerinin PAP değerine
bölünmesi ile bulunabilmektedir. Bu işlemlerin AİB ve GİB’de gerçekleştirimlerinin
aldığı süre ve hızlanma Çizelge 4.2‘de görülebilir.
Çizelge 4.2 V ve PAP ile ALPHA'nın hesaplanmasının AİB ve GİB üzerinde
gerçekleştiriminin aldığı süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms) Hızlanma
V ve PAP ile ALPHA’nın Hesaplanması 44,140 3,481 12,68X
25
4.2.5. Head ve Residual vektörlerinin hesaplanması ve en büyük değerlerinin saklanması
Eş. 3.12 head değerlerinden oluşan vektörün, Eş. 3.13 ise residual vektörünün
hesaplanmasını sağlar. Bu iki işlem tamamlandıktan sonra her iki vektörün de en
büyük değerlerinin bulunması gereklidir. En büyük residual değeri conjugate
gradient’in yakınsama değerinden küçükse yani residual vektöründeki tüm değerler
bu değerden küçükse algoritma yakınsamış kabul edilir ve sonlandırılır. En büyük
head değeri de yakınsamayı belirlemede kullanılmaktadır.
Bu vektörlerde en büyük değerlerin bulunmasında da birikimli toplama yapmak için
geliştirilmiş olan algoritma kullanılmıştır. Bölüm 4.5‘de anlatılan bu algoritmada
değişen kısım toplananların değerlerin değil de en büyük değerin en son elde
edilen olmasının sağlanmış olmasıdır. Ayrıca en büyük değerin elde edilmesinin
haricinde bu algoritma ile en büyük değerin vektörün hangi elemanı olduğu da
elemanın elde edilmesine benzer bir mantıkla saklanmakta ve korunmaktadır. Bu
durum toplamaya göre en büyük değerin bulunması algoritmasında bellek
gereksinimini arttırmaktadır.
İşlemlerin AİB ve GİB üzerinde gerçekleştirilmesinin aldığı süreler hızlanma oranı
Çizelge 4.3‘te görülebilir.
Çizelge 4.3 Head ve Residual vektörlerinin hesaplanmasının AİB ve GİB üzerinde
gerçekleştiriminin aldığı süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms) Hızlanma
Head ve Residual Vektörlerinin Hesaplanması 17,985 1,607 11,19X
4.2.6. Kayan Noktalı Sayılarla Birikimli Toplama Gerçekleştirimi
GİB üzerinde kayan noktalı sayıların birikimli toplanmasının gerçekleştirimi verilerin
iş parçacıkları ve bloklar arası iletişimini gerektirir. Ayrıca birikimli toplama hatalara
sebep olabilecek bir durumdur. Bu iki soruna dikkat edilerek birikimli toplama
26
gerçekleştirimi conjugate gradient gerçekleştirimi için şarttır. Aynı zamanda birikimli
toplama için geliştirilen yöntem bir dizi içindeki en büyük değerin kullanılması
amacıyla da tez kapsamında kullanılmıştır. Bu bölümde bu konulara değinilecektir.
4.2.6.1. Kayan Noktalı Sayılarla Birikimli Toplama Hataları IEEE 754-2008 standartlarına göre kayan noktalı bir veri tipi olan double, bellekte
64 bit'lik yer kaplamaktadır. Bellekteki 64 bit'in ilk biti sayının pozitif ya da negatif
olduğunu, sonraki 11 bit sayının 10'un kaçıncı kuvveti ile çarpılacağını, geri kalan
52 bit ise sayısal değeri göstermektedir [18]. Şekil 4.2’de double veri tipinin biçimi
verilmiştir.
Şekil 4.2 Double Veri Tipi Biçimi [19]
52 bit ile temsil edilebilecek en uzun sayı dizisi, Eş. 4.10’e göre hesaplandığında
double veri tipi için yaklaşık 16 (log (2 ) ≈ 15,65) anlamlı basamağa sahiptir.
퐵 = log (2 ) Eş. 4.10
Bu eşitlikte kullanılan değişkenler aşağıda açıklanmıştır.
B : Anlamlı basamak sayısı n : Sayısal değeri tutmak için kullanılan bit sayısı
Kayan noktalı sayıların anlamlı basamak sayısının sabit, kuvvet aralığının geniş
olmasından dolayı toplama ve çarpma işlemlerinde yuvarlama hataları oluşabilir.
Bunun sebebi elde edilen gerçek sonucun anlamlı basamak sayısının double veri
tipi ile ifade edilebilecek anlamlı basamak sayısını aşmasıdır.
27
Çok sayıda kayan noktalı sayının birikimli toplanması sonucunda oluşan hataların
giderilmesinde kullanılan algoritmalardan biri Kahan Toplama Algoritması(KTA) ‘dır
[20]. KTA, ardıl toplama işleminde her toplama sonrası kaybedilecek olan anlamlı
basamakları başka bir değişkende tutar ve bu değerle her basamakta toplamı
günceller. Böylece göreceli bir şekilde ardıl toplamanın hassasiyetini iki katına
çıkarır.
4.2.6.2. GİB’de Kayan Noktalı Sayıların Birikimli Toplanması
Tek bir döngüde kayan noktalı sayıların birikimli olarak toplanması aritmetik
hatalara sebep olabilmektedir. Bunun sebebi zamanla elde biriken toplamın
büyümesi ve toplanan değerlerinin küçük olması sebebiyle kayan noktalı sayı ile
ifade edilebilecek son basamakların anlamlılığını yitirmektedir. GİB’de
gerçekleştirilen çözüm küçük sayıları birbiri ile toplayıp ara toplamlar elde etmekte
ve bunları birbiri ile toplayarak daha çok hassasiyete sahip sonuçlar vermektedir.
GİB’de gerçekleştirilen çözüm, toplanacak kayan noktalı sayı dizisini 512'şer
parçalara bölmektedir. Bu 512'lik parçaların her biri bir bloğa atanmakta ve GİB’de
tam doluluk sağlanmaktadır. Ardından 512'lik dizi 푂(log 2)'lik bir algoritma
karmaşıklığına sahip işlemle toplanarak tek değere düşürülmektedir. Bu değerler
global bellekte bir dizide toplanmakta ve yönetici bir iş parçacığı tarafından ardıl bir
şekilde toplanmaktadır. Şekil 4.3’de 16 boyutuna sahip bir dizinin toplanması
örneği gözlemlenebilir.
28
Şekil 4.3 16 adet değerin 푂(log 2)’de toplanması
4.2.6.3. Kayan Noktalı Sayıların Toplanmasının Hız ve Hassasiyet Açısından
GİB ve AİB’nin Karşılaştırılması
Her iki yöntemin hız ve hassasiyetlerinin karşılaştırılması için GMP (GNU Multi
Precision Aritmetic Library) [21] kullanılmıştır. GMP, sayıları damga dizisi gibi ele
alarak oldukça yüksek hassasiyet sağlamaktadır. Hız ve hassasiyet farklılığının
daha kesin gözlemlenmesi için GİB'e verdiğimiz parametrelerle sığabilecek en
büyük boyutlarda sayı dizisinden başlanarak dizi boyutu azaltılmıştır. Başarım
ölçümleri için Fortran’ın kendi içindeki zaman ölçüm işlevleri kullanılmıştır.
Çizelge 4.4 Farklı Boyutlarda Double Türündeki Sayı Dizilerinin KTA Kullanılarak
Kümülatif Toplanması için Geçen Süre(ms) ve AİB’ye Göreli
Hızlanma3 Dizi AİB GİB Hızlanma4 GİB (veri transferi Hızlanma GMP Hızlanma
3 GİB (veri transferi hariç) sütunu dışındaki tüm süre sütunlarının ölçüm hassaslığı ±4ms’dir.
29
Boyutu hariç)
32 Milyon 324 180 1,80X 51,86 6,24X 2.292 0,14X
16 Milyon 172 112 1,53X 25,96 6,62X 1.148 0,14X
8 Milyon 100 76 1,31X 13,01 7,68X 580 0,17X
4 Milyon 60 64 0,93X 6,57 9,13X 288 0,20X
2 Milyon 28 64 0,43X 3,29 8,51X 140 0,20X
1 Milyon 16 64 0,25X 1,66 9,63X 80 0,20X
Çizelge 4.4’de görüldüğü üzere dizi boyutu büyüdükçe GİB’e veriyi aktarmak için
harcanan süre dezavantaj olmaktan çıkmaktadır. Ayrıca GİB’in kullanılmasında
birikimli toplama ihtiyaç duyulan verinin GİB’e ve GİB’den aktarılması gerekmiyorsa
işlemciye göre dizi boyutuna bağlı olarak 6 ila 10 kat hızlanma sağlanabilir. Şekil
4.4’de KTA hesaplanmasının farklı ortamlarda aldığı süreler gözlemlenebilir.
Şekil 4.4 Dizi Boyutuna Göre KTA’nın Aldığı Sürenin Farklı Ortamlara göre
Karşılaştırılması
4 Hızlanma, AİB sütununa göre diğer ölçümlerin kaç kat hızlı olduğunu belirtmektedir.
0
50
100
150
200
250
300
350
32 Milyon 16 Milyon 8 Milyon 4 Milyon 2 Milyon 1 Milyon
AİB
GİB
GİB (veri transferi hariç)
30
KTA’nın artan dizi boyutuna orantılı olarak başarımı düştüğü için hassasiyetten
ödün verilerek ardıl toplama tercih edilebilmektedir. Kayan noktalı sayıların ardıl
toplanmasının sonuca etkisi saptanmaya çalışılmıştır. Yakınsama kararının
alınmasında etkili olan ara sonuçların tutulduğu matrisin otuz adet iç yinelemeden
sonra Fortran KTA’ya göre Mean Absolue Percentage Error’ının iki farklı yöntem
için karşılaştırılması Çizelge 4.5’te görülebilir.
Çizelge 4.5 Fortran Ardıl Toplama ve CUDA KTA ile hesaplanan değerlerin
Fortran KTA ile hesaplanan değerlere göre Mean Absolue
Percentage Error’ları Fortran Ardıl Top. CUDA Kahan Top.
4,192% 0,000%
Çizelge 4.5’te görüldüğü üzere CUDA KTA gerçekleştirimimiz örnek girdilerde
yinelemelerle hatanın yayılımla büyümesini engellemektedir.
Sadece Conjugate Gradient gerçekleştirimimizin tamamı CUDA’ya aktarıldığında
hata oranlarımız Çizelge 4.6’deki gibi gerçekleşmiştir
Çizelge 4.6 Conjugate Gradient CUDA Gerçekleştirimi için Fortran Ardıl Toplama
ve CUDA KTA ile hesaplanan değerlerin Fortran KTA ile hesaplanan
değerlere göre Mean Absolue Percentage Error’ları
Fortran Ardıl Top. CUDA Kahan Top.
4,192% 0,001%
Görüldüğü üzere GİB üzerinde gerçekleştirilen toplama ardıl toplamaya göre hem
daha az aritmetik hata içermekte hem de daha hızlı çalışmaktadır.
4.3. MICCG
Modified Incomplete Cholesky Preconditioner, Forward ve Back Substitution gibi
oldukça ardıl algoritmaların gerçekleştirilmesine ihtiyaç duyan bir yöntemdir. Bu
31
yönetim GİB üzerinde gerçekleştirimine Forward ve Back Substitution
gerçekleştirimi üzerine yoğunlaşarak değinilecektir.
4.3.1. Forward ve Back Substitution Gerçekleştirimi
Şekil 4.1’de ifade edildiği gibi olan A matrisinin çözülebilmesi alt ve üst üçgene
bölünerek mümkündür. Bunun bir yöntemi de Cholesky preconditioning’dir.
Cholesky preconditioning’in gerçekleştiriminde Eş. 3.17’nın ikiye parçalanması ile
oluşan Eş. 3.18 ve Eş. 3.19’in çözülmesinde forward ve back substitution
algoritmaları bu alt ve üst üçgenlerin çözülmesinde kullanılmaktadır.
Bu alt-üst üçgenlerin oluşturulmasında Cholesky factorization’da Crout algoritması (A = LLT) kullanılabilir. Fakat bu algoritma ana köşegenin hesaplanmasında
karekök hesaplama maliyeti getirdiği için [22] onun yerine (A = LDLT) parçalama
yöntemi kullanılmıştır. Bu yöntemle Eş. 3.13’de oluşturulmuş UT matrisi aşağıdaki
gibi ifade edilebilir.
u1 0 0 0 0 0 0 0 0 0 0 0 r2 u2 0 0 0 0 0 0 0 0 0 0 0 r3 u3 0 0 0 0 0 0 0 0 0 c4 0 0 u4 0 0 0 0 0 0 0 0 0 c5 0 r5 u5 0 0 0 0 0 0 0 0 0 c6 0 r6 u6 0 0 0 0 0 0 v7 0 0 0 0 0 u7 0 0 0 0 0 0 v8 0 0 0 0 r8 u8 0 0 0 0 0 0 v9 0 0 0 0 r9 u9 0 0 0 0 0 0 v10 0 0 c10 0 0 u10 0 0 0 0 0 0 v11 0 0 c11 0 r11 u11 0 0 0 0 0 0 v12 0 0 c12 0 r12 u12
Şekil 4.5 Şekil 4.6’teki modelin UT matrisi.
32
Şekil 4.6 Örnek bir model
Şekil 4.5‘de görüldüğü gibi Şekil 4.1‘de ifade edilen ana köşegen haricindeki
köşegenlerde tam doluluk yoktur. Bu durum, modeldeki her hücrenin komşu
sayısının 3 ve 6 arasında değişmesinden ve bu komşulukların konumlarına göre alt
ve üst üçgen içinde kalmasından kaynaklanır. Örneğin; Eş. 3.18’deki 푣 değerinin
bulunması için UT katsayı matrisi incelendiğinde sadece 푣 değerinin hesaplanmış
olması gerektiği görülebilir. Bu durum UT matrisini forward substitution ile çözerken
ardıl bağlılıkların kırılmasını sağlayabilmektedir. Bu sayede forward substitution
gerçekleştiriminde koşutluğu arttırabilecek yaklaşımlar izlenebilmektedir.
Forward substitution ile back substitution algoritmalarının birbirinin zıttı şeklinde
gerçekleştirildiği için Bölüm 4.3.1 kapsamında back substitution algoritmasına ve U
matrisinin çözümüne değinilmeyecektir.
33
4.3.2. Forward Substitution’ın üç boyutlu sonlu fark yöntemi için koşut çözülmesi
Bölüm 4.3.1 değinildiği gibi modelin özellikleri, forward substitution’ın ardıl olarak
çözülme gerekliliğini esnetmektedir. Şekil 4.6’te gösterilen modelin forward
substitution’la çözülmesindeki bağlılıklar Şekil 4.7‘te görülebilir.
Şekil 4.7 Örnek modelin koşut işletilmesindeki bağlılıklar ve aşamalar
Her bir aşamada Şekil 4.7‘te daireler ile gösterilen değerlerin başka hiçbir
sorundan etkilenmeden aynı anda bitirildiği varsayıldığında modelin tamamının
çözülmesi beş aşamada tamamlanabilir.
4.3.3. Modelin GİB üzerinde yerleştirimi
GİB üzerinde gerçekleştirimde örnek modeldekinin aksine boyutları oldukça büyük
olan gerçek sorunlarda modelin bloklara bölünmesi öncelikli sorundur. Örneğin,
model 16x16’lık altmatrislere bölünebilir. Bu yaklaşımda iki boyutlu matrisin tercih
edilmesinin sebebi yatay (yanlar ve üst-alt) komşulukların değerlerinin elde
edilmesini ve bağlılıklarının kontrolünün kolaylaştırılmasıdır. 64 satır ve 128
34
sütundan oluşan tek katmanlı bir model Şekil 4.8’deki gibi GİB üzerinde parçalara
ayrılmıştır.
Şekil 4.8 128x64 boyutlarındaki bir modelin GİB üzerinde gösterimi.
Çok katmanlı modellerde numaralandırma ilk katmanın devamı şeklinde
kullanılmıştır. Örneğin; üç katmanlı aynı boyutlarda bir modelin ikinci katmanı 33-
64, üçüncü katmanı ise 65-96 aralığı ile ifade edilir.
GİB üzerinde aynen gerçek model üzerinde çalışılıyormuş gibi bağlılıklar
denetlenmektedir. 16x16’lık alt matrisler, modeldeki hücrelermiş gibi ele
alınmaktadır. Yani altmatristeki 256 elemanın tamamının hesaplanması ardından
ona bağlılığı olan altmatrisler çalışmaya başlamaktadır.
4.3.4. Modelin GİB üzerindeki yerleştirimine bağlı yöntemler
GİB üzerinde belli sayıda çekirdek ve bu çekirdeklerin gruplandırıldığı bloklar
vardır. Bu blok sayısı GİB üzerinde eş zamanlı çalışacak blok sayısını da
kısıtlandırır. Aynı zamanda GİB’de eş zamanlı çalışan bloklar tamamlanmadan işini
bitiren çekirdeklere yeni bloklar anahtarlanamamaktadır. Bu sebeple verilerin GİB’e
bağlılıkları azaltacak bir şekilde yerleştirilmesi, en fazla koşutluğu sağlamanın ön
35
koşuludur. Bu bölümde iki farklı yerleştirme yöntemi karşılaştırılacaktır. Bu
yöntemler aşağıdaki gibidir;
Satır-sütun-katman yerleştirimi
Katman-satır-sütun yerleştirimi
Bloklar arası iletişim için iki yöntemde de global bellekte blok sayısı kadar elemanı
bulunan ve blokların durumlarını saklayan bir dizi tutulmuştur. Bu dizi bekleyen
blokların bağlılıkları bulunan blokların işlerini tamamlayıp tamamlamadığı
denetlemesi sağlamaktadır. GİB’e atanmış ama bekleyen bir blok bu dizi ile etkin
hale gelip işlemlerini tamamladıktan sonra diziyi güncellemektedir.
4.3.4.1. Satır-sütun-katman(SSK) yerleştirimi Bu yerleştirim şeklinde iki boyutlu ızgaranın x ekseni sütunları, y ekseni ise satırları
ve katmanları içerir. Y eksenindeki değerler bir katmandaki tüm satırların
tamamlanmasından sonra ardıl katmanı ifade eder. Şekil 4.8’teki tek boyutlu bir
modelin GİB’de yerleşimi görülebilir. Çok katmanlı bir modelin GİB üzerinde bu
yöntemle yerleştirimi Şekil 4.9’te görülebilir. Şekilde katmanlar farklı renklerle ifade
edilmiştir. İlk katman turkuaz, ikinci katman açık sarı, üçüncü katman açık turuncu
ve dördüncü katman da pembe ile renklendirilmiştir. Gösterimde kolaylık sağlamak
için matrisin gerçekte bağlı bulunduğu yerler oklarla bağlanmıştır.
36
1 2 9
3 4 11
10
12
17 18
19 20
5 6 13
7 8 15
14
16
21 22
23 24
0-15
0-15
16-31
16-31
32-47
0-15
0-15 16-310-15 16-31
16-31
32-47
0-15
16-31
32-47
0-15
16-31
32-47
Şekil 4.9 48 satır, 32 sütun ve 4 katmandan oluşan bir modelin GİB üzerine
satır-sütun-katman yerleştirimi
4.3.4.2. Katman-satır-sütun(KSS) yerleştirimi Bu yerleştirim şeklinde iki boyutlu ızgaranın x ekseni katmanları y ekseni ise
satırları içerir. Y eksenindeki ızgaranın bir sütununun modelin bir katmanının tek
boyutlu olarak ifade edilmesi olarak düşünülebilir.Şekil 4.10’de Şekil 4.9’da önceki
yöntemle gösterilmiş modelin bu yöntemle GİB üzerine yerleştirimi görülebilir.
37
Şekil 4.10 48 satır, 32 sütun ve 4 katmandan oluşan bir modelin GİB üzerine
katman-satır-sütun yerleştirimi
4.3.4.3. Yerleştirim yöntemlerinin başarımlarının karşılaştırılması
Bu bölümde önceki iki bölümde anlatılan yerleştirim yöntemleri karşılaştırılacak ve
başarım sonuçları verilecektir. Şekil 4.9 ve Şekil 4.10’de tanımlanan model
yerleştirim yöntemlerini görselleştirmek amacı gütmektedir. Normal koşullarda
burada tanımlanandan büyük boyutlarda modellerin çözülmesi gereklidir. Bu da bir
katmanda bulunan hücre sayısının artması ve buna bağlı olarak çalıştırılan blok
sayısının artmasına sebep olur. Farklı boyutlarda modellerin iki yerleştirim yöntemi
ve işlemcide gerçekleştirim için denenmesi ile elde edilen sonuçlar aşağıda
gözlemlenebilir.
38
Şekil 4.11 Sütun sayısı 100-2000 aralığında değiştirilen 1000 satır ve 8
katmandan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre
Şekil 4.12 Satır sayısı 100-2000 aralığında değiştirilen 1000 sütun ve 8
katmandan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre
0
100
200
300
400
500
600
700
800
900
100
175
250
325
400
475
550
625
700
775
850
925
1000
1075
1150
1225
1300
1375
1450
1525
1600
1675
1750
1825
1900
1975
Süre
(ms)
Sütun Sayısı
KSS
AİB
SSK
0
100
200
300
400
500
600
700
800
900
100
175
250
325
400
475
550
625
700
775
850
925
1000
1075
1150
1225
1300
1375
1450
1525
1600
1675
1750
1825
1900
1975
Süre
(ms)
Satır Sayısı
KSS
AİB
SSK
39
Şekil 4.11’de SSK yönteminde blokların satır öncelikli yerleştirilmesinden dolayı bir
satırın boyutunu belirleyen sütun sayısının başarıma doğrudan etkisi bulunduğu
görülebilmektedir. 400 sütunluk matris boyutlarına kadar SSK, AİB ile yakın bir
başarım gösterse de sütun sayısının artmasına bağlı olarak AİB’den çok düşük
başarım göstermektedir. Bunun nedeni büyük boyutlarda dikey komşulukların
koşut hesaplanmasından zaten istifade edemeyen bu yerleştirimin, yatay
komşuluklardan uzun satır boyutlarında da faydalanamamasıdır.
Şekil 4.12 ve Şekil 4.13’da ise SSK’nın bir satırı GİB’e sığmayan matrisler için
doğrusal bir sonuç ürettiği gözlenebilir. SSK’nın başarımını etkileyen tek etmenin
sütun sayısı olduğu söylenebilir. Eğer sütun sayısı GİB’e sığmayacak
boyutlardaysa SSK’nın başarım elde edemediği gözlenebilir.
Şekil 4.13 Katman sayısı 1-16 aralığında değiştirilen 1000 satır ve 1000
sütundan oluşan modelin üç farklı yöntem için forward subs’ın aldığı süre
0
200
400
600
800
1000
1200
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Süre
(ms)
Katman Sayısı
KSS
AİB
SSK
40
KSS yöntemi SSK yönteminin aksine matrisin satır ve sütun boyutlarının
değişmesinden etkilenmemektedir. KSS yönteminin başarımını etkileyen tek
etmenin modelin katman sayısı olduğu Şekil 4.13’da gözlemlenebilir.
Şekil 4.14 KSS yönteminin AİB’ye göre hızlanması
Şekil 4.14’de görüldüğü gibi KSS yönteminin başarımında katman sayısı önemli bir
rol oynamaktadır. Katman sayısının çok azalması ya da çok artması KSS’nin
koşutluğunu SSK yönteminden daha fazla kaybetmesine sebep olmaktadır.
KSS’nin en iyi başarım gösterdiği aralık 6 ila 16 olarak saptanmıştır.
4.3.4.4. Modelin GİB üzerinde yerleştirimi hakkında sonuçlar
Bu bölüm kapsamında iki farklı yerleştirim yöntemi denenmiş ve başarımları
sınanmıştır. Bu yöntemlerden KSS yönteminin katman boyutunun belirli sınırlar
içerisinde kalması durumunda başarımının doğrudan bir yerleştirimden(SSK) daha
başarılı olduğu gözlemlenmiştir.
4.3.4.5. Modelin blok içinde yerleştirimi
GİB üzerinde modelin yerleştirim yöntemlerinin haricinde blok içinde modelin
yerleştirimi de başarımı etkileyen etkenlerden biridir. Bölüm Error! Reference
source not found.’de değinildiği gibi blok içinde model 16x16 boyutlarında
altmatrislere bölünmüştür. Buna başka bir seçenek olarak 8x8’lik boyutlarda alt
0
0,5
1
1,5
2
2,5
3
3,5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Hız
lanm
a
Katman Sayısı
KSS
41
matrisler de denenmiştir. Bu bölümde bu iki yöntem karşılaştırılacak ve koşutluğu
arttırmak için yapılmış olanlar anlatılacaktır.
4.3.4.6. Blok içi yerleştirimde koşutluğun arttırılması için kullanılan yöntemler
Blok içi yerleştirim yöntemleri ile koşutluğun arttırılması GİB üzerinde yerleştirimin
koşutluğunun arttırılması için şarttır. Bunun sebebi, sorunun GİB üzerinde blokların
önceki blokun tüm değerleri hesaplanmadan işleme başlayamamasıdır. Bu
soyutlama blok içi koşutluğun az olmasının etkilerinin büyüyerek sürenin
uzamasına sebebiyet verir.
Gerçekleştirimimizde bu tercihin yapılma sebebi her öğe için global belleğe
aktarımlardan dolayı oluşan yavaşlamayı azaltma amacı gütmektedir. Bu sebeple
farklı bloklarda bulunan öğelerin önceki bloklardan sonra ardıl bir şekilde
çalışacağını farkında olmak gereklidir.
16 S
atır
Şekil 4.15 GİB’de blok içi iş parçacıklarının yerleşimi
Forward substitution yönteminin çözümünde yatay bağlılıkların en yüksek
koşutlukta ele alınabilmesi başarım için önem taşımaktadır. Yatay bağlılıklar satır
ve sütun olarak iki farklı yöndedir. Bu sebeple blok içi bir yapı seçilirken iki boyutlu
42
bir yapının kullanılması başarımı arttırmaktadır. 4 satır ve 16 sütundan oluşan bir
modelin tek boyutlu 16’lık blok yerleştirimi ve 4x4 boyutlarında bir alt matris ile
çözülmesinde en iyi durumda her bir öğenin çözülmesi Şekil 4.16’de gösterilmiştir.
Her bir blok farklı renklerle ifade edilmiştir ve öğelerin içindeki sayılar o öğenin
çözüldüğü aşama numarasını göstermektedir. İki blok içi yerleştirimin için sadece
bir bloğun GİB’e sığabildiği varsayılırsa, çözümleri için gereken aşama sayısı tek
boyut için Eş. 4.11 eşitliği ile, iki boyut için Eş. 4.12 ile bulunabilir.
푎 = 푁 Eş. 4.11
푎 =푁푥푦
(푥 + 푦 − 1) Eş. 4.12
Bu eşitliklerde kullanılan değişkenler aşağıda açıklanmıştır.
a : Çözüm için gereken aşama sayısı N : Modeldeki eleman sayısı x : Blok sütun sayısı y : Blok satır sayısı
Şekil 4.16 4 satır ve 16 sütundan oluşan bir modelin tek boyutlu 16’lık blok
yerleştirimi(üst) ve 4x4 boyutlarında bir alt matris yerleştirimi(alt) ile çözülmesi.
Eş. 4.11 ve Eş. 4.12 eşitliklerinden anlaşılacağı üzere tek boyutlu gerçekleştirim,
büyük bir başarım kaybına sebep olmaktadır.
43
Bölüm 2.3.1’de değinildiği gibi bloklar içlerinde kaç iş parçacığı bulundurduğundan
bağımsız olarak 32 iş parçacıklık warp’lar halinde çalıştırılmaktadır. 16x16’lık bir
blok içi yerleşim ile aynı anda 256 adet iş parçacığı başlatıldığında, ilk 32 adet iş
parçacığı koşut olarak çalışmakta bunun ardından ardıl 32’lik kesimlere
geçilmektedir. İki boyutlu olarak ele alınan blok içi yerleştirimde bloğun satır ve
sütun sayısı bir warp’ın bitirilmesi için gereken aşama sayısını etkilemektedir. Bir
warp’ı çözmek için gereken aşama sayısı Eş. 4.13 eşitliği ile hesaplanabilir.
푎 =푤푥 − 1 + 푥 Eş. 4.13
Bu eşitlikte kullanılan değişkenler aşağıda açıklanmıştır.
a : Warp’ın çözümü için gereken aşama sayısı w : Warp boyutu x : Blok sütun sayısı
Güncel GİB’lerde warp boyutu 32 olduğu düşünülürse ancak bloktaki sütun
sayısının 32’den az olması halinde warp içi koşutluk sağlanabileceği görülebilir.
Farklı sütun sayısı değerleri için bloğun çözümü için gereken aşama sayısı Şekil
4.17’te görülebilir. En az aşama sayısı ile çözüme 5-7 aralığındaki sütun sayısı
değerlerinde ulaşıldığı görülmektedir.
GİB’deki blok boyutlarının warp boyutunun katları şeklinde olması başarımın
arttırımı için gereklidir [7]. GİB’de blok boyutunun 32’nin katları olabilmesi için de iki
boyutun da 2’nin katları şeklinde atanması gereklidir. Şekil 4.17’te hesaplanan
değerlerden 2’nin katları olan 4 ve 8’in 11 aşama, 2 ve 16’nın da 17 aşama ile
çözüldüğü bulunmuştur. Dört ve iki değerleri kare bir yapı için çok küçük oldukları
için yoksayılmış, 8x8 ve 16x16’lık blok yapıları için yapılan denemeler yapılmıştır.
Bu denemeler bir sonraki bölümde ele alınacaktır.
44
Şekil 4.17 Bir warp’ta çözüm için gereken aşama sayısının, bloğun sütun
sayısına göre değişimi
4.3.4.7. Blok içi yerleştirim yöntemlerinin karşılaştırılması
Bu bölümde 8x8’lik ve 16x16’lık blok içi yerleştirim yöntemlerinin farklı satır ve
sütun boyutlarına göre başarımları karşılaştırılacaktır.
0
5
10
15
20
25
30
35
1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930313233343536
Aşam
a Sa
yısı
Sütun Sayısı
45
Şekil 4.18 Sütun sayısı 100-2000 aralığında değiştirilen 1000 satır ve 8
katmandan oluşan modelin iki yöntem için forward subs’ın aldığı süre
Şekil 4.18 ve Şekil 4.19’da görüldüğü üzere 16x16’lık yerleşim 8x8’lik yerleşimden
daha iyi bir başarım göstermiştir. 8x8’lik yerleşim neredeyse doğrusal bir grafik
oluşturmaktadır. 16x16’lık yerleşimin daha iniş çıkışlı bir grafiğinin olmasının
sebebi modelin 16x16’lık parçalara bölümlenmesidir. Bu bölümlemeden dolayı GİB
üzerinde çalıştırılan iş parçacıklarının 8x8’lik yerleşimden daha fazla bir kısmı
matris dışındaki konumlara denk gelmekte ve çalışmamaktadır. m, n, k boyutlarına
sahip bir modelin x blok boyutları ile çalıştırılması için başlatılması gereken iş
parçacığı sayısı Eş. 4.14 ile bulunabilir;
푁 =푚푥 ×
푛푥 × 푥 × 푘 Eş. 4.14
0
50
100
150
200
250
300
350
400
100
175
250
325
400
475
550
625
700
775
850
925
1000
1075
1150
1225
1300
1375
1450
1525
1600
1675
1750
1825
1900
1975
Süre
(ms)
Sütun Sayısı
16x16
8x8
46
Şekil 4.19 Satır sayısı 100-2000 aralığında değiştirilen 1000 sütun ve 8
katmandan oluşan modelin iki yöntem için forward subs’ın aldığı süre
4.3.5. Modelin GİB üzerindeki yerleştiriminden bağımsız bir yöntem
Önceki bölümlerde forward ve backward substitution gerçekleştirilirken modelin
GİB üzerinde bloklara ayrılmasında katmanlar da ayrı bloklar oluşturacak şekilde
düşünülmüştür. Bunun zıttına modeli üç boyutlu olarak değil de iki boyutlu olarak
da GİB üzerinde çözmek mümkündür. Bu durum modelin üçüncü boyutunda
bulunan katmanların blok içinde ele alınmasına ek olarak paylaşımlı belleğin ve
global belleğin etkin şekilde kullanılması ile mümkündür.
Bu yöntemde model katmanlarından bağımsız bir şekilde GİB’in bloklarına
atanmaktadır, yani iki boyutlu bir çözüm izlenimi oluşmaktadır. Fakat blok bir
katmandaki işini bitirdikten sonra bir sonraki katmana geçerek üçüncü boyutu blok
içinde çözmektedir. Şekil 4.9’ta gösterilmiş olan 48 satır, 32 sütun ve 4 katmandan
oluşan modelin GİB üzerine yerleştirimi Şekil 4.20’de görülebilir. Değinilen diğer
yöntemlerin aksine bu yöntemde bir katmanı GİB üzerine yerleştirmeye yetecek
sayıda blok yeterlidir.
0
50
100
150
200
250
300
350
0000000000000000000000000000000000000000000000000000000
Süre
(ms)
Satır Sayısı
16x16
8x8
47
Şekil 4.20 GİB’de dört katmanlı bir modelin yerleştirimi.
Şekil 4.20’yi ele alırsak altı adet blok tanımlamak yeterlidir. Bu bloklar diğer
katmanlarda bulunan aynı aralıktaki değerlerden de sorumludurlar. Her ne kadar
önceki yöntemlerden az sayıda blok oluşturulsa da global bellekte blokların
tamamlama durumlarını saklayan dizi 푏푙표푘푠푎푦횤푠횤 × 푘푎푡푚푎푛푠푎푦횤푠횤 kadar elemana
sahiptir. Bu dizi blokların katman bazında işini tamamladığı zaman global bellekte
kendi durumunu saklayan alanı güncellemesine imkan vermek için bu boyutta
tanımlanmıştır. Böylece blok tüm katmanları bitirmeden diğer bloklarla iletişime
geçerek bekleyen blokların mümkün olan en erken zamanda çalışmaya
başlamalarını sağlamaktadır.
Global bellekten diğer bloklar tarafından hesaplanan değerler blok içine
çekildiğinde paylaşımlı bellekte saklanan bir alt matriste saklanmaktadır. Bu alt
matris blok içinde işlenen değerleri de içermekte olduğu için diğer bloklardan gelen
değerler saklamaya ayrılmış bir satır ve bir sütuna sahiptir. 푥 × 푦 boyutlarında alt
matrisi hesaplamak için (푥 + 1) × (푦 + 1) boyutlarında yer ayrılmaktadır. Bu ek
satır ve sütun, forward substitution için Şekil 4.21’de turuncu renkle gösterildiği
gibidir.
48
Şekil 4.21 Paylaşımlı bellekte saklanan 푥 × 푦 boyutlarındaki veriyi işleyen(푥 +
1) × (푦 + 1) boyutlarındaki alt matris. Turuncu kareler komşu
bloklardan gelen, mavi kareler blok içinde hesaplanan değerleri
tutmaktadır.
Blok içinde yapılan hesaplamalarda veriler paylaşımlı bellek üzerinden iş
parçacıkları arasında iletilmektedir. Tüm iş parçacıkları o katmanı hesaplamak için
gereken işlerini tamamladıktan sonra blok içindeki veriler global belleğe
aktarılmakta ve bekleyen bloklar uyarılmaktadır.
Komşu katman her zaman blok içinde hesaplandığı için forward substitution
algoritmasında ihtiyaç duyulan önceki katmandan gerekli olan veriler için hiçbir
zaman global bellek erişimine ihtiyaç duyulmamaktadır. Bu veriler bir önceki
katman hesaplanırken zaten paylaşımlı bellekte kalmış olan hesaplanmış verilerdir.
Büyük miktarda verinin global bellekten okunması ihtiyacını ortadan kaldıran bu
yöntem hızlandırmaya katkıda bulunmaktadır.
4.3.5.1. GİB yerleşiminden bağımsız yöntemin başarımı ve diğer yöntemlerle
karşılaştırılması GİB üzerinde yerleştirimden bağımsız yöntem denenirken hem boyutların ayrı ayrı
başarıma etkisi hem de küp şeklinde bir modelin başarımı ölçülmüştür. Aynı
zamanda önceki yöntemlerle bu veriler karşılaştırılmıştır.
Katmanların bağlılıkları blok içinde yönetildiği için bu boyutun değişimi diğer
boyutlar sabit tutulduğuna en fazla başarımı arttıran etmen olmuştur. Şekil 4.22’de
görüldüğü üzere katman değerindeki artış 140 kata kadar hızlanmaya imkan
vermektedir. Bu değeri sütun ve satır sayısı takip etmektedir. Satır sayısının bu
49
durumda diğer boyutlara göre düşük bir başarım göstermesi verilerin elde edilirken
16 × 4boyutlarında bloklar tanımlanmış olmasıdır. Bu blok boyutu, bir blok içine
az sayıda satır sığmasına sebep olduğundan dolayı tüm modelin çözülmesi için
daha çok blokun anahtarlanması ve haliyle global bellek erişimlerini arttırması
sebebi ile olumsuz bir etkiye sebep olmuştur. Mevcut yeraltı su kaynağı
modellerine bağlı olarak seçilen bu değerin değiştirilmesi satır ve sütun
niceliklerine bağlı olarak gerçekleştirilebilir. Böylece her modele uygun değerler
bulunabilir.
Şekil 4.22 Farklı model boyutlarına bağlı hızlanma oranları. Ölçümler alınırken
diğer boyutlar 100 değerine sabitlenmiş şekilde belirtilen boyutun büyüklüğü
değiştirilmiştir.
Ayrıca üç boyutlu model en büyük olan boyutunun, katman yerine, blokun içinde
çözülmesi ile her koşulda en fazla başarımın ve hızlanmanın elde edilmesi
mümkündür. Bu da Şekil 4.22’da görülebileceği üzere 140 kat hızlanmadır.
50
60
70
80
90
100
110
120
130
140
150
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
1400
1500
1600
1700
1800
1900
2000
Hız
lanm
a
Boyut Büyüklüğü
Sütun
Satır
Katman
50
Şekil 4.23 Küp bir modelin farklı kenar boyutlarına bağlı hızlanma oranları.
Tüm boyutların aynı anda artması ve her birinin etkisinin incelenmesi için küp
şeklinde model de denenmiştir. Bu model de küpün kenarlarının boyutunun
arttırılarak belli bir değeri geçmesinden sonra katman sayısının arttırılması ile elde
edilen 140 kat hızlanmaya erişmiştir. Fakat düşük boyutlardaki örneğin 50 × 50 ×
50 modellerde hızlanma 3 katta kalmıştır.
Önceki yöntemlerden başarımı en yüksek olan KSS yerleştiriminin yeni yöntem ile
modelin satır, sütun boyutarının değişmesine bağlı hızlanma oranları Şekil 4.24’de
görülebilir. Az katmana sahip modellerde, yeni yöntem kullanılarak eski yönteme
göre 1.5 ve 3 kat arası hızlanma elde edilmiştir.
0
20
40
60
80
100
120
140
160
50 60 70 80 90 100
110
120
130
140
150
160
170
180
190
200
210
220
230
240
250
Hız
lanm
a
Küpün Bir Kenarının Boyutu
Hızlanma
51
Şekil 4.24 Değişik satır ve sütun sayılarına sahip modellerde yeni yöntem ile
KSS'ye göre elde edilen hızlanma. Ölçüm alınırken katman 8’e, diğer boyut ise
1000’e sabitlenmiştir.
KSS ile karşılaştırıldığında elde edilen hızlanma Şekil 4.25’de görülebilir. Yine
KSS’ye göre bariz bir iyileşme vardır. Düşük katman boyutlarında aradaki fark belli
olmasa da daha önce Şekil 4.22’da da görülebileceği gibi yüksek katman sayısında
hızlanma daha da artmaktadır. Önceki yöntemlerde katman sayısı arttığı zaman
oluşan başarım kaybı bu yöntemle başarım arttırımına dönüşmüştür. Bu sebeple
daha kararlı ve yüksek başarımlı bu yöntem diğer yöntemlere göre daha üstündür.
0
0,5
1
1,5
2
2,5
3
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
1400
1500
1600
1700
1800
1900
2000
Hız
lanm
a
Boyutun Büyüklüğü
Sütun
Satır
52
Şekil 4.25 Değişik katman sayılarına sahip modellerde KSS'ye göre elde edilen
hızlanma. Modelin diğer boyutları 1000'e sabitlenmiştir.
4.3.6. MICCG Gerçekleştiriminin Başarımı
MICCG yöntemi, Eş. 3.13’te tanımlanmış olan D köşegen matrisinin
hesaplanmasına ihtiyaç duymaktadır. Bu matris sadece ilk iç yinelemelerde
hesaplandığı için GİB’e aktarılmamıştır. İlk yinelemelerde D matrisi ve forward
substitution AİB tarafından yapılmakta ve bu veriler GİB’e aktarılmaktadır. Bu
değerler hesaplandıktan sonra diğer yinelemelerde AİB ve GİB arasında iletişim
olmamaktadır. Bu sebeple ilk yineleme ve onu takip eden yinelemelerde MICCG
yöntemi ile preconditioned matrisin elde edilmesi farklı süreler almaktadır. Bu
süreler ve hızlanma oranı Çizelge 4.7‘te görülebilir.
Çizelge 4.7 MICCG yöntemi ile preconditioned matrisin elde edilmesi için AİB ve
GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms) Hızlanma
MICCG(ilk iç yineleme) 107,905 88,518 1,22X
0
0,5
1
1,5
2
2,5
3
3,5
4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Hız
lanm
a
Katman Sayısı
Katman
53
MICCG(sonraki iç yinelemeler) 60,453 14,658 4,12X
Görüldüğü üzere ilk yinelemede düşük verim elde edilse de ardıl iç yinelemeler
başarımını arttırmaktadır. Örneğin 30 iç yineleme gerektiren bir çözüm ele
alındığında preconditioned matrisin hesaplanması için harcanan işin GİB
gerçekleştirimi ile 3,62 kat hızlandığı söylenebilir.
4.4. POLCG Gerçekleştirimi ve Başarımı
POLCG, Eş. 3.22’deki gibi üç ardıl eşitlikle ifade edilmiştir. Bu eşitliklerin her biri
aynı işi farklı verilerle yapmaktadır. Her adımda değişenler c katsayısı ve A
matrisinin çarpıldığı vektörün içeriğidir. Bu sebeple çözümü için tek bir koşut işlev
tasarlanmıştır. Aynı koşut işlev farklı değişkenlerle üç kere ard arda çağrılarak
POLCG çözülmektedir.
POLCG, tamamen veri bağımsız bir algoritma olduğu için GİB üzerinde çok yüksek
başarım elde edilerek çalıştırılabilmektedir. POLCG yöntemi ile preconditioned
matrisin elde edilmesi için AİB ve GİB üzerinde gerçekleştirimin aldığı süre ve
hızlanma oranı Çizelge 4.8‘te görülebilir.
Çizelge 4.8 POLCG yöntemi ile preconditioned matrisin elde edilmesi için AİB ve
GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms) Hızlanma
POLCG 150,120 3,543 42,37X
POLCG ile örnek girdide 42 kat hızlanma sağlanabilmiştir.
4.5. MICCG ve POLCG Yöntemleri ile Preconditioned Conjugate Gradient Gerçekleştirimin Başarımlarının Karşılaştırılması
Önceki iki bölümde MICCG ve POLCG ile preconditioned matrisin elde edilmesi
için harcanan süreler ve başarımları karşılaştırılmıştır. Bu bölümde ise bu
preconditioned matris kullanılarak conjugate gradient yönteminin çözülmesinde
harcanan süreler karşılaştırılacaktır. Conjugate gradient yöntemi belirli bir sınır
54
koşula yakınsamasına göre sonlanan bir sayısal çözümleme yöntemi olduğu için
belirli sayıda yineleme yapıp bu yinelemelerin ardından da sınır koşulu
denetlemektedir. Yinelemeler de kendi içinde iç yinelemelere bölünebilmekte ve
böylece yakınsama hızlandırılmaya çalışılmaktadır. Çizelge 4.9‘da verilen süre ve
hızlanma değerleri POLCG ve MICCG için bir iç yineleme için ölçülmüş ve
hesaplanmıştır.
Çizelge 4.9 MICCG ve POLCG yöntemleri ile conjugate gradient yönteminin bir iç
yinelemesi için AİB ve GİB üzerinde gerçekleştirimin aldığı süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms) Hızlanma
MICCG(ilk iç yineleme) 182,838 96,387 1,89X
MICCG(sonraki iç yinelemeler) 140,712 27,483 5,12X
POLCG 230,285 14,786 15,57X
Önceki bölümlerde belirtildiği gibi MICCG’nin ilk iç yinelemesinde D matrisinin
hesaplanması gibi fazladan işler olduğu için çizelgede ilk ve sonraki yinelemelere
ayrı olarak yer verilmiştir. İç yinelemeler için Çizelge 4.9’daki gibi hızlanma elde
edilse de, iç yineleme sayısı kullanıcı tarafından ve algoritmanın yakınsamasına
bağlı olarak değişir. Bu sebeple yinelemenin ilk değerlerin atanması ve
sonlandırılması gibi ek yükler için harcanan süre de hesaba katılmalıdır. Bu
değerler Çizelge 4.10’de görülebilir.
Çizelge 4.10 MICCG ve POLCG yöntemleri ile bir yinelemenin ek yükü için AİB ve
GİB gerçekleştiriminde harcanan süre ve hızlanma oranı Yöntem AİB(ms) GİB(ms)
MICCG 89,392 120,715
POLCG 179,003 217,818
Bu değerler de düşünüldüğünde 30 iç yineleme yapan çalıştırma ile tek bir iç
yineleme yapan çalıştırma arasında başarım farklı olmaktadır. Bu koşullar için
çalışma süreleri Çizelge 4.11’de görülebilir
55
Çizelge 4.11 MICCG ve POLCG yöntemleri ile farklı iç yineleme sayısına bağlı
olarak AİB ve GİB gerçekleştiriminde harcanan süre ve hızlanma oranı
Yöntem İç Yineleme Sayısı AİB(ms) GİB(ms) Hızlanma
MICCG 1 272,230 217,102 1,25X
MICCG 30 4352,878 1014,109 4,29X
POLCG 1 409,288 232,604 1,76X
POLCG 30 5600,375 661,398 8,46X
Bu sebeple yöntemlerin sınır koşula yakınsaması için gereken yineleme sayısı ve
yinelemelerin içerdiği iç yineleme sayısı da başarım için önemlidir. Görüldüğü gibi
POLCG yöntemi MICCG’ye göre daha yüksek başarım sağlamaktadır.
POLCG, GİB üzerinde gerçekleştirimde her durumda MICCG’ye göre daha yüksek
başarım göstermiştir. Fakat bir diğer ölçüt de preconditioner yönteminin
yakınsayabilme başarısıdır. Bu özellik koşut programlama ile arttırılabilecek bir
durum değildir. Çizelge 4.12‘de görüldüğü gibi GİB gerçekleştirimlerinde MICCG ile
çözüm 3 bin saniyenin biraz üzerinde vakit alırken bu POLCG’de 8 bin saniyeyi
aşmaktadır. Bu nedenle her ne kadar POLCG, MICCG’den daha yüksek hızlanma
oranlarına sahipse de bir yeraltı su kaynakları dizgesinin çözülmesinde son
kullanıcı için en büyük getiriyi daha etkin bir yöntem olduğu için MICCG
sağlamıştır.
Çizelge 4.12 MICCG ve POLCG yöntemleri için MODFLOW uygulamasıyla örnek
modelin çözülmesinde AİB ve GİB gerçekleştirimlerinde harcanan süre ve
hızlanma oranları Yöntem AİB(sn) GİB(sn) Hızlanma
MICCG 9474 3089 3,06X
POLCG 38638 8157 4,73X
56
57
5. SONUÇ VE ÖNERİLER
GİB’ler, yazılım geliştirme ortamlarının iyileşmesiyle koşut programlamada etkin bir
şekilde kullanılmaktadır. GİB’ler mimarilerine uygun algoritmalarda, yüksek
başarımlı hesaplama alanında bilgisayar kümelerinin yerine geçmektedir. Özellikle
sayısal çözümleme konusu, yüksek karmaşıklıkta algoritmalar içermektedir. Bu
daldaki algoritmaların GİB gibi düşük maliyetli donanımlar kullanılarak
gerçekleştirilmesi hem bilimsel hem de ticari uygulamalara doğrudan etki
etmektedir.
Bu çalışmada, sayısal çözümleme algoritmalarından preconditioned conjugate
gradient algoritması GİB üzerinde MODFLOW adlı yazılımla bütünleşik halde
gerçekleştirilmiştir. Böylece yeraltı su kaynaklarının modellenmesinde ve
analizinde harcanan vakit azaltılmıştır. Bu hızlanma GİB’ler kullanılarak
gerçekleştirildiği için son kullanıcıya düşük maliyetle ulaşma imkanı
bulabilmektedir.
Conjugate gradient yöntemi için geliştirilen iki preconditioning yönteminden
POLCG vektör bilgisayar mimarilerine uygun bir algoritma olduğu için kolaylıkla
GİB’e uyarlanmıştır. GİB’de iyi bir hızlanma oranı elde edilmiş olmasına rağmen,
bu yöntem sonuca yakınsama konusunda düşük başarım göstermektedir. Bu da
tez kapsamında MICCG üzerine daha çok yoğunlaşılmasına sebep olmuştur.
GİB donanım mimarisine uygun olmayan ama MICCG’nin başarımı için hassas
öneme sahip olan forward ve back substitution algoritmalarının gerçekleştirilmesi
MICCG’nin hızlı yakınsama özelliğinin GİB’e aktarılabilmesi için bir gereklilik
olmuştur. GİB programlama modeli sebebiyle bu kesimlerin GİB üzerinde
çalıştırılamaması fazladan GİB ve AİB arasında veri aktarımı ile ek yük
oluşturmakta idi. Bu sebeple aynı hızda doğru sonuçların GİB’de elde edilmesi bile
ek yükten kurtulunmasıyla bir hızlanma ifade etmektektedir.
58
Bu yüzden bu algoritmaların gerçekleştirilmesine tez kapsamında büyük önem
verilmiştir. GİB üzerindeki yerleştirime bağlı ve yerleştirimden bağımsız yöntemler,
blok içi yerleştirimi ve iş parçacıklarının yönetilmesi konuları denenmiştir. Veri
bağımsız algoritmalarda yüksek başarım sağlayan bir mimariye sahip olan GİB,
gerçekleştirimiz sayesinde ardıllığı ve veri bağımlılığı yüksek Back ve forward
substitution algoritmalarında 140 kata kadar hızlanma sağlamıştır. Back ve forward
substitution algoritmalarının kullanım alanları geniş olduğundan, bu algoritmalar
için sunulan yaklaşım başka yöntemlerin gerçekleştirilmesinde de temel olarak
kullanılabilecektir.
Tez kapsamında yapılan çalışma, back ve forward substitution algoritmaları da
dahil olmak üzere preconditioned conjugate gradient yönteminin GİB üzerinde
çalışan, bilgimiz dahilinde olan, ilk gerçekleştirimidir.
Çalışma gerçekleştirilirken kayan noktalı sayıların farklı donanımlarda
hesaplanmasından doğan hatalar dikkate alınmıştır. Bu hataların en aza
indirgenmesi için GİB’de 64 ikillik kayan noktalı sayılar kullanılmıştır. Fakat GİB’de
64 ikillik kayan noktalı sayılar mevcut donanımların kısıtları sebebiyle 32 ikillik
sayılara göre daha düşük başarıma sahiptir. Kullandığımız GİB modeli olan
GTX280’de, 32 ikillik ile 64 ikillik kayan noktalı sayılar arasında sekiz katlık bir
başarım farkı bulunmaktadır. Bu durum gerçekleştirimin hızına olumsuz bir etkide
bulunmuştur. Yeni çıkacak donanımlarda kayan noktalı sayıların donanım
tabanında tam olarak gerçekleştirilecek olması gerçekleştirimimizin de başarımını
etkileyecektir.
59
6. KAYNAKLAR
[1] Jonathan Richard Shewchuk, "An Introduction to the Conjugate Gradient
Method Without the Agonizing Pain," August 1994.
[2] M.C. Hill, "Preconditioned conjugate-gradient 2 (PCG2), a computer program
for solving ground-water flow equations: U.S. Geological Survey Water-
Resources Investigations Report 90-4048," 1990.
[3] (2009) MPI: A Message-Passing Interface Standart.
[4] Robert Piotr Bycul Andrzej Jordan, "The Parallel Algorithm of Conjugate
Gradient Method," Lecture Notes in Computer Science, vol. Volume 2326,
2002.
[5] Gene H. and Van Loan, Charles F. Golub, Matrix computations, 3rd Edition.
Baltimore, MD, USA: Johns Hopkins University Press, 1996.
[6] S. F., and Falgout, R. D. Ashby, "A parallel multigrid preconditioned conjugate
gradient algorithm for groundwater flow simulations," Lawrence Livermore
National Laboratory, 1996.
[7] NVIDIA Corp. NVIDIA. [Online].
http://developer.download.nvidia.com/compute/cuda/2_21/toolkit/docs/NVIDIA_
CUDA_Programming_Guide_2.2.1.pdf
[8] Youquan Liu Enhua Wu, "Emerging technology about GPGPU," in Circuits and
Systems, 2008. APCCAS 2008. IEEE Asia Pacific Conference on, 2008, pp.
618-622.
[9] Dominik Goeddeke. GPGPU:Basic Math Tutorial. [Online].
http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html
[1
0]
NVIDIA Corp. Nvidia. [Online]. http://developer.nvidia.com/object/cg_toolkit.html
[1
1]
NVIDIA Corp., "NVIDIA GeForce® GTX 200 GPU Architectural Overview,"
2008.
[1
2]
Michael G. McDonald and Arlen W. Harbaugh, "The History of MODFLOW,"
Ground Water, vol. 41, no. 2, 2003.
60
[1
3]
Therrien et al., "HydroGeoSphere-A Three-Dimensional Numerical Model
Describing Fully-Integrated Subsurface and Surface Flow and Solute Transport.
Users's Guide," Waterloo, 2007.
[1
4]
DHI WASY GmbH: About FEFLOW. [Online]. http://www.feflow.info/
[1
5]
DHI. [Online].
http://www.dhigroup.com/Software/WaterResources/MIKESHE.aspx
[1
6]
RS Varga, Matrix iterative analysis.: Prentice-Hall, 1962.
[1
7]
M.G., and Harbaugh, A.W. McDonald, A Modular Three-Dimensional Finite-
Difference Ground-Water Flow Model., 1988.
[1
8]
"IEEE Standard for Floating-Point Arithmetic," IEEE Std 754-2008, 2009.
[1
9]
Wikipedia. [Online].
http://upload.wikimedia.org/wikipedia/commons/a/a9/IEEE_754_Double_Floatin
g_Point_Format.svg
[2
0]
W. Kahan, "Pracniques: further remarks on reducing truncation errors," vol. 8,
no. 1, 1965.
[2
1]
T. Granlund. (2009) GNU MP: The GNU Multiple Precision Arithmetic Library
ed. 4.3.1. [Online]. http://gmplib.org/
[2
2]
David S. Watkins, Fundamentals of matrix computations., 2002.
[2
3]
Yousef Saad, Iterative Methods for Sparse Linear Systems, Second Edition.:
Society for Industrial and Applied Mathematics, 2003.
[2
4]
NVIDIA. (2010) Built For Adobe Professionals. [Online].
http://www.nvidia.com/object/builtforadobepros.html
61
62
ÖZGEÇMİŞ
Adı Soyadı : Yiğitcan AKSARI
Doğum Yeri : Ankara
Doğum Yılı : 1986
Medeni Hali : Bekar
Eğitim ve Akademik Durumu:
Lise : 2000-2003 Nermin Mehmet Çekiç Anadolu Lisesi
Lisans : 2003-2007 Hacettepe Üniversitesi Mühendislik Fakültesi
Bilgisayar Mühendisliği Bölümü
Yabancı Dil : İngilizce
İş Tecrübesi:
2007-... Araştırma Görevlisi, Hacettepe Üniversitesi Bilgisayar
Mühendisliği Bölümü