Özetçe 1. Giriş 2. Literatür

Transkript

Özetçe 1. Giriş 2. Literatür
5. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'11
CUDA Altyapısı Kullanılarak Sinyal Đşleme Yazılımı Optimizasyonu
Burcu SAĞEL1, Serkan CEYLAN2,
Müfit Can AKPULAT3, Hasan TÜRKEN4, Sevda ERDOĞDU5
ASELSAN A.Ş., Savunma Sistem Teknolojileri (SST) Grubu, Ankara
{1bsagel,2ceylan,3mcakpulat,4hturken,5erdogdu}@aselsan.com.tr
Özetçe
•
Sinyal işleme yazılımlarında basitten karmaşığa farklı
seviyelerde algoritmalar, farklı büyüklükteki veriler
kullanılabilmektedir. Bu algoritmaların istenilen zaman
kriterlerine uyarak ve istenilen performansta gerçeklenmesi
çoğunlukla oldukça zor bir süreçtir. Bu makalede,
ASELSAN A.Ş. Savunma Sistem Teknolojileri (SST)
Grubu tarafından farklı projelerde kullanılan CUDA (Đng.
Compute Unified Device Architecture - Birleştirilmiş
Aygıt Mimarisi Hesabı) altyapısı kullanılarak gerçeklenen
sinyal işleme yazılımlarına ait eniyileştirme sürecine ilişkin
elde edilen tecrübeler paylaşılacaktır.
•
•
•
GPU üzerinde kod çalıştırmaya olanak
sağlamak,
Özkaynakları düzgün yönetmek,
Verinin
çekirdeklere
sığabilmesi
için
parçalamak,
Blokları çekirdeklere çizelgelemek olarak
sıralanabilir.
2.1. CUDA Mimarisi
CUDA, çokişlemcili (Đng. multiprocessor) bir aygıt
mimarisine sahiptir (Şekil 1). GPU seviyesinde temel
yapıtaşı çokişlemcililerdir. Her bir çokişlemcili 8
çekirdek, 8192 yazmaç, 16 KB ortak bellek alanına
sahiptirKaynakça
[1]. Çokişlemcililerde bulunan çekirdeklerin en büyük
özelliği SIMD (Đng. Single Instruction Multiple Data Tek Komut Çok Veri) çekirdekler olmalarıdır. Bu
özellik sayesinde paralel olarak bütün çekirdeklerde aynı
komut farklı verilerle koşabilmektedir.
1. Giriş
GPU (Đng. Graphical Processing Unit – Grafik Đşleme
Birimi), esas olarak grafiksel işlemlerde CPU (Đng. Central
Processing Unit – Merkezi Đşlemci Birimi) üzerindeki yükü
azaltmak ve daha iyi görüntü başarımı sağlamak için
özelleşmiş yapılardır. Günümüzde, GPU’lar da CPU’lar
gibi çok çekirdekli yapılara sahip hale gelmiştir. Paralel çok
çekirdekli, genel matematik işlemlerini grafik işleme birimi
üzerinde yapmaya olanak sağlayan yapılar, grafik
kartlarının günümüzde özellikle yüksek performans
gerektiren sinyal işleme algoritmalarının gerçeklenmesinde
önemli bir yere gelmesini sağlamıştır.
Sinyal işleme yazılımlarında kullanılan algoritmaların
karmaşıklığı arttıkça ve verilerin boyutları büyüdükçe
büyük verileri kısa sürelerde işlemeye yönelik bir arayış
ortaya çıkmaya başlamıştır. 2007 yılında serbest bir
platform olan CUDA’nın NVIDIA tarafından piyasaya
sürülmesinin ardından, bu alana ilgi artmış, grafik kartları
üzerinde de genel amaçlı matematiksel işlemlerin
yapılabileceği görülmüş ve ilerleyen süreçlerde bu alanda
çalışmalar hızlanmıştır.
Şekil 1: CUDA Donanım Modeli Kaynakça
[1]
Bu makalede, takip eden ikinci bölümde CUDA
altyapısından, kullanım alanlarından, artı ve eksi
yönlerinden, üçüncü bölümde yapılan çalışmalardan,
dördüncü bölümde ise elde edilen sonuçlardan
bahsedilecektir.
2.1.1. CUDA Derleyici Yolu:
C/C++ CUDA uygulamalarında, programlama yapılırken
C/C++ kodu ile seri olarak işletilecek olan kısım ve
CUDA ile paralel olarak işletilecek kısım aynı kod içinde
yer almaktadır.
2. Literatür
CUDA, GPU üzerindeki yüzlerce çekirdeği kullanarak
genel amaçlı matematik işlemleri yapmaya olanak sağlayan
bir GPU mimarisi, yazılımı ve programlama platformudur.
CUDA mimarisi birçok farklı uygulama programlama
dilini desteklemektedir. Böylece, bu uygulama dillerini
kullanan programcıların CUDA kullanımını kolaylaştırmaktadır. Bu çalışma kapsamında C ve C++ dilleri
kullanılmıştır.
CUDA’nın çeşitli görevleri ve özellikleri vardır. Bunlar;
159
5. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'11
2.2. Kullanım Alanları
CUDA, grafik kartındaki yüzlerce çekirdeğin grafiksel
olmayan matematiksel uygulamalarda kullanılmasına
olanak sağlamaktadır. Algoritma yoğun, nümerik
uygulamalarda büyük verilerin işlenmesi için CUDA
kullanımı önem taşımaktadır. Grafik kartının çok
çekirdekli yapısı ve CUDA ile bu çekirdeklerde paralel
şekilde işlem yapabilme yeteneği hızlı veri işleme
kabiliyeti ve dolayısıyla yüksek işlem performansı
sağlamaktadır.
2.3. Artıları ve Eksileri
Şekil 2: CUDA Derleyici Yolu
2.3.1.
Bu kodlar derlenirken,
CUDA’nın Artıları
• Farklı işletim sistemlerinde çalışabilmektedir.
(Linux, Windows)
• Birbirinden bağımsız büyük verileri paralel olarak
hızlı bir şekilde işlemeye olanak sağlamaktadır.
(Teorik maksimum işlem performansı 1581
GFLOPS1)
• CPU işlemci hızı ile sınırlı kalırken GPU
çekirdeklerde paralel işleme yeteneği ile hızını
arttırmaktadır (Şekil 4).
• Sunucu kodu (C/C++) için GCC/G++ derleyici
• Aygıt kodu (CUDA) için NVVC derleyici kullanılır.
Derlenen CPU ve GPU kodları GCC/G++ ya da ICC/ICPC
ile bağlanıp yürütülmekte (Şekil 2), böylece aynı kod içinde
farklı yapılar kullanılabilmektedir. Derleyici bu kodları
kendisi ayrıştırarak grafik kartı üzerindeki işlemleri
GPU’ya, CPU üzerinde koşması gereken işlemleri de
CPU’ya yollamaktadır.
2.1.2. CUDA Đşlem Akışı:
CUDA ile derlenen yazılımlarda işlem akışı (Şekil 3) CPU
üzerindeki ana işlemin grafik kartını ilklemesi ile
başlamaktadır. Ana bilgisayar ve grafik kartında bellek
ayrılıp, işlenecek olan veri PCI arayüzü ile CPU’dan grafik
kartı üzerindeki belleğe kopyalanmaktadır. Grafik kartı
üzerindeki çekirdeklerde işlemler tamamlandıktan sonra
CPU üzerine sonuçlar yine PCI arayüzü ile
kopyalanmaktadır. Ardından da ayrılan bellekler serbest
bırakılmaktadır.
Şekil 4 : CPU – GPU Karşılaştırması
• GPU üzerinde C/C++ programlama dilleri ve bazı
ufak CUDA eklentileri ile programlama yapabilme
olanağı sağlamaktadır.
• Heterojen seri ve paralel programlama modeline
sahiptir. (Algoritmalar için paralel CUDA kodu ile
seri
C
kodu
heterojen
bir
şekilde
gerçeklenebilmektedir.)
• Farklı serbest ve optimize edilmiş yazılım
kütüphaneleri bulunmaktadır. CUFFT ve CUBLAS
kütüphaneleri FFT ve temel lineer cebir
fonksiyonlarını içermektedir.
Şekil 3 : CUDA Đşlem Akış Modeli
2.3.2.
CUDA’nın Eksileri
• Veriyolu (Đng. bus) bant genişliği ve bekleme süresi
(Đng. latency) CPU ve GPU arasında darboğaza
sebep olabilmektedir.
2.1.3. CUDA Đzlek-Bellek Hiyerarşisi:
CUDA farklı bir izlek (Đng. thread)-bellek hiyerarşisine
sahiptir. Çekirdek (Đng. kernel) iş dağıtımının en küçük iş
parçacıkları izleklerdir. Đş birliği içinde olan izlekler
blokları oluşturmaktadır. Bir blok içindeki izlekler, ortak
bellek
alanını
(16KB)
kullanarak
senkronize
yürütülmektedirler.
2.3.3.
CUDA Đpuçları
• CUDA ile GPU üzerinde en iyi performansı
sağlamak için izlekler 32’lik gruplar halinde
koşmalı ve her bir blokta en az 64 izlek yer
almalıdır. Bunun sebebi, bir saat döngüsünde aynı
Bloklar ise bir araya gelerek ızgaraları (Đng. grid)
oluşturmaktadır.
Bir ızgaradaki bloklar birbirinden
tamamen bağımsızdırlar. Izgaralar bağımlı ya da bağımsız
yürütülebilmektedir. Bloklar bağımsız ise paralel, birbirine
bağlı ise seri olarak yürütülmektedir.
1
NVIDIA GTX580 için saniyedeki teorik maksimum kayan
noktalı işlem limitidir.
160
5. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'11
komutun bir çekirdekte 4, dolayısıyla bir
çokişlemcilide 32 izlek üzerinde işletilebilmesidir.
belirtilmiştir. Algoritmalar gerçeklenirken tek duyarlı ve
kayan noktalı karmaşık verilerle işlemler yapılmıştır.
• Farklı algoritmaları gerçeklerken veri alışverişi sadece
bu iki algoritma içinde olacak ise, veriyi tekrar CPU
üzerine almadan GPU üzerinde diğer algoritmaya
aktarmak veri transferindeki darboğazı en aza
indirgemektedir.
Algoritma-1:
Đlk algoritma, temel bir sinyal işleme algoritmalarından
biridir. Karmaşık yapısı ve algoritmada işlenen veri
büyüklüğü işlem yükünü arttırmaktadır.
Tablo 2: Algoritma-1 Đşlem Listesi
3. Yapılan Çalışmalar
Đşlem
Toplama
Çıkarma
Çarpma
Bölme
Trigonometri
Üstel
3.1. Test Altyapısı
CUDA ile algoritmaları gerçeklemek ve test etmek için
çokişlemcili bir masaüstü bilgisayar kullanılmıştır. Test
altyapısı, donanım ve gerekli olan yazılımlar aşağıda
anlatılmaktadır.
Bu çalışmada kullanılan HP Z800 Workstation, iki adet dört
çekirdekli Intel®XEON®CPU X5560 işlemci içermektedir.
[5] Test için kullanılan grafik kartları ve özellikleri Tablo
1’de belirtilmiştir.
Algoritmada 8 KHz’de örneklenmiş 8 MB’lık veri
saniyede iki kere işlenmektedir. Algoritmanın girdi
sinyaline ek olarak 300 MB seviyesinde veri de
algoritmanın içindeki işlem sırasında kullanılmaktadır.
Algoritmayı gerçekleyebilmek için Tablo 2’de belirtilen
işlemler kullanılmıştır.
Tablo 1: Grafik Kart Özellikleri
Özellikler
2
MP
Sayısı
CUDA
Çekirdeği
Đşlemci
Saati
Bellek
Saati
Bellek
Arayüz
Genişliği
Bellek
Bellek
Bant
Genişliği
Quadro
NVS295
1
GeForce
GT240
12
GeForce
GTX480
60
GeForce
GTX580
64
8
96
480
512
1300
MHz
695
MHz
64-bit/
GPU
1340
MHz
900
MHz
128-bit/
GPU
1401
MHz
1848
MHz
384-bit/
GPU
1544
MHz
2004
MHz
384-bit/
GPU
256 MB
11.2
GBps
1024 MB
54.4
GBps
1536 MB
177.4
GBps
1536 MB
192.4
GBps
Tekrar Sayısı/Döngü
329 K
1400
1086 M
47186K
2700
900
Algoritma-2:
Đkinci algoritma zaman verisini frekans alanına alarak
sinyali işlemekte ve daha sonra tekrar zaman alanına
çevirmektedir. Çoğunlukla FFT alma ve toplama üzerine
yoğunluk kazanmış bu ikinci sinyal işleme
algoritmasında (Tablo 3) gelen 10MB’lık veri saniyede
iki defa işlenmektedir.
Tablo 3: Algoritma-2 Đşlem Listesi
Đşlem
Toplama
Çıkarma
Çarpma
Bölme
IFFT
FFT
Trigonometri
Đşletim sistemi Microsoft Windows XP Profesyonel 2002
sürümüdür. Test edilen algoritmalar, Visual Studio 2008 ile
C dilinde gerçeklenmiştir.
Algoritmalar gerçeklenirken dikkat edilen esaslar aşağıda
belirtilmiştir:
Tekrar Sayısı/Döngü
9.5 G
500
9.6 M
149 K
150
9.5 M
600 K
Algoritma-3:
• Paralel yapılabilen kod parçalarının CUDA üzerinde,
seri olması gereken işlemlerin CPU üzerinde
çalıştırılması ilkesine uyulmuştur.
• CUDA ile işlenecek verilerin bir kerede GPU üzerine
alınması ve GPU üzerinde tüm işlemler yapıldıktan
sonra CPU’ya alınmasına dikkat edilmiştir.
• CUFFT
gibi
optimize
edilmiş
NVIDIA
kütüphanelerinden de faydalanılmıştır.
• GPU üzerinde işlenecek algoritmaların paralelliğinden
yararlanabilmek için bütün CUDA algoritmaları için
optimize kernel fonksiyonları yazılmıştır.
Diğerlerine göre daha az karmaşık olan üçüncü
algoritmada
yarım
saniyede
8MB’lık
sinyal
işlenmektedir. (Tablo 4).
Tablo 4 : Algoritma-3 Đşlem Listesi
Đşlem
Toplama
Çıkarma
Çarpma
Bölme
FFT
Trigonometri
3.2. Algoritma Tanımları
Test edilen sinyal işleme algoritmalarının temel yapıları
aşağıda anlatılmıştır. Đşlem yükünü ve veri büyüklüğünü
göstermek için hangi matematiksel işlemin ne kadar
yapıldığı ve test edilen verilerin büyüklükleri de
Tekrar Sayısı/Döngü
8K
8K
1M
4K
250
8K
Algoritmalar başta CPU ve PowerPC üzerinde
gerçeklenmeye çalışılmış ve gerçeklenmiş; ancak
performans kaygısı ve bellek alanı yetersizliği gibi çeşitli
nedenlerden dolayı GPU üzerinde gerçeklenmiştir.
2
MP Sayısı grafik kartındaki çokişlemcili sayısını göstermektedir.
Her bir çokişlemcilide 8 adet CUDA çekirdeği bulunmaktadır.
161
5. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'11
GPU bellek alanı 256 MB iken Algoritma2 için yeterli
bellek alanı olmadığından parça parça işlenmesi
gerekmiştir. GT240 ve üzeri kartlarda yapılan testlerde
tüm veri tek seferde işlenebilmiştir. Optimizasyon ile
GTX580’de koşturulan algoritmalarda %100’e varan
iyileştirme sağlanabilmektedir.
3.3. Başlangıçtan Son Duruma Elde Edilen Sonuçlar
Algoritmalar başlangıçta CUDA’nın paralelliği ve o günkü
CUDA altyapısı/desteği kullanılarak NVS295 kartı
üzerinde koşacak şekilde kodlanmıştır. Daha sonra çok
çekirdekli yeni grafik kartları çıktıkça sırasıyla GT240,
GTX480 ve GTX580 üzerinde optimizasyon çalışmaları da
devam ederken denenmiştir.
Başlangıçta CUDA’nın da yeni bir platform olması, grafik
kartlarındaki çok çekirdekli mimarinin yeni, bu alandaki
araştırmaların yetersiz ve hazır kütüphanelerin yeterince
optimize olmaması gibi etkenler ilk çıkan algoritmaların
umut verici ancak yeterince iyi performans sağlamamasına
neden olmuştur.
Tablo 5 : Algoritmaların gerçeklenme süreleri
Algoritma
Algoritma 1
Algoritma 2
Algoritma 3
Grafik kartlarında çekirdekli yapılar arttıkça, bu alandaki
araştırmaların ve desteğin artmasına, CUDA hakkında bilgi
birikiminin çoğalmasına olanak sağlamıştır. Çok çekirdekli
yeni grafik kartları çıktıkça algoritmalar sırasıyla GT240,
GTX480 ve GTX580 üzerinde bu gelişmeler doğrultusunda
optimize edilerek güncellenmiş ve denenmiştir.
•
•
•
•
Optimizasyon
sonrası (ms)4
200
80
45
Algoritma 1 için PowerPC 7448 işlemcili kart üzerinde
alınan ölçümde en iyi 18sn’lik bir değer elde edilirken,
Algoritma 2 için HP Z800 üzerinde Intel IPP/MKL
kütüphaneleri kullanılarak alınan ölçüm ile 3sn’lik bir
değer elde edilmektedir.
4. Tartışma ve Sonuç
Optimizasyon sırasında edinilen bilgi birikimi ve kurallar
çerçevesinde aşağıdaki ilkeler temel alınmıştır:
•
Başlangıç süresi
(ms)3
310
180
90
CUDA programlama modelinin ölçeklenebilir ve kolay
olması, otomatik izlek yönetimi ile paralel programlama
karışıklığının en aza indirgenmesi, optimize edilmiş
kütüphaneler ile programlama kolaylığı sağlanması
sayesinde alan, yer ve güç tüketiminin azalması ve
yüksek performanslı algoritmaların gerçeklenebilmesi
mümkün kılınmıştır. Bu çalışma büyük verilerin
işlenmesini gerektiren ve bağımsız olarak işlenebilen
algoritmaların CUDA kullanımı ile performanslarında
nasıl bir iyileştirme yapılabileceğini, bağımsız iş
parçacıklarının paralel çalıştırılmasının nasıl bir
performans artışı sağlayabileceğini göstermiştir. Grafik
kartlarındaki çekirdekler ve bellek alanları arttıkça CPU
üzerindeki yükün azalması ve GPU üzerinde yüksek
performanslı işlemlerin yapılabilmesi ile sinyal işleme
alanında yeni kapılar açılmıştır.
Algoritmanın
paralel
kısımlarının
GPU
çekirdeklerini maksimum kullanacak şekilde
yeniden kodlanması,
Ortak bir bellek alanına erişim olmaması ve veri
transferlerinin PCI-Express transfer hızıyla
limitlenmesi nedeniyle GPU-CPU ve CPU-GPU
veri transferlerinin minimuma indirilmesi,
Seri olan algoritma kısımları için CPU ve
GPU’da kodlama yapılarak performansları
karşılaştırıldıktan sonra işlem yüküne ve süresine
bakılarak en iyi performansı sağlayacak şekilde
CPU ya da GPU üzerinde çalıştırılması,
Sık kullanılan temel fonksiyonları içeren CUDA
sinyal işleme kütüphanesinin oluşturulması,
FFT gibi temel sinyal işleme fonksiyonları
optimize
eden
CUDA
kütüphanelerinin
kullanımına ağırlık verilmesi ile optimizasyon
yapılmıştır.
5. Kaynakça
[1] CUDA Programming Guide 2.3, NVIDIA CUDA,
2009
[2] Zibula, A., “General Purpose Computation on
Graphics Processing Units (GPGPU) using CUDA”,
Paralel Programming and Paralel Algorithms
Seminar, 2009
[3] CUDA ZONE, NVIDIA,
<http://www.nvidia.com/object/cuda_home.html>,
2011.
[4] Seland, J. , “Cuda Programming”, Geilo Winter
School, Geilo, 24 Ocak 2008
[5] Workstation Z800,
<http://www.hp.com/canada/products/landing/
workstations/files/z800_datasheet_feb09.pdf>, HP,
2010
Farklı algoritmalar ya da aynı algoritma içindeki paralel ve
seri kısımlar işlemcilerin yapısına uygun şekilde CPU ve
GPU’ya dağıtılmaktadır. CPU’daki veri GPU’ya
aktarıldığında CPU’da yapılması gereken diğer işlemler eş
zamanlı olarak yapılabilmektedir. GPU’dan geri dönen veri
ile de CPU üzerinde işlem sonuçları birleştirilebilmektedir.
Bu da iki işlemcinin paralel ve verimli şekilde
kullanılmasına olanak sağlamaktadır.
Grafik kartlarını kısıtlayıcı faktörlerden biri de bellekleridir.
Bellekleri arttıkça işlenebilecek veri büyüklüğü de
artmaktadır. Çünkü işlenecek verinin bir kerede CPU’dan
GPU’ya alınması ve işlenmesi bant genişliği ve bekleme
süresinden dolayı oluşan darboğazı en aza indirmektedir.
Algoritmalar öncelikle NVS295 kartı üzerinde çalıştırılarak
ölçümler alınmıştır. Daha sonra farklı çekirdek sayısına
sahip grafik kartlarında denendiğinde algoritmaların
çekirdek sayısı ile doğru orantılı olarak hızlandığı
görülmüştür. Örneğin; 8 çekirdekli NVS295 kartında 4.5sn
süren bir işlem, 512 çekirdekli GTX580 kartında 90ms
sürmektedir.
3
Başlangıç gerçeklenme süreleri, GTX580 kartında
optimizasyon yapılmadan önce ölçülen gerçeklenme sürelerdir.
Optimizasyon sonrası gerçeklenme süreleri, optimizasyon
yapıldıktan sonra GTX580 kartında ölçülen algoritma
süreleridir.
4
162

Benzer belgeler

(CPU) ve Grafik İşlemci (GPU) - CEUR

(CPU) ve Grafik İşlemci (GPU) - CEUR 5. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'11

Detaylı

opengl tabanlı animasyonlarda görüntü kalitesinin cuda mimarisi ile

opengl tabanlı animasyonlarda görüntü kalitesinin cuda mimarisi ile Birimi), esas olarak grafiksel işlemlerde CPU (Đng. Central Processing Unit – Merkezi Đşlemci Birimi) üzerindeki yükü azaltmak ve daha iyi görüntü başarımı sağlamak için özelleşmiş yapılardır. Günü...

Detaylı