2016-03-19 21 views
1

Merhaba Bu web sitesi http://www.viva64.com/en/a/0054/ okur ve 17 numaralı nokta için, bariyer olmadan aşağıdaki kodun yanlış olduğunu söylüyor. Niye ya ? http://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClause numaralı telefondan okudum, her bir paralel bloğun sonunda ve her bölümün sonunda, artık direktif kullanılmadıkça, tek bir ifade için örtülü bir bariyer var.OpenMP örtülü bariyer

struct MyType 
{ 
    ~MyType(); 
}; 
MyType threaded_var; 
#pragma omp threadprivate(threaded_var) 
int main() 
{ 
    #pragma omp parallel 
    { 
      ... 
      #pragma omp barrier // code is wrong without barrier. 
    }  
} 

Birisi lütfen bana açıklayınız. Teşekkürler.

+1

[bir impl yoktur, örtük bir bariyer olarak senkronize Paralel bölgenin sonunda iktidar bariyeri] (https://computing.llnl.gov/tutorials/openMP/#ParallelRegion). Doğru olduğunu varsayarsak bağlantıda 17 numaralı noktanın yanlış olduğunu düşünüyorum. –

+0

OpenMP 4.5 spesifikasyonunu kontrol ettik ve "Paralel yapının sonunda örtülü bir bariyer var" diyor. –

+0

Belirtim, "Bir threadprivate değişkeninin tüm kopyalarının saklanması, statik değişkenlerin temel dilde nasıl ele alındığına, ancak programda belirtilmemiş bir noktaya göre serbest bırakılır." –

cevap

0

Bağlantılı web sayfası bu noktada yanlış. Paralel bölümün sonunda gerçek bir bariyer var.

web sitesi Windows odağı görünüyor ve MS sadece OpenMP standart 2.0 desteği sunduğu için, bu örtülü bariyer yalnızca geçerli standart 4,5 olmadığını belirterek değer değil, aynı zamanda 2.0 sürümü olabilir:

paralel yapının tamamlanmasının ardından

takımda yılında ipler [...]

Bildiğim kadarıyla anladığım kadarıyla http://www.openmp.org/mp-documents/cspec20.pdf