Örtülü paralellik / eşzamanlılık neden daha yaygın değil? [kapalı]


13

Örtülü paralellik ^ birçok programcıdan büyük bir yük alabilir ve onu bilgisayara yerleştirebilir. Öyleyse ... neden şu anda daha yaygın değil?


^ Örtük paralellik, bir iş parçacıkları ve benzeri kullanarak bu işi yapmak isteyen bir programcı yerine, bir seferde birden fazla şey nasıl yapılacağını kendi başına anlayabilmektir


Parasail programlama dilini kontrol edin, örtük paralellik deneyen tek onlar gibi görünüyor forge.open-do.org/plugins/moinmoin/parasail

Yanıtlar:


11

Çünkü birkaç istisna dışında (Haskell) derleyicinin bir döngüyü açmasının bir yolu yoktur. Sorun, döngü boyunca her yinelemenin genel durumu değiştirebilmesidir. Bu yüzden farklı bir sırayla yapmak işlerin kırılmasına neden olabilir. Haskell'de saf bir fonksiyona güvenebilirsiniz, yani küresel durumu okumaz veya değiştirmez, böylece herhangi bir sırada yürütülebilirler.

Asıl mesele, birkaç istisna dışında eşzamanlılığın nasıl iyi bir şekilde yapılacağı hala çok açık bir sorundur. Erlang ve Haskell toplulukları oldukça iyi çalışıyor gibi görünüyor, ancak büyük N için N çekirdekli bir sistemi nasıl programlayacağımızı gerçekten anlamadan önce uzun bir yol var.


1
Şema'da, düzeni garanti etmemeyi açıkça seçen bazı döngüler vardır.
Javier

Cool Şema hakkında bilmiyordum
Zachary K

5

Şu anda kullandığımız programlama dillerinin çoğu, tek iş parçacıklı programlama ve tek kullanıcı etkileşiminin birçok uygulama için en çok kullanıldığı (ör: bağımsız masaüstü uygulamaları) o zaman geldi. Web uygulamaları, bulut bilişim ve çok kullanıcılı uygulamaların artmasıyla artık daha fazla çok iş parçacıklı uygulamaya ihtiyacımız var.

Eski programlama dilleri, dilin kendisinden çok iş parçacıklı özellikleri yavaşça desteklemeye çalışmaktadır (java eklenen java.util.concurrent gibi).

Gelecekte gelecek olan yeni diller, dahili iş parçacığı ve eşzamanlılık desteğinde daha iyi olacaktır.


4

Diğer cevaplarda belirtilen hususların yanı sıra (operasyonların bağımsız olduğunu ve programcıların seri olarak düşündüğünü kanıtlamak zor), dikkate alınması gereken üçüncü bir faktör vardır: paralelleştirme maliyeti .

Gerçek şu ki, iplik paralelliğinin kendisiyle ilişkili çok önemli maliyetleri vardır:

  • İş parçacığı oluşturma çok pahalıdır: Çekirdek için bir iş parçacığının başlatılması, bir işlemin başlatılmasıyla hemen hemen aynıdır. Kesin maliyetlerden emin değilim, ama bunun on mikrosaniye civarında olduğuna inanıyorum.

  • Muteksler aracılığıyla iş parçacığı iletişimi pahalıdır: Genellikle, bu her iki tarafta bir sistem çağrısı gerektirir, muhtemelen bir ipliği uykuya geçirir ve tekrar uyandırır, bu da gecikmeyi, soğuk önbellekleri ve kızartılmış TLB'leri üretir. Ortalama olarak, bir muteksin alınması ve bırakılması bir mikrosaniye civarındadır.

Çok uzak çok iyi. Bu, örtük paralellik için neden bir sorundur? Çünkü örtük paralellik, küçük ölçeklerde kanıtlanması en kolay yoldur. Basit bir döngünün iki yinelemesinin birbirinden bağımsız olduğunu kanıtlamak bir şeydir, bir şey yazdırmanın stdoutve bir veritabanına sorgu göndermenin birbirinden bağımsız olduğunu ve paralel olarak yürütülebildiğini kanıtlamak tamamen farklı bir şeydir ( veritabanı işlemi borunun diğer tarafında olabilir!).

