Bilgisayarlar neden ağları sıralama gibi özel donanımlarla gelmiyor?


10

Yaptığımız şekli programlamak yerine, neden "sıralama" gibi ortak görevlerin özelliklerini yapmıyor ve ortamın donanımını en iyi şekilde kullanmak için derlemesine izin vermiyoruz? Bu şekilde, bilgisayarları ağları sıralama gibi yeni özel donanımlarla gönderebiliriz ve otomatik olarak mevcut kodla çalışır.


2
Bir PCI FPGA kartı satın alın ve istediğiniz eklentileri uygulayın.
SK-mantığı

Donanım sihir değil. Birçok şey özel donanımlarla çok fazla (veya hiç) hızlandırılamaz ve mümkün olsa bile, mevcut donanımın genellikle uyarlanması (veya en azından yeniden derlenmesi) gerekir. Bkz. Yosefk.com/blog/its-done-in-hardware-so-its-cheap.html


3
@WorldEngineer Bunun resme nasıl girdiğini anlamıyorum. Ortalama bir kullanıcınız modern bir CPU'daki şeylerin% 80'inin ne için olduğunu bilmiyor, mutlu oluyorlar çünkü programlarını daha hızlı hale getirdiği söylendi (ve bunun bir gerçek çekirdeği var). Sıralama gerçekten OP'nin varsaydığı kadar yaygın olsaydı ve adanmış donanım tarafından optimize edilebilseydi, bunu şube öngörücüsünün yanına koyarlardı ("bu nedir, bahçecilik?"), X ve Y% 5 uygulamalarını yaptığını söyleyen bir basın bülteni yayınlarlar daha hızlı ve satabilirsiniz.

1
Bu bana en yüksek performanstan ziyade enerji verimliliğini hedefleyen Koruma Çekirdeği fikrini hatırlatıyor .
Paul A. Clayton

Yanıtlar:


19

Her şeyden önce, bilgisayarlar özel bir donanıma sahiptir . Birkaç yıl boyunca satılan her dizüstü bilgisayar ve masaüstü bilgisayarda, özel bir işlemci, bir grafik işleme birimi, video ve oyun uygulamaları gibi görsel işleme algoritmalarını işleyen bir grafik işlem birimi bulunmaktadır. Çok büyük bilgisayarlar ( örneğin , "süper bilgisayarlar", IBM'in System Z ailesi), sayısal işleme ("vektör işleme") vb . İçin çeşitli özel işlemcilere sahiptir .

İkincisi, sıralama, bilgi işlemin en iyi araştırılan yönlerinden biridir ve en basit durumlardan daha fazlası için donanıma inşa etmek için çok karmaşık olduğu ortaya çıkar . Sıralama tamamen hız ve doğrulukla ilgilidir. Hız, algoritma seçimine, veri türü ve çeşitliliğine ve veri hacmine bağlıdır. Doğruluk, verilerin türüne ve içeriğine bağlıdır. CPU'nun yerel kelime boyutuna uyan orta boyutlu bir tamsayı dizisini sıralamak önemsizdir ( ör., 31 veya 63 bit artı işareti). Yalnızca ASCII değerlerinden fazlasını içeren karakter dizilerini sıralamak son derece karmaşıktır - IBM 20 yıl önce 500+ sayfalık bir kitap yayınladı. Ve sonra bitişik olmayan veri sorunu var - bağlantılı bir listenin sıralanması, tüm bellekte işaretçileri takip etmeyi içerir.


10

Ana sorun, sıralama algoritmalarının (1) çok fazla esnekliğe ihtiyaç duyması ve (2) yine de donanım kullanarak hızlandırmanın çok zor olacağıdır.

Bir şey, sıralama algoritmalarının zaten işlemcinin bellek bant genişliğini aşacak kadar hızlı olmasıdır - işlemci, zamanın büyük bir bölümünü, verilerin ana belleğe ileri ve geri gitmesini bekleyerek harcayacaktır. Donanım hızlandırmalı bir sıralama yardımcı işlemcisi veya özel bir sıralama talimatı aynı soruna sahip olacaktır.

Bu bellek bant genişliğinin ele alınış şekli, daha iyi "yerellik" e sahip daha iyi algoritmalar ve veri yapıları kullanmaktır ve bu alanda, özellikle "önbellek kayıtsız algoritmalar" ile ilgili hala önemli çalışmalar yapılmaktadır (çalıştıkları anlamdan habersizdirler) önbellek ayrıntılarına bakılmaksızın, "önbellek farkında" algoritmalar belirli bir önbellek sayfası boyutu vb. için ayarlanır).

Aksine, medya uygulamaları (ses ve grafikler, özellikle 3D grafikler) bazı çok tekrar eden yapılardan yararlanır - elbette esneklik vardır, ancak büyük ve çok iyi yapılandırılmış bir temel üzerine inşa edilmiştir. Bu, grafik hızlandırmanın Blitting (yapılandırılabilir ancak yine de çok yapılandırılmış bir blok kopyalama işlemi) ve çizgi / çokgen çizimi gibi şeylerle basit başlamasına izin verdi. Grafikler ve ses işleme daha karmaşık hale geldikçe, vektör işlemleri optimizasyon için bariz bir hedef haline geldi - önce MMX (tamsayı vektörleri) sonra SSE (şamandıra vektörleri). Eski sabit işlevli 3D grafik boru hattı 3D grafik donanımına taşındığında bir 3D grafik motorunun nasıl çalıştığı konusunda oldukça iyi tanımlanmış bir yapı olduğu anlamına geliyordu.

Yine de 3D grafikler ile, bir zamanlar donanımda yapılanlar şimdi esneklik için yazılımda yapılır - gölgelendiriciler yazılımdır, örneğin, farklı malzemelerin görünümünü veren çok çeşitli farklı gölgelendiriciler elde ederiz. Ancak, bu yazılım hala genel yazılımdan çok daha yapılandırılmış bir şekilde çalışır ve bu nedenle yine de çok daha özel bir donanım platformu kullanabilir. Bu nedenle grafik kartınız artık fizikten şifreleri kırmaya kadar - aynı modele uyan uygulamalar ve modern grafik işlemcilerin sağladığı talimat setleri kullanılarak verimli bir şekilde uygulanabilen uygulamalar için her şeyi hızlandırabilir.

Grafik işlemcileri artık dijital sinyal işlemcilerinin manevi veya gerçek torunlarıdır ve dijital sinyallerle (örneğin ses) uğraşmak için bir tür özel işlemcidir (ve muhtemelen hala).

Hangi nihai noktaya yol açar - sıralama algoritmaları olabilir donanım hızlandırılabilir. Verilerinize bağlı olarak, işlemciniz MMX veya SSE (tek komutlu çoklu veri) talimatları kullanılarak işlenebilir, ancak bellek bant genişliği sorunu nedeniyle büyük olasılıkla fazla bir şey yoktur - belki biraz daha güç tasarruflu olabilirsiniz yine de bu şekilde. Ancak, grafik donanımınızı da kullanabilirsiniz. Bu şekilde, grafik kartları için genellikle çok daha iyi bellek bant genişliğinden yararlanabilirsiniz. Her türlü bu şekilde değiştiremezsiniz, ancak kesinlikle mümkün ve muhtemelen uygun olduğunda yapılır.

IOW çeşitli ekonomik ve pratik konulardan dolayı, sıralama gibi nispeten dar bir görevi hızlandırmak için özel olarak donanım tasarlamak gerçekten mantıklı değil. Daha geniş bir görev yelpazesini hızlandıran veya mevcut hızlandırma donanımını daha geniş bir görev yelpazesine uygulanabilir kılan bir özellik genellikle çok daha mantıklıdır.


3

Ama biliyorlar! Bunlara komut kümesi uzantıları denir. (SSE ve benzeri şeyler)

Bazı görevlerin yazılımda çok güzel uygulamaları vardır. Genellikle bu uygulamalar işi yapacak kadar iyidir, bu nedenle özel bir donanım gerekmez. Bir çeşit özel donanım yaparsanız, değerli kılmak için çok çeşitli uygulamalara sahip olmanız gerekir.

Bu işi yapabilen donanıma bakarsanız, tahminim FPGA'lar gibi bir şeye bakacaksınız. FPGA'larda görebileceğiniz gibi, çip çok daha pahalı hale gelirken, birçok uygulama için geçerli olmayacaktı.


SSE için google'a ihtiyacım olacak, ancak önceden sıralama muhtemelen evrenseldir. Donanım düzeyinde uygulanıyor mu?
MaiaVictor

Eh, orada olduğumuz gibi, kitap tavsiye eder misiniz?
MaiaVictor

Sıralama ağları örnek olarak kullanıldığından, genel olarak CPU tarzı işlemcilerde uygulanan işe özgü optimizasyonlardan bahsediyordum. SSE veya başka bir komut kümesinin belirli optimizasyonları sıralayıp içermediğini bilmiyorum. Google sıralama ağları yaptım ve optimize edilmiş genel uygulamalar olduğundan, uygulama doğru yapıldığında yazılım uygulamalarının da işi yapabileceğini düşünüyorum.
Onno

Çoğu komut seti uzantısının, örnek olarak kullandığınız sıralama ağından daha düşük bir düzeyde çalıştığını belirtmek zorundayım, ancak bu şekilde sıralama yapabilen bir çoklu kayıt optimizasyonu tasarlamak imkansız değil. Ancak CPU üreticileri için soru şu olurdu: "maliyeti haklı çıkaracak kadar ödeyecek mi?".
Onno
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.