Demodülasyon Algoritmaları İçin En İyilenmiş Windows İşletim Sistemi Uygulamaları Alparslan Fişne afisne@aselsan.com.tr 1 1/46 Kasım 2015 İçerik • • • • • Giriş Demodülasyon Algoritmaları Optimizasyon JNI Kullanımı Sonuçlar 2 2/46 Kasım 2015 Giriş • Haberleşme yayınlarından ses ve mesajların elde edilmesi için demodülasyon algoritmaları kullanılmaktadır. • Hedef sinyallere ait demodüle edilmemiş ham veriler çevrimiçi ya da çevrimdışı (veri kayıt) üretilmektedir. • JAVA tabanlı Kullanıcı Arayüzü’nde demodülasyon algoritmaları gerçek zamanlı işleme ile yapılması için algoritmaların optimize çalışması gerekmektedir. 3 3/46 Kasım 2015 Giriş • JAVA diliyle yazılmış algoritmalar C/C++ diliyle yazılmış algoritmalara göre daha yavaş çalışabilmektedir. • JNI kullanımı sayesinde C/C++ dili ile yazılmış optimize kütüphaneler JAVA projelerinde kullanılmaktadır. • JNI yöntemi ile gerçekleştirdiğimiz JAVA tabanlı uygulamada Intel Vektör İşleme Mimarisi dikkate alınarak çeşitli optimizasyonların gerçekleştirildiği algoritma kütüphanesi ile çok sayıda hedef kaynağı işleyebilen bir yazılım mimarisi sunulmuştur. 4 4/46 Kasım 2015 Giriş 5 5/46 Kasım 2015 Sunum Akışı • • • • • Giriş Demodülasyon Algoritmaları Optimizasyon JNI Kullanımı Sonuçlar 6 6/46 Kasım 2015 Demodülasyon Algoritmaları • Demodülasyon işlemleri analog ve sayısal modülasyonlu yayınlarındaki seslerin üretilmesi için kullanılmaktadır. • Analog demodülasyon işlemlerinin karmaşıklık düzeyinin az olması sebebiyle çalışmamızda analog demodülasyon algoritmaları incelenmiştir. 7 7/46 Kasım 2015 Demodülasyon Algoritmaları • AM Demodulasyon Algoritması 8 8/46 Kasım 2015 Demodülasyon Algoritmaları • FM Demodülasyon Algoritması 9 9/46 Kasım 2015 Demodülasyon Algoritmaları 10 10/46 Kasım 2015 Sunum Akışı • • • • • Giriş Demodülasyon Algoritmaları Optimizasyon JNI Kullanımı Sonuçlar 11 11/46 Kasım 2015 Optimizasyon • Optimizasyonlar en iyi çalışan seri kod üzerine yapılmaktadır. Demodülasyon algoritması için JAVA’da en iyi çalışan seri kodlar yazılmıştır. • Tek bir hedef kaynağı olduğunda hiçbir optimizasyon gerek kalmadan JAVA’da yazılan algoritmalar gerçek zamanlı çalışabilmektedir. • Çok sayıda hedef kaynağı için aynı anda algoritmalar çalıştırılınca JAVA’da gerçekleştirilen en iyi seri kodun performansı gerçek zamanlı işlemeye yeterli olmamaktadır. 12 12/46 Kasım 2015 Optimizasyon • JAVA tabanlı bir uygulamada algoritmaların optimize çalışabilmesi için performansı yüksek (C/C++) bir dille yazılmış kütüphanelere ihtiyaç duyulmaktadır. • Günümüzde kullanılan masaüstü ve dizüstü bilgisayarlarda çoğunlukla Windows İşletim Sistemi yüklü olmakla beraber Intel işlemcilerin farklı kombinasyonları ile karşılaşmaktayız. • Intel işlemciler sahip oldukları vektör işleme mimarisi ile optimizasyon yapılması istenen uygulamalara optimizasyon olanağı sağlamaktadır. 13 13/46 Kasım 2015 Optimizasyon • Intel işlemciler geçmişten günümüze kadar farklı vektör işleme mimarilerine sahip olmaktadır. Bu mimariler SIMD (Single Instruction Multiple Data) mimarisi tabanlı olarak çeşitlenmektedir. – SSE/SSE2/SSE3/SSE4 – AVX/AVX2 (2011, 2013) – AVX-512 (~2016) 14 14/46 Kasım 2015 Optimizasyon • SIMD mimarisi ile aynı anda bir işlem mimarinin kapasitesi kadar veri işleyebilmektedir. • SSE mimarileri aynı anda 4 adet float32 veri işlenebilirken, AVX ile 8 adet , AVX-512 ile 16 adet float32 veri işlenebilmektedir. • 1 GHz işlemci hızına sahip olan bir Intel işlemci AVX-512 mimarisi ile tek çekirdekte 16 GFLOPs veri işleme hızına sahip olabilmektedir. Dolayısıyla vektör işleme mimarisi kullanılarak çalıştırılan algoritmalar saniyede 16 GFLOP veri işleyebilmektedir. 15 15/46 Kasım 2015 Optimizasyon • Vektör işleme mimarisi üzerinde koşan algoritma için farklı optimizasyon teknikleri uygulanarak maksimum verim elde edilmeye çalışılmıştır. – Loop Unrolling – Temporal Locality – Spatial Locality 16 16/46 Kasım 2015 Optimizasyon • Intel mimarisinin olanak sunduğu optimizasyonlar için ayrıca Intel C++ derleyici kullanılarak otomatik optimizasyonlar yapılabilmektedir. • Yavaş çalıştığı bilinen döngüler için optimize kod üretilmesini sağlamak için derleyiciye bazı pragmalar sunulabilmektedir. char foo(char *A, int n){ int i; char x = 0; #ifdef SIMD #pragma simd // Generates incorrect code #endif #ifdef REDUCTION #pragma simd reduction(+:x) // Generates correct code #endif #ifdef IVDEP #pragma ivdep #endif for (i=0; i<n; i++){ x = x + A[i]; } return x; } 17 17/46 Kasım 2015 Optimizasyon • Yapılan optimizasyonların yanı sıra Intel’in halihazırda sunduğu Intel IPP (Integrated Performance Primitives) Kütüphanesi’de optimizasyon içeren vektör ve ses işleme fonksiyonlarına sahiptir. Bu çalışmamızda yapılan otomatik ve manuel optimizasyonların yanı sıra Intel IPP Kütüphanesi ile çalışmalar yapılıp sonuçlar alınmıştır. 18 18/46 Kasım 2015 Sunum Akışı • • • • • Giriş Demodülasyon Algoritmaları Optimizasyon JNI Kullanımı Sonuçlar 19 19/46 Kasım 2015 JNI Kullanımı • Mevcut durumda demodülasyon işlemleri için iki tane yazılım kullanılmaktadır. Fakat bu iki yazılım aynı birim üzerinde de çalışabilir. • Bu durumda iki yazılım arasındaki arayüz kullanılarak yazılım karmaşıklığı artırmak yerine daha verimli çözümler tasarlanabilir. – Kullanıcı Arayüzü Yazılımı (JAVA) – Analiz Kontrol Yazılımı (C++) 20 20/46 Kasım 2015 JNI Kullanımı • Analiz Kontrol Yazılımı’na bağımlılık algoritmaların C++ tabanlı IPP kütüphanesi kullanımı ile ortaya çıkmaktadır. • IPP kütüphanesinin JAVA ile geliştirilen Kullanıcı Arayüz Yazılımı’nda kullanıldığı bir mimari tasarlandığı takdirde sadece Kullanıcı Arayüz Yazılımı ile demodülasyon işlemleri gerçekleştirilebilir. 21 21/46 Kasım 2015 JNI Kullanımı • JNI kullanımında en önemli dezavantaj vektör işlemlerinde dizilerin başka bir platforma kopyalanması sebebiyle oluşan ek yük süresidir. • Dolayısıyla JNI kullanılarak yapılan algoritma işlemleri için veri transferinin az olmasına dikkat edilmesi gerekmektedir. • Uygulamaya özel olarak en uygun bir veri boyu seçilerek platformlar arası veri transfer süresinin önemsiz yapılması hedeflenmelidir. 22 22/46 Kasım 2015 JNI Kullanımı • Intel IPP Kütüphanesi ile Analog Kip Çözme Algoritmaları için Intel C++ derleyici kullanılarak dinamik bağlı kütüphane (.dll) yaratılmaktadır. • Bu kütüphane projesi JAVA Derleyici ile derlenerek JAVA Projesi’nde kullanılacak başlık dosyası oluşturulur. • Böylece JAVA Projesi’ne başka bir programlama dili ile yazılmış bir fonksiyon tanıtılmış olmaktadır. • Görüntü işleme ve bazı Android İşletim Sistemi Uygulamaları’nda JNI ve IPP kullanımı vardır. (Android NDK) 23 23/46 Kasım 2015 Sunum Akışı • • • • • Giriş Demodülasyon Algoritmaları Optimizasyon JNI Kullanımı Sonuçlar 24 24/46 Kasım 2015 Sonuçlar • JNI yöntemi ile algoritma işlemleri JAVA uygulamasına aktarılmış olup yazılım mimarisi tamamlanmıştır. • Ayrıca optimizasyonlardan dolayı elde edilen başarım sayesinde çok sayıda hedef kaynağının gerçek zamanlı olarak demodüle edilip ses ve mesajların alınmasına olanak sağlanmıştır. • İki yazılım kullanmanın getirdiği arayüz ve senaryo karmaşıklığı yerine tek bir yazılım kullanarak yazılım mimarisi daha kaliteli hale getirilmiştir. 25 25/46 Kasım 2015 Sonuçlar 26 26/46 Kasım 2015 Sonuçlar • JNI & IPP kullanımı sayesinde 10 kata yakın hızlanma sağlanmıştır. • Tek hedef kaynağı yerine çok sayıda hedef kaynağı olduğunda demodülasyon işlemleri gerçek zamanlı olarak yapılabilmektedir. • Benzetimlere bakıldığında JNI kullanımının getirdiği ek yük süresi optimum vektör uzunluklarında önemsiz olmaktadır. • Gelecek çalışmalarda algoritmaların koşut olarak çok çekirdekli mimarilerde çalışması için optimizasyon çalışmaları planlanmıştır. 27 27/46 Kasım 2015 TEŞEKKÜRLER Sorularınız ? 28 28/46 Kasım 2015