Yani, bir bilgisayar programının kanıtlayabileceği örtük paralellik muhtemelen patlayıcı değildir, çünkü paralelleştirme maliyetleri paralel işlemenin avantajından daha yüksektir. Öte yandan, bir uygulamayı gerçekten hızlandırabilen büyük ölçekli paralellik bir derleyici için geçerli değildir. Sadece bir CPU'nun mikrosaniye içinde ne kadar iş yapabileceğini düşünün. Şimdi, paralelleştirmenin seri programdan daha hızlı olması gerekiyorsa, paralel program tüm CPU'ları iki muteks çağrısı arasında birkaç mikrosaniye boyunca meşgul tutabilmelidir. Bu, otomatik olarak kanıtlanması neredeyse imkansız olan gerçekten kaba taneli paralellik gerektirir.

Son olarak, istisnasız kural yok: Örtük paralelliğin sömürülmesi, hiçbir iş parçacığının yer almadığı durumlarda çalışır, bu da kodun vektörleştirilmesinde (AVX, Altivec vb. SIMD komut kümelerini kullanarak) geçerlidir. Bu, kanıtlanması nispeten kolay olan küçük ölçekli paralellik için en iyi sonucu verir.


0

Programcılar seri düşünür ve mevcut diller bu modeli desteklemek için oluşturulur. Haskell Erlang vb gibi saçak diller hariç, diller ("modern" sıfatını kullanmaktan kaçınırım), aslında bilgisayara ne yapacağımızı, ne zaman ve nasıl yapacağımızı söyleyeceğimiz yüksek seviyeli montajlardır. Bilgisayara istediğimiz sonucun uygun olduğunu söyleyebileceğimiz bir yankı sistemimiz olana kadar, programcılar olarak çok iş parçacıklı yeteneklerden tam olarak faydalanmak için zihinsel kapasiteye sahip değiliz.

yani doğal değil ......


Programcılar, nasıl programlama dillerinin onları programlamaya teşvik ettiği şekilde programladıkları gibi, nasıl düşünülmeleri öğretildiğini düşünürler. Bir programcı kendilerini sözde saçma dillerinize maruz bırakmazsa , problemlerle ilgili başka akıl yürütme yolları olduğunu asla öğrenemezler. Bence bu yüzden Yedi Haftada Yedi Dil birçok halkın tavsiye ettiği listede yüksek.
Mark Booth

Perhap saçak yanlış bir kelimeydi - Ticari uygulamalarda yaygın olarak kullanılmayan diller anlamına geliyordu (yani C ++ veya Java değil).
mattnz

1
Bununla birlikte, iddialarımın arkasında duruyorum (bunu destekleyecek kendi fikrim dışında hiçbir şey olmadan), programcılar, insanlar olarak, çok iş parçacıklı ve büyük parrallisumun gerçekten "elde edilmesi" için metal kapasitesine sahip değiller. Aynı anda birden fazla görev yapmak insan doğası değildir. Zaman yönetimi ile ilgili her kitap, bir şeye başlama kavramlarını teşvik eder, bitirir, sonra bir sonraki şeyi yapar, çünkü bu şekilde kablolanırız. Bu paradigmaları etkili ve etkili bir şekilde kullanmak için, şu anda mevcut olmayan büyük araç desteğine ihtiyacımız var. Az sayıda kişi bunu "elde eder" ve bu araçları geliştirmesi gerekir.
mattnz

1
Bence don't have the patiencedaha doğru bir değerlendirme don't have the mental capacity. Kariyerim boyunca, aptal olanlardan daha tembel programcılar gördüm . Yine de şanslıydım, üniversitedeki ilk yılımda işlevsel prosedür ve yan prosedürel OO boyunca ince taneli paralel programlama öğretildi. Birçok programcının bu kadar şanslı olmadığından ve düşünce süreçlerinin sonuç olarak düz ceketli olduğundan şüpheleniyorum.
Mark Booth

0

İşlemler ASİT olmalıdır, bu nedenle programcı esas olarak bir iş parçacığı hakkında düşünme eğilimindedir.

Diller ve platformlar, programcıyı karşılayabilecekleri kadar eşzamanlılıktan korumalıdır

Ve eşzamanlılık, işlevselliğin kendisi kadar kolay test edilemez, bu nedenle programcılar bu sorunların yanı sıra ayrılma eğilimindedir ve hatta eşzamanlı eşzamanlı işlemeyi düşünmüyorsa, hata nedir

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.