Ücretsiz Öğle Yemeği Bitti mi? [kapalı]


12

2005 tarihli meşhur The Free Lunch Is Over makalesinde Herb Sutter, Eşzamanlı Programlama Devrimi'ni Nesneye Dayalı Devrim kadar büyük öngördü. Bu devrim 2005 - 2013 yıllarında gerçekten oldu mu?


Makaledeki önemli noktalar:

  • İşlemci üreticileri CPU performansını artırma konusundaki geleneksel yaklaşımlarının çoğuyla odalarını tüketti. Saat hızlarını daha da yükseltmek yerine, hiper iş parçacıklı ve çok çekirdekli mimarilere dönüyorlar.

  • CPU verim kazanımlarından tam olarak yararlanmak istiyorlarsa, uygulamaların eşzamanlı olması gerekir.

  • “Ah, performans çok önemli değil, bilgisayarlar hızlanmaya devam ediyor” ifadesi yanlış olacaktır.

  • Verimlilik ve performans optimizasyonu daha az değil, daha önemli hale gelecektir. Kendilerini zaten ağır optimizasyona borçlandıran diller yeni bir hayat bulacak; rekabet etmenin ve daha verimli ve optimize edilebilir olmanın yollarını bulması gerekmeyenler. Performansa yönelik diller ve sistemlere uzun vadede artan bir talep bekliyoruz.

  • Programlama dilleri ve sistemleri giderek daha fazla eşzamanlılıkla başa çıkmaya zorlanacaktır. Eşzamanlılık için umutsuzca bugün dillerden daha yüksek bir programlama modeline ihtiyacımız var.


15
Telefonunuzda kaç tane çekirdek var?
Matt D

6
Nokia 2700'umun bir çekirdeği var.
cpp

5
@MattD Üzgünüm, ama neden "yükseltme zamanı" ve cpp telefonundaki çekirdek sayısı bununla ne ilgisi var? Nokia 2700'ün ihtiyaçları için yeterli olmadığını nasıl anlarsınız?
Andres F.

2
Tamamen bilimsel olmayan bir gözlemle, şeylerin donanım tarafında böyle bir devrim olduğunu, ancak yazılım devriminin olağanüstü yavaş ilerlediğini söylemek için kayıtlara geçeceğim. Tüm programcılar için kaliteli eşzamanlı araçlar elde etmek hala zor bir konserdir ve eşzamanlılık yine de tecrübeli paralel geliştiricileri bile yeniden üretilmesi zor yollarla harekete geçiren bir şeydir.
Jesse C. Slicer

2
Sadece tahminlerin zamanlamasının yanlış olması nedeniyle, tahminleri yanlış yapması gerekmediğini belirtmek isterim. Yukarıda listelediğiniz kilit noktaların ima edilen önemi elde etmediği açıktır, ancak bu noktaların her birinin yönünde adımlar olmuştur. Bu yüzden yukarıdaki tahminlerin gerçekleşeceğini söyleyebilirim, bu sadece ne zaman bir soru. WHEN, sadece bir arzu değil, bir gereklilik haline geldiğinde olacaktır. Bu eşiğin ne zaman geçileceğini bilmek, neden bu kadar zor olduğunu tahmin etmektir.
Dunk

Yanıtlar:


23

Evet, ama buna bağlı.

Hem paralel donanımdan faydalanmadan hem de eşzamanlılığı bir program yapılandırma tekniği olarak kullanmadan , önemsiz , yüksek performanslı bir yazılım yazmayı bekleyemezsiniz . Ancak çoğu yazılım hem önemsiz hem de performans açısından kritik değildir. Bir web uygulaması çok fazla sayıda işlem yapmaz ve CRUD uygulamalarının bazı simülasyon ve tıbbi yazılımların zor zamanlama sınırları gibi bir şeyleri yoktur.

Oyun geliştiricilerin özellikle buna dikkat etmesi gerekir , çünkü oyunlar yumuşak gerçek zamanlı gereksinimleri olan en yaygın uygulama türüdür. Sorun, iki CPU çekirdeği ve düşük güçlü bir GPU ile entegre bir yongadan mümkün olduğunca fazla bilgi işlem ve görüntü oluşturma gücü elde etmek istediğiniz bir cep telefonunda belirgindir. Bu, birçok geliştiricinin Haskell'e bakmasının ve Rust gibi dillerin olgunlaşmasını beklemesinin başka bir nedeni - modern donanımda güvenlik ve performans istiyoruz .

2005 yılından bu yana, OpenCl, CUDA, OpenMP ve vektör komut setleri gibi yeni ve gelişmiş araçlar kazandık. Ancak, göreceli yeni başlayanlar, eşzamanlı olarak çok daha ilginç şeyler yapmak için baştan tasarlanmıştır.

Haskell'in eşzamanlı çalışma zamanı, dilin hafif paralellik (kıvılcımlar) ve eşzamanlılık soyutlamaları (iş parçacıkları, kanallar ve paylaşılan değiştirilebilir referanslar) için zengin destek sağlamasına izin verir. Go ve Rust ayrıca hafif görevler sunar, Kanalları kullan ve Mesaj geçişini kullan.

