Xlera8

Simülasyon için Spekülasyon. Doğrulamada Yenilik

Bu, özel donanım gerektiren bir bükülme ile simülasyonu hızlandırmak için donanım destekli spekülatif paralellik kullanan ilginç bir fikir. Paul Cunningham (Kıdemli Başkan Yardımcısı/GM, Cadence'de Doğrulama), Raúl Camposano (Silicon Catalyst, girişimci, eski Synopsys CTO'su ve şimdi Silvaco CTO'su) ve ben araştırma fikirleri serimize devam ediyoruz. Her zaman olduğu gibi, geri bildirim hoş geldiniz.

Simülasyon için Spekülasyon

Yenilik

Bu ayın seçimi Chronos: Hızlandırıcılar için Verimli Spekülatif Paralellik. Yazarlar makaleyi 2020 Programlama Dilleri ve İşletim Sistemleri için Mimari Destek Konferansı'nda sunmuşlardır ve MIT'dendirler.

Çok çekirdekli işlemciler kullanarak paralellikten yararlanmak, paralelliğin apaçık olduğu uygulamalar için bir seçenektir. Diğer algoritmalar o kadar kolay bölümlenemeyebilir, ancak içsel paralellikten yararlanan spekülatif yürütmeden faydalanabilir. Genellikle spekülatif yürütme, özellikle simülasyon için yüksek bir ek yük olan önbellek tutarlılığına bağlıdır. Bu yöntem, tutarlılık ihtiyacını atlar, görev yürütmeyi fiziksel olarak yerelleştirerek karoları hedef okuma-yazma nesnesine göre hesaplar ve küresel tutarlılık yönetimine ihtiyaç duymadan çakışma algılamanın yerel olarak algılanabilmesini sağlar. Görevler spekülatif olarak paralel yürütülebilir; algılanan herhangi bir çakışma, alt görevler aracılığıyla bir görevden geri alınabilir ve ardından diğer iş parçacıklarını durdurmaya gerek kalmadan yeniden yürütülebilir.

Burada dikkat edilmesi gereken bir nokta daha var. Bu yöntem, çoğu donanım hızlandırma tekniğinin aksine, gecikmeye dayalı simülasyonu destekler.

Paul'ün görüşü

Vay canına, MIT'den ne harika bir yüksek oktanlı makale! Paralel hesaplama sorulduğunda, aklıma hemen iş parçacıkları, muteksler ve bellek tutarlılığı gelir. Bu elbette modern çok çekirdekli CPU'ların tasarlanma şeklidir. Ancak donanımda paralelleştirmeyi desteklemenin tek yolu bu değildir.

Bu makale, sıralı bir görev kuyruğuna dayanan Chronos adlı paralelleştirme için alternatif bir mimari önermektedir. Çalışma zamanında, görevler zaman damgası sırasına göre yürütülür ve her görev, kuyruğa dinamik olarak eklenen yeni alt görevler oluşturabilir. Yürütme, bazı ilk görevleri kuyruğa koyarak başlar ve kuyrukta başka görev kalmadığında sona erer.

Kuyruktaki görevler, paralel olarak birden çok işleme öğesine (PE) dağıtılır; bu, Chronos'un spekülatif olarak gelecekteki görevleri mevcut görev tamamlanmadan önce yürüttüğü anlamına gelir. Mevcut görev, spekülatif olarak yürütülen herhangi bir gelecekteki görevi geçersiz kılarsa, bu gelecekteki görevlerin eylemleri "geri alınır" ve yeniden kuyruğa alınır. Bu konsepti donanımda doğru bir şekilde uygulamak kolay değildir, ancak dış kullanıcı için güzeldir: Algoritmanızı, sanki görev sırası tek bir PE'de seri olarak yürütülüyormuş gibi kodlarsınız. Herhangi bir muteks kodlamanıza veya kilitlenme konusunda endişelenmenize gerek yok.

Yazarlar, Chronos'u SystemVerilog'da uygular ve onu bir FPGA'da derler. Makalenin çoğu, görev kuyruğunu nasıl uyguladıklarını ve maksimum verimlilik için donanımda gerekli olan herhangi bir geri dönüşü açıklamaya ayrılmıştır. Chronos, görev kuyruğu tabanlı bir mimariye çok uygun dört algoritma üzerinde kıyaslanmıştır. Her algoritma iki şekilde uygulanır: birincisi özel bir algoritmaya özgü PE kullanılarak ve ikincisi PE olarak kullanıma hazır açık kaynaklı 32 bit gömülü RISC-V CPU kullanılarak. Chronos performansı daha sonra, Chronos için kullanılan FPGA'ya benzer bir fiyat etiketine sahip bir Intel Xeon sunucusunda çalışan algoritmaların çok iş parçacıklı yazılım uygulamalarıyla karşılaştırılır. Sonuçlar etkileyici – Chronos, Xeon sunucusunu kullanmaktan 3 ila 15 kat daha iyi ölçeklendiriyor. Ancak Tablo 3 ile Şekil 14'ü karşılaştırmak, bu kazanımların çoğunun Chronos mimarisinden ziyade algoritmaya özgü PE'lerden gelmesi beni biraz endişelendiriyor.

Bunun bir doğrulama blogu olduğu göz önüne alındığında, doğal olarak kapı düzeyinde simülasyon kıyaslamasını yakınlaştırdım. EDA endüstrisi, mantık simülasyonunu denemek ve paralel hale getirmek için büyük yatırımlar yaptı ve birkaç özel kullanım durumunun ötesinde büyük kazanımlar görmenin zor olduğu kanıtlandı. Bunun başlıca nedeni, çoğu gerçek dünya simülasyonunun performansının L3 önbelleğinde eksik olan ve DRAM'e giden yükleme/depolama talimatları tarafından yönetilmesidir. Bu belgede karşılaştırmalı olarak değerlendirilen yalnızca bir test durumu vardır ve bu, küçük bir 32-bit taşıma kaydetme toplayıcısıdır. Bu blogu okuyorsanız ve daha kapsamlı bir kıyaslama yapmak istiyorsanız, lütfen bana bildirin - Chronos gerçek dünya simülasyonlarında gerçekten iyi ölçeklenebilirse, çok büyük bir ticari değere sahip olur!

Raúl'un görüşü

Bu makalenin ana katkısı, Mekansal Olarak Konumlandırılmış Sıralı Görevler (SLOT) yürütme modeli paralellik ve spekülasyondan yararlanan donanım hızlandırıcıları ve çalışma zamanında dinamik olarak görevler oluşturan uygulamalar için etkilidir. Simülasyon için dinamik paralellik desteği kaçınılmazdır ve spekülatif senkronizasyon çekici bir seçenektir, ancak tutarlılık yükü çok yüksektir.

SLOT, her görevi tek bir nesne üzerinde çalışmak (yazmak) üzere kısıtlayarak tutarlılık ihtiyacını ortadan kaldırır ve çok nesneli atomikliği etkinleştirmek için sıralı görevleri destekler. SLOT uygulamaları, bir zaman damgası ve bir nesne kimliği ile karakterize edilen, dinamik olarak oluşturulmuş sıralı görevlerdir. Zaman damgaları, sipariş kısıtlamalarını belirtir; nesne kimlikleri, veri bağımlılıklarını belirtir, yani görevler, ancak ve ancak aynı nesne kimliğine sahiplerse verilere bağımlıdır. (okuma bağımlılığı varsa, görev spekülatif olarak yürütülebilir). Çakışma tespiti, nesne kimliklerini çekirdeklere veya kutucuklara eşleyerek ve her görevi nesne kimliğinin eşlendiği yere göndererek yerel hale gelir (karmaşık izleme yapıları olmadan).

The chronos sistem, AWS FPGA çerçevesinde, her biri 16 MHz'de çalışan 4 uygulamaya özel işleme öğesi (PE) içeren 125 kutucuklu bir sistem olarak uygulandı. Bu sistem, 20 çekirdekli/40 iş parçacıklı 2.4 GHz Intel Xeon E5-2676v3'ten oluşan bir taban çizgisiyle karşılaştırıldı ve özellikle fiyatı FPGA ile karşılaştırılabilir olduğu için (yaklaşık 2 $/saat) seçildi. Tek bir PE'de tek bir görev yürüten Chronos, taban çizgisinden 2.45 kat daha hızlıdır. Eşzamanlı görevlerin sayısı arttıkça, Chronos uygulaması, CPU uygulamasında 44.9 kat hızlanmaya karşılık gelen, 8 kutucukta kendine göre 15.3 kat hızlanmaya ölçeklenir. Ayrıca, uygulamaya özel PE'ler yerine genel amaçlı RISC-V'ye dayalı bir uygulamayı karşılaştırdılar; PE'ler, RISC-V'den 5 kat daha hızlıydı.

Makaleyi etkileyici buldum çünkü bir konseptten SLOT yürütme modelinin tanımına, donanımın uygulanmasına ve 4 uygulama için geleneksel bir Xeon CPU ile ayrıntılı karşılaştırmaya kadar her şeyi kapsıyor. Çaba önemli, Chronos 20,000'den fazla SystemVerilog satırından oluşuyor. Sonuç, daha fazla paralellik ve daha fazla spekülatif uygulama kullanımı nedeniyle, yazılım paralel sürümlerine göre (5.4 uygulamanın) ortalama 4 katı hızlanmadır. Makale, simülasyon dışı görevlere uygulama açısından da okunmaya değer; kağıt üç örnek içerir.

Bu gönderiyi şu yolla paylaş:

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?