.NET Dizi Kodunu Otomatik Paralelleştiren ILNumerics
ILNumerics Accelerator, .NET dizi kodunu global statik analiz yerine yerel çalışma zamanı bağımlılıklarıyla otomatik paralelleştirip 3-100 kat hızlanma vaat ediyor.
ILNumerics Accelerator, .NET üzerinde yazılan sayısal dizi kodlarını manuel thread, task veya cihaz kerneli yazımına gerek kalmadan paralelleştirmeyi hedefleyen bir yaklaşım sunuyor. Klasik derleyicilerin küresel statik bağımlılık analiziyle güvenli paralelleştirme noktası bulma çabası yerine, her dizi komutunu kendi girdilerine bağlı olarak ne zaman, nerede ve nasıl çalışacağına karar veren özerk bir yürütme birimi olarak ele alıyor. Ana iş parçacığı artık tüm hesaplamayı sırayla yürütmek yerine, yalnızca gerekli minimum bağımlılık yapısını çıkarıp komutları serbest bırakıyor.
Bu model, program içinde 'yürütme ağı' adı verilen ve aynı anda yüzlerce-binlerce aktif komut içerebilen hareketli bir pencere üzerinden çalışıyor; bağımsız komutlar paralel yürütülürken, bağımlı komutlar yalnızca gerçekten gerekli olan yerel sırayı koruyor. Ayrıca kısmi girdi bilgisiyle işe erken başlanabilmesi (dizi hattı/pipelining) ve her komutun hedef donanıma göre SIMD, önbellek farkındalığı ve döngü açma gibi düşük seviye mikro-JIT optimizasyonlarından geçmesi, performans kazancını iki katmanlı hale getiriyor.
Bu yaklaşım özellikle Parallel.For() gibi bağımsız döngü yinelemelerine uymayan, sıralı bağımlılıklar veya paylaşılan durum içeren kodlar için önem taşıyor; çünkü bu tür kodların elle paralelleştirilmesi genelde güvensiz veya imkansız. ILNumerics, kaynak koddaki gereksiz sıralamayı çözerek büyük program bölgelerinde eşzamanlı ve borulu (pipelined) çalışma zamanı davranışı ortaya çıkarıyor; bu da orta ve küçük boyutlu iş yükleri için bile, manuel paralelleştirmenin mühendislik maliyetine değmeyeceği durumlarda kazanç sağlıyor. Sürüm 7'de heterojen hesaplama (CPU dışı cihazlara otomatik geçiş) özelliği deneysel aşamada ve varsayılan olarak tüm-CPU modunda çalışıyor.