D. schedule yan tümcesi

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 tüm iş parçacıklarının aynı anda bariyere ulaşması için paylaşılan çalışma dağıtılmalıdır. Bu paylaşılan çalışmalardan bazıları yapılarda for yer alırsa, yan tümcesi schedule 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ı iş parçacıklarına döngülerin bazılarında görece daha az iş atanmış olsa bile, her iş parçacığının bir dizi döngüdeki dizideki aynı öğe kümesine tutarlı bir şekilde başvurmasını tercih edebilir. Bu kurulum, zamanlama tüm static döngüler için aynı sınırlarla 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 karşılaştırılabilir hesaplama kaynakları aldığı varsayılır. Bu gibi durumlarda, bir for yapı için zamanlama seçimi, bir yan tümcesi varsa nowait , önceki en yakın bariyer ile örtülü kapatma engeli veya yaklaşan en yakın engel arasında gerçekleştirilecek 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, n = p*q - r değerini 0 <= r < p ile karşılayan tamsayı q olan ceiling(n/p) değeridir. Bu örnek için zamanlamanın static bir uygulaması ilk p-1 iş parçacıklarına q yinelemeleri ve son iş parçacığına q-r yinelemeleri 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 her atama için eşitleme ile kullanılabilir hale geldikçe iş parçacıklarına birer birer atanması gerektiği anlamına gelir. Eşitleme ek yükü, k en küçük öbek boyutu k değeri 1'den büyük olarak belirtilerek azaltılabilir, böylece iş parçacıklarına k'den daha az kalana kadar bir kerede k atanır. Bu, hiçbir iş parçacığının ( en fazla) k yinelemelerinin son öbeklerini yürütmek için başka bir iş parçacığından daha uzun süre beklememesini garanti eder.

dynamic İş parçacıkları, her yineleme için değişen çalışma miktarlarıyla çok aynı etkiye sahip olan farklı hesaplama kaynakları alıyorsa 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, yapısının for önünde yan tümceleri olan bir veya daha fazla bölüm veya for yapı nowait varsa 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);
  }
}

gibi dynamiczamanlama, guided hiçbir iş parçacığının engelde son yinelemesini yürütmek için başka bir iş parçacığından daha uzun beklememesini veya k öbek boyutu belirtilirse son k yinelemelerini 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 kullanılabilir ilk iş parçacığına q = tavan(n/p) yinelemeleri atar, n değerini n-q ve p*k'nin daha büyük değerine ayarlar ve tüm yinelemeler atanana kadar yineler.

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 yapısı eşitleme olmadan 125 birim halinde yürütülmesine 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.

Hem hem de dynamic guided zamanlamaları, engelde birden fazla birim için iş parçacığı beklemediğinden, gecikmeli iş parçacığı yürütme sürelerinin yapısının yalnızca 138 birime artmasına ve muhtemelen eşitleme gecikmeleriyle artmasına neden olur. Bu tür gecikmeler göz ardı edilemezse, varsayılan öbek boyutunun bir olduğu varsayılarak eşitleme sayısının için 1000 dynamic , ancak için guidedyalnızca 41 olması önemli hale gelir. 25 dynamic öbek boyutuna sahip ve guided her ikisi de 150 birim olarak tamamlanıp, artık sırasıyla yalnızca 40 ve 20 olan gerekli eşitlemelerden kaynaklanan gecikmeler.