Bu sistemler bellek güvenliği, performans çalışma süreleri ve belirli ırk türlerine karşı statik koruma sağlar. Haskell ve Rust'un varsayılan olarak değiştirilemezliği eşzamanlılığı insanların yönetmesini çok daha kolay hale getirir. Erlang edildi 80'lerde bu işi zaten yapmakta, fakat şükür beri-yazılım ve programlama sistemlerini tasarlamak hakkında bilgimiz ihtiyaçları da iyileştirilmiştir.

Son olarak, mevcut birçok dil - isimleri adlandırmayacağım - yeni yazılım yazmak için güvenilir seçenekler olarak reddedilmeye hazır. Karmaşıklık yükleri ve zayıf eşzamanlılık soyutlamaları, onları modern uygulamaların dikkate alınması için uygun hale getirmez. Sadece olgun alternatifleri bekliyoruz.


2
Belli dillerin reddedilmesinden pek emin değilim, bağımlılıkları en aza indirmeye odaklanan kodun her şeyden daha fazla yazıldığını görmeyi umuyorum. Sonuçta, bu gerçekten hatalı olan dil değil, nasıl kullandığınızdır. Ve kullanımının "düşük asılı meyvesi" artık çok iş parçacıklı / eşzamanlılık ile uyumlu değildir.
Matt D

6
@MattD: Hem bir dili nasıl kullandığınız hem de dilin kendisi hatalı olabilir. Programınızın yanlış olduğunu söyleyin. Yanlış yazdım birisin, ama dil mutlaka bunu yazmak için yardımcı olmadı doğru ve bu gibi önemlidir.
Jon Purdy

6

İşte birkaç veri noktası; bunun bir devrim olarak kabul edilip edilmediğine kendiniz karar verin.

Paralel Donanım

2005 civarında, hem Intel hem de AMD, 3 GHz civarında saat hızlarıyla seri üretim yapan 2 çekirdekli masaüstü x86 CPU'ları (Pentium D ve Athlon 64) başlattı.

2006 yılında 3.2 GHz'de 8 + 1 çekirdekli Hücre işlemciye sahip PlayStation 3 piyasaya sürüldü.

2006 yılında GeForce 8 serisi piyasaya sürüldü. Grafiklere özgü birimlerin aksine, çok sayıda (~ 100) genel amaçlı 'akış işlemcisinden' oluşur. 2007 yılı civarında, CUDA 1.0 spec piyasaya sürüldü ve bazı paralel amaçlı NVidia donanımlarında bazı genel amaçlı hesaplamalar yapılmasına izin verildi.

O zamandan beri eğilimler devam etti.

Diyelim ki 2013'te hem Intel hem de AMD, saat hızları sadece 4 GHz'in biraz üzerinde olan 4, 8 ve 16 çekirdekli CPU'lar sunuyor. Çift çekirdekli ve dört çekirdekli tasarımlar, dizüstü bilgisayarlar ve akıllı telefonlar gibi düşük güçlü cihazlar için yaygındır.

Bütün bunlar seri olarak üretilen, tüketici sınıfı günlük bilgisayar donanımıdır.

Yazılım

CUDA 2007'de piyasaya sürüldü, sonra 2008'de OpenCL, genel olarak (grafiksel olmayan) hesaplamada büyük ölçüde paralel GPU'ların kullanılmasına izin verdi. Model popüler hale gelir; birçok barındırma şirketi (ör. Amazon) genel bilgi işlem görevleri için GPU'lar sunar.

Go , 2009 yılında piyasaya sunuldu ve çok ucuz önleyici iplikler ("goroutines") içeriyor ve yüksek eşzamanlı algoritmaları verimli bir şekilde ifade etmeyi sağlıyor.

Akka araç takımı 2009 yılında Java ve Scala için piyasaya sürüldü ve aktör tabanlı eşzamanlılığa izin verdi.

Erlang (oldukça eşzamanlı bir dil) kullanımda bir miktar artış görüyor.

Eşzamanlılık ve Paralellik

Paralel donanım kullanmak için, bir kişinin yazılım eşzamanlılığına , yani bir hesaplama içinde yürütme iş parçacıklarıyla hokkabazlık yapmasına gerek olmadığını unutmayın . Birçok problem, her işlemin geleneksel bir ardışık program olduğu paralel , etkileşmeyen süreçlerle çözülür .

Paralel işleme, daha geleneksel diller ve harita azaltma veya MPC veya OpenMP gibi paralel çerçeveler kullanabilir. Bu tür çerçeveler için, aynı CPU kristali üzerinde birden fazla çekirdeğin bulunması kavramsal olarak sadece kümede daha fazla CPU bulunmasından çok farklı değildir; fark esas olarak hızdır.

Şimdiye kadar ücretsiz öğle yemeği yok

CPU hızları yüksek uçta hala 5 GHz civarında kalıyor. Görünürde daha iyi teknolojilerle, grafen transistörleri gibi, frekanslar gelecekte tekrar yükselebilir, ancak çok yakında değil.

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.