Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Paralel bir bölgenin sonunda en az bir engel vardır ve içinde ek engeller olabilir. Her engelde, ekibin diğer üyelerinin son yazışmanın gelmesini beklemesi gerekir. Bu bekleme süresini en aza indirmek için, paylaşılan iş tüm iş parçacıklarının yaklaşık olarak aynı anda bariyere ulaşmasını sağlayacak şekilde dağıtılmalıdır. Bazı paylaşılan çalışmalar for yapılarında yer alıyorsa, schedule yan tümcesi bu amaç için kullanılabilir.
Aynı nesnelere yinelenen başvurular olduğunda, bir for yapı için zamanlama seçimi öncelikle önbelleklerin varlığı ve boyutu ve bellek erişim sürelerinin tekdüzen mi yoksa tek biçimsiz mi olduğu gibi bellek sisteminin özelliklerine göre belirlenebilir. Bu gibi konular, bazı döngülerde bazı iş parçacıklarına görece daha az iş düşse bile, her iş parçacığının döngüler serisindeki aynı dizinin öğe kümesine tutarlı bir şekilde başvurmasını tercih edilmesini sağlayabilir. Bu kurulum, tüm static döngüler için aynı sınırlarla program kullanılarak yapılabilir. Aşağıdaki örnekte, zamanlama önemli olmasa bile k sıfır ikinci döngüde alt sınır olarak kullanılır.
#pragma omp parallel
{
#pragma omp for schedule(static)
for(i=0; i<n; i++)
a[i] = work1(i);
#pragma omp for schedule(static)
for(i=0; i<n; i++)
if(i>=k) a[i] += work2(i);
}
Kalan örneklerde, bellek erişiminin baskın bir nokta olmadığı varsayılır. Aksi belirtilmediği sürece, tüm iş parçacıklarının eşdeğer hesaplama kaynakları aldığı varsayılır. Bu gibi durumlarda, bir for yapı için zamanlama seçimi, önceki en yakın engel ile eğer bir nowait yan tümcesi varsa örtülü kapatma engeli veya yaklaşan en yakın engel arasında gerçekleştirilmesi gereken tüm paylaşılan çalışmalara bağlıdır. Her zamanlama türü için kısa bir örnek, bu zamanlama türünün en iyi seçenek olma olasılığını gösterir. Her örneği kısa bir tartışma izler.
Zamanlama static , her yinelemenin aynı miktarda çalışma gerektirdiği tek for bir yapı içeren paralel bölge olan en basit durum için de uygundur.
#pragma omp parallel for schedule(static)
for(i=0; i<n; i++) {
invariant_amount_of_work(i);
}
Zamanlama static , her iş parçacığının diğer iş parçacıklarıyla yaklaşık olarak aynı sayıda yineleme alması ve her iş parçacığının kendisine atanan yinelemeleri bağımsız olarak belirleyebilmesi özellikleriyle karakterize edilir. Bu nedenle, çalışmayı dağıtmak için eşitleme gerekmez ve her yinelemenin aynı miktarda çalışma gerektirdiği varsayımı altında, tüm iş parçacıklarının yaklaşık aynı anda bitmesi gerekir.
P iş parçacıklarından oluşan bir ekip için, ceiling(n/p) tam sayı q olsun; bu, n = p*q - r koşulunu 0 <= r < p ile birlikte sağlar. Bu örnek için zamanlamanın bir uygulaması, q yinelemelerini ilk p-1 iş parçacıklarına ve q-r yinelemelerini son iş parçacığına atar. Başka bir kabul edilebilir uygulama, ilk p-r iş parçacıklarına q yinelemeleri ve kalan r iş parçacıklarına q-1 yinelemeleri atar. Bu örnekte, bir programın belirli bir uygulamanın ayrıntılarına neden güvenmemesi gerektiği gösterilmektedir.
Zamanlama dynamic , değişen, hatta tahmin edilemeyen iş miktarları gerektiren yinelemelere sahip bir for yapı için uygundur.
#pragma omp parallel for schedule(dynamic)
for(i=0; i<n; i++) {
unpredictable_amount_of_work(i);
}
dynamic Zamanlama, hiçbir iş parçacığının engelde son yinelemesini yürütmek için başka bir iş parçacığından daha uzun süre beklemediği özelliğiyle karakterize edilir. Bu gereksinim, yinelemelerin kullanılabilirlik durumuna göre iş parçacıklarına birer birer atanması ve her atama için eşzamanlama yapılması gerektiği anlamına gelir. Eşitleme yükü, en küçük öbek boyutu k değerinin 1'den büyük olarak belirlenmesiyle azaltılabilir; böylece iş parçacıklarına bir kerede k atanır, k'den daha az kalana kadar. Bu, hiçbir iş parçacığının, başka bir iş parçacığının (en fazla) k yinelemelerini yürütmesi için gereken süreden daha uzun süre barikatta beklememesi garanti eder.
dynamic İş parçacıkları, her yineleme için değişen çalışma miktarlarıyla benzer bir etkiye sahip olan farklı hesaplama kaynaklarına erişiyorsa zamanlama yararlı olabilir. Benzer şekilde, iş parçacıkları çeşitli zamanlarda yapıya ulaşırsa for dinamik zamanlama da yararlı olabilir, ancak bu durumlarda bazı durumlarda guided zamanlama tercih edilebilir.
guided Zamanlama, iş parçacıklarının her yineleme için yaklaşık aynı miktarda çalışma gerektiren bir for yapıda farklı zamanlarda gelebileceği durum için uygundur. Örneğin, for yapısından önce nowait yan tümceleri içeren bir veya daha fazla bölüm veya for yapısı olursa bu durum oluşabilir.
#pragma omp parallel
{
#pragma omp sections nowait
{
// ...
}
#pragma omp for schedule(guided)
for(i=0; i<n; i++) {
invariant_amount_of_work(i);
}
}
dynamic gibi, guided zamanlaması, hiçbir iş parçacığının engelde, başka bir iş parçacığının son yinelemesini veya k öbek boyutu k olarak belirtilirse son k yinelemelerini yürütmesi için geçenden daha uzun süre beklemeyeceğini garanti eder. Bu tür zamanlamalar arasında zamanlama, guided en az eşitleme gerektiren özelliği ile karakterize edilir. Öbek boyutu k için, tipik bir uygulama ilk kullanılabilir iş parçacığına q = tavan(n/p) yinelemelerini atar, n değerini n-q ve p*k arasında daha büyük olanı olarak ayarlar ve tüm yinelemeler atanana kadar işlemi tekrarlar.
En uygun zamanlama seçimi bu örnekler için olduğu kadar net olmadığında, runtime programı değiştirmek ve yeniden derlemek zorunda kalmadan farklı zamanlamalar ve öbek boyutlarıyla deneme yapmak için zamanlama uygundur. Ayrıca, en uygun zamanlama programın uygulandığı giriş verilerine (tahmin edilebilir bir şekilde) bağlı olduğunda da yararlı olabilir.
Farklı zamanlamalar arasındaki dengelerin bir örneğini görmek için sekiz iş parçacığı arasında 1000 yineleme paylaşmayı göz önünde bulundurun. Her yinelemede sabit miktarda çalışma olduğunu varsayalım ve bunu zaman birimi olarak kullanın.
Tüm iş parçacıkları aynı anda başlarsa, static zamanlama, eşitleme olmadan işlemin 125 birimde çalışmasına neden olur. Ancak bir iş parçacığının 100 birim geç geldiğini varsayalım. Ardından kalan yedi iş parçacığı bariyerde 100 birim bekler ve tüm yapı için yürütme süresi 225'e yükselir.
dynamic ve guided zamanlamaları, engelde hiçbir iş parçacığının birden fazla birim beklemesine izin vermediğinden, geciken iş parçacığı yürütme sürelerinin 138 birime kadar artmasına ve muhtemelen senkronizasyon gecikmeleri nedeniyle daha da uzamasına neden olur. Bu tür gecikmeler göz ardı edilemezse, varsayılan öbek boyutunun bir olduğu varsayılarak dynamic için eşitleme sayısının 1000, ancak guided için yalnızca 41 olması önemli hale gelir.
dynamic ve guided her ikisi de 25 öbek boyutuyla 150 birimde tamamlanır ve sırasıyla yalnızca 40 ve 20 olan gerekli eşitlemelerden kaynaklanan gecikmeler buna eklenir.