Viktor: Kotlin'de Verimli Vektörel Hesaplamalar



Viktor, dizi hesaplamalarını daha verimli hale getirmeyi amaçlayan, JetBrains Research tarafından geliştirilen açık kaynaklı bir Kotlin kitaplığıdır. Bunu, iç içe dizilerden kaçınarak, pahalı işlemleri JNI + SIMD'ye devrederek ve logaritmik olarak depolanan sayılarda aritmetik için yerleşik destek sağlayarak başarıyor.


Viktor, öncelikle model tabanlı makine öğrenimi görevleri için tasarlandığından, olasılık dizileriyle çalışmak üzere optimize edilmiştir. Örneğin, temeldeki gizli Markov modeline uyması için onu pik analizörü olan Span'da. (genomik sıralama verilerinde zenginleştirilmiş bölgeleri algılayan bir biyoinformatik araç).


Sunulan Özellikler:


  • Deyimsel çok boyutlu dizi erişimi (satırlar, sütunlar, dilimler, görünümler vb.). Son derece hızlı eleman bazlı işlemler (aritmetik, üs, logaritma ve benzeri) modern CPU çekirdeklerini tam anlamıyla kullanır. Gerçekten hızlı toplama işlemleri (toplama, ortalama, standart sapma vb.). Yerleşik logaritmik depolama desteği: değerlerinizi logaritmaya dönüştürebilir ve onları geri dönüştürmek zorunda kalmadan onlarla çalışır.


  • Ana yapı olan F64Array, NumPy's ndarray'den esinlenmiştir. İçinde, bir ofset ve n boyutlu dizinin şeklini ve adımlarını içeren iki n öğeli tamsayı dizisi ile donatılmış düz bir DoubleArray (veri) vardır. Bu yapı, diğer F64Array örnekleri gibi bir F64Array'in satırlarını, sütunlarını ve diğer dilimlerini kolayca ifade etmemize olanak tanır. Örneğin, 2x3'lük bir dizi, ofset = 0, şekil = {2, 3} ve adım sayısı = {3, 1} ile 6 öğeli bir DoubleArray olarak depolanacaktır. İkinci sütunu (1 indeksli olanı) görüntülemek istiyorsak, aynı verilere sahip, ancak ofset = 1, şekil = {2} ve adım sayısı = {3} olan bir dizi oluştururuz.


  • F64Array, oldukça büyük bir aritmetik ve matematiksel işlem setiyle birlikte gelir. Ucuz aritmetik işlemler bir döngüde gerçekleştirilirken, daha pahalı olan matematiksel işlemler Java Yerel Arayüzüne devredilir. Dahası, modern CPU'ların çoğunda bulunan SIMD (tek talimat, çoklu veri) uzantı setlerini kullanıldığından emin olunur. Performans kazanımları işleme, dizi boyutuna, JVM sürümüne vb. Bağlıdır, ancak gerçek dünyadaki durumlarda bile % 900'e ulaşabilir (JVM'nin logaritmasının oldukça yavaş olduğu ortaya çıktı).


  • Diğer bir kullanışlı özellik, günlük olarak saklanan değerlerin yerleşik desteğidir. Olasılıklarla çalışırken, kayan nokta alt akışları sık görülen bir durumdur, çünkü bazen o kadar çok sayıda küçük sayıyı çarpmanız gerekir ki sonuç artık pozitif bir sayı olarak ifade edilemez ve bunun yerine sıfıra yuvarlanır ve herhangi bir yardımcı program kaybedilir. Bunun üstesinden gelmek için insanlar sıklıkla olasılığın kendisini değil logaritmasını saklarlar. Olasılıkları çarpmak yerine, logaritmaları toplayabilirler. Ancak, bazen olasılıkları da toplamaları gerekebilir ve bu işlem logaritmik depolamayla daha az doğal gerçekleşir. Viktor, logAddExp adında bir fonksiyon sağlar ve tam olarak bunu gerçekleştirir:


a logAddExp b = log (exp (a) + exp (b))


Aynı zamanda alttan taşmaları önleyecek şekilde. LogSumExp ile günlük olarak depolanmış bir dizideki tüm değerleri toplamak da mümkündür. Bu işlemler ayrıca mümkün olduğunda SIMArray edilerek daha da iyi performans elde edilir.


Üç JDK üzerinde bir dizi kıyaslama yapılmış: Oracle JDK 1.8, Oracle JDK 15 ve GraalVM 20.3. Her kıyaslama, yerleşik JVM özelliklerini (temel) ve viktor yöntemlerini kullanarak bir işlemin performansını ölçmüş. Her kıyaslama, 1000 ila 10 milyon öğe arasında farklı dizi boyutları için çalıştırılmış.





Sonuç olarak dizi işlemlerinizi hesaplama da hızlanmak isterseniz bu kütüphaneyi kullanmanız sizin yararınıza olabilir.


Kaynak: https://blog.jetbrains.com/kotlin/2021/03/viktor-efficient-vectorized-computations-in-kotlin/


#viktor #kotlin #jetbrains


0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın