Ö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
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ü...