Eşzamanlılık hakkında akıl yürütmek için hangi ara temsiller kullanılabilir?


12

Bir derleyicinin programcı adına eşzamanlılık ile ilgili akıllı seçimler yapabilmesi için neyin gerekli olacağını daha iyi anlamaya çalışıyorum. Bu sorunun çok zor yönlerinin olduğunu anlıyorum:

  • Yarış koşullarının olmamasını sağlamak
  • Kodun aynı anda çalıştırılmasını sağlamak, kodun anlambilimsel anlamını etkileyen yan etkilere sahip olmamasını sağlamak

  • Kodda mevcut olan paralellik derecesi göz önüne alındığında, ipliğin bükülmesinden kaynaklanan ek yükün değip değmeyeceğine karar verme

Anladığım kadarıyla, modern derleyicilerde kullanılan iki büyük ara gösterim, prosedürel ve nesne yönelimli diller için statik tekli atama ve işlevsel diller için stil geçen sürekliliklerdir. Yukarıda listelenen sorunlardan herhangi biri hakkında düşünmek, bu ara formları kullanarak zor görünmektedir. Teorik olarak otomatik paralelleştirme konusunda en iyi şansa sahip olan diller bile (yan etki garantisi olmayan Haskell gibi saf fonksiyonel diller) bu cephede sınırlı ilerleme kaydetmiştir.

Öyleyse sorum şu ki, bu sorunu çözmek ve çözmek için hangi ara temsiller kullanıldı? Akademik araştırmalarda, farkında olmadığım ve bu göreve daha uygun olan başka temsiller var mı? Derleme bir ara gösterimine gelmeden önce soyut sözdizimi ağacını manipüle ederek derleyici ön ucu tarafından temel olarak çözülmesi gereken bu sorun mu?


Kodunuzu işlevsel bir şekilde yazarsanız, yarış koşulları veya yan etkiler hakkında endişelenmenize gerek kalmaz.
Robert Harvey

4
Bu, sorunuza tam olarak cevap vermiyor, ancak eşzamanlı kod hakkında akıl yürütmek için kullanılabilecek Process Calculi ile ilgilenebilirsiniz . En iyi bilinen örnek Pi Calculus olabilir . Bununla birlikte, otomatik paralelleştirme hala büyük ölçüde çözülmemiş bir sorundur ve en iyi şekilde derleyiciye belirli garantiler sağlamak için diller tasarlayarak veya özel ek açıklamalar kullanarak ele alınır.
amon

4
Intel Eşzamanlı Koleksiyon (CNC) için zemin olarak hizmet vermektedir kağıt listeleri böyle Yapımcı-Tüketiciye olarak sekiz temel eşzamanlı desenler. Bu eşzamanlı modeller, değişmezlik ve yan etkisiz gibi bir dizi özelliğe bağlıdır. (Herkes bu makaleyi özetleyebilir ve burada bir cevap olarak gönderebilir eğer takdir ediyorum.)
rwong

Teorik araçlardan birine SSA'nın üstüne inşa edilmiş "Dinamik Tek Atama (DSA)" denir.
rwong

@rwong: açık bir referans verebilir misiniz?
Ira Baxter

Yanıtlar:


5

Ara sunumda (IR) açıkça eşzamanlılık modellemenin gerekli bir gereklilik olduğu varsayılabilir. Bir cevap, "bazı eşzamanlılık işlemlerinin eklenmesiyle sıralı programlar için kullanılan herhangi bir IR", örneğin, "çatal ve birleştirme", "paralel x y" olacaktır. Bunları eklemek, bazı eşzamanlılıklarla ilgili akıl yürütmeyi mümkün kılar, ancak kolayca olması gerekmez. Ayrıca, tamamen işlevsel bir temsile (belirli bir şekilde paralelliğin faydalı bir şekilde modellenmesini zorlaştırarak) gitmeden belirli özelliklerin (veri-yarış freeness) nasıl sağlanacağı da açık değildir.

Tartışmalı Renkli Petri Ağları (CPN'ler) , eşzamanlı programları temsil etmek için iyi bir seçimdir. (CPN'lerdeki jetonlar "renklidir" [bir türe sahiptir] ve değerler taşıyabilir; eyaletlere "geçişler", gelen "jeton" değerlerinde hesaplanmış değeri olan muhtemelen farklı renkte bir jeton üretmek için gelen jetonlar üzerinde rasgele aritmetik gerçekleştirebilir). Yerleri hesaplanan sonuçlar ve geçişler olarak modelleme işleçleri (belleğe erişmek için özel bir tane dahil) olarak düşünürseniz, bu size programların modelleneceği bir veri akış grafiğinin ne kadar olduğunu verir. Üçlü [operatör, giriş1, giriş2, çıktı] gibi klasik derleyici temsillerine resmi bir yorum vermek için bunu kolayca kullanabilirsiniz.

Bu tür CPN grafiklerini analiz etmek için kilitlenme-solukluk, yerdeki simge sayılarının sınırlılığı vb. Gibi hesaplama özellikleri de dahil olmak üzere birçok araç vardır. Heirarchical CPN'ler işlevleri ve prosedürleri ve "çağrılar" kavramını modellemenizi sağlar.

Bu temsillerin açıkça yapmadığı şey, bir uygulamanın nereye paralel olabileceğinin anlaşılmasını kolaylaştırmaktır. Önemsiz olarak, paylaşımlı işlenenleri yan etki etmezlerse iki alt hesaplama paralel olabilir (bu yüzden bazı insanlar işlevsel programları / sunumları sever). Program temsilciniz paylaşılan bir belleği modellerse, monolit olarak modelleyebilir ve paylaşılan bellekte vb. daha büyük program durumu bunların bir (ağaç benzeri) birleşimidir; bu parçaları orta temsilde tartışabilirsiniz. Eğer yığınları paylaşmıyorsa iki paralel hesaplama arasında etkileşim yoktur (örneğin, bellek alt ağaçları).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.