5

Şimdiye kadar elde ettiğim deneyimlerim, çok çekirdekli işlemcilerde bile, bir algoritmayı paralel hale getirmenin bile, her zaman dikkate değer bir şekilde hızlanmayacağını gösterdi. Aslında bazen işleri yavaşlatabilir. Bir algoritmanın paralel hale getirilerek önemli ölçüde hızlandırılabileceği bazı iyi ipuçları nelerdir? bağımsız benzer büyüklükteki kurs taneli parçalar ayrılır edilecek Bir algoritmanın paralel hale getirilmesi gereken bazı ipuçları nelerdir?

cevap

5

paralelleştirilmesi en fazla yararı, bir görev gerekir kazandırmak (Tabii prematüre optimizasyonu ile uyarılar ve kötülüğe onların korelasyon verilen) (ya da daha çok), ve veri arasında çok az iletişim ya da parçalar arasında senkronizasyon gerektirir.

İnce taneli paralelleştirilmesi, hemen hemen her zaman artan işletme giderleri muzdarip ve ne olursa olsun mevcut fiziksel çekirdek sayısı sonlu hızlandırması gerekir.

[Bu uyarı, çok büyük bir yapıya sahip olan mimarilerdir. 'çekirdekler' (bağlantı makineleri 64.000 çekirdek gibi). Bunlar, belirli bir topolojiye (dikdörtgen bir örgü gibi) atanan nispeten basit eylemlere bölünebilen hesaplamalar için çok uygundur.

0

Çalışmak için çok fazla kilite ihtiyacınız varsa, muhtemelen iyi paralel olmayan zor algoritmalar. Algoritmanın, birbirine değmesi gerekmeyen ayrı bölümlere ayrılabilecek herhangi bir parçası var mı?

2

Birincisi, geç Jim Gray tarafından bu kağıdı göz atın:

Distributed Computing Economics

Aslında bu söz konusu yazdıklarını dayalı bazı yanlış anlamaları kadar açık olacaktır. Açıkça, eğer probleminiz ayarlanmış olandan daha az uygunsa, eğer daha da zorlaşırsa o kadar zor olacaktır.

3

İşi bağımsız parçalara bölebiliyorsanız, paralel olarak iyi bir şekilde olabilir.

Ayrıca çoğu programa daha fazla çekirdek ekleyerek performans kazanımları açısından ne kadar az bekleyebildiğimizi anımsatıcı bir şekilde hatırlatan Amdahl's Law'u da unutmayın.

+0

Kesinlikle katılıyorum. Ancak, dikkat edilmesi gereken bir şey, Atwood'un blogunda her zaman özlüyor olduğunu düşündüğüm, programınızın genellikle diğer ilgisiz süreçlerle rekabet ettiği, burada da birden fazla çekirdekten elde edilebileceğidir. Ama evet çoğu zaman kodun en yavaş kısımlarına harcanır. :) – BobbyShaftoe

2

Önceki hesaplamalara dayanan hesaplarınız olduğunda, bu paralel bir sorun değildir. Doğrusal görüntü işleme, kaba kuvvet yöntemleri ve genetik algoritmalar gibi şeyler kolaylıkla paralel hale getirilir.

İyi bir benzetme size aynı anda farklı bölümlerini yapmak üzere bir grup arkadaşını alabilir üzerinde işe yarayabilir nedir? Örneğin, ikea mobilyalarını bir araya getirmek, farklı insanlar farklı bölümler üzerinde çalışabiliyorsa iyi bir şekilde paralellik gösterebilir, ancak duvar kağıdı, sırayla duvarları yapmanız gerektiğinden dolayı olmayabilir.

1

Eğer sonlu eleman modelini içeren simülasyonlar gibi büyük matris hesaplamaları yapıyoruz, bunlar genellikle düz ileri şekillerde küçük parçalar halinde bölünebilir. Matris-vektör çarpanları, çok büyük matrislerle uğraştığınızı varsayarak, paralellikten iyi fayda sağlayabilir. Kodun yavaş çalışmasına neden olan gerçek bir performans darboğaz olmadığı sürece, muhtemelen paralel işlemeye gerek kalmaz.

+0

Mantığınızı görebiliyorum. Bu bir okul ödevi içindir.Zamanım varsa, basit bir işlem yapıp, önemli bir hız artışı verirse, bazı paralelleştirme ile oynayacağım. Bir tane bulamamış olsam bile, "İşe yaramayacak bir şey daha var." Dediğimde iyi görünebilirim. –

İlgili konular