Demodülasyon Algoritmaları İçin En İyilenmiş

advertisement
Demodülasyon Algoritmaları İçin En
İyilenmiş Windows İşletim Sistemi
Uygulamaları
Alparslan Fişne
[email protected]
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
Download