2011-06-15 25 views
45
#pragma omp parallel 
{ 
    int x; // private to each thread ? 
} 

#pragma omp parallel for 
for (int i = 0; i < 1000; ++i) 
{ 
    int x; // private to each thread ? 
} 

Teşekkür ederiz!OpenMP: yerel değişkenler otomatik olarak özeldir?

P.S. Yerel değişkenler otomatik olarak özelse, özel maddesinin kullanılma noktası nedir?

+4

Evet, otomatik olarak özeldirler – Eamorr

cevap

4

Paralel bölgedeki veriler her bir iş parçacığına özeldir.

Lütfen

+1

OpenMP cümleleri, paralel bölgenin dışında bildirilen değişkenlere uygulanır. Sorum, yerel değişkenlerle ilgilidir. – pic11

37

özel maddede nedeni böylece you don't have to change your code olmasıdır http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Veri paylaşımı nitelik maddeleri] bakın.

tek yolu

özel nedeni

int i,j; 
#pragma omp parallel for private(j) 
for(i = 0; i < n; i++) { 
    for(j = 0; j < n; j++) { 
     //do something 
    } 
} 

kodunu değiştirmek için olmadan aşağıdaki kodu paralel hale. Böyle Örneğin:

tamamen geçerli C89/C90 kod ama OpenMP amaçlarından biri etkin veya derleme sırasında devre dışı bırakılabilir pragma ifadeleri eklemek dışında kodunuzu değiştirmek zorunda değil mi
int i 
#pragma omp parallel for 
for(i = 0; i < n; i++) { 
    int j; 
    for(j = 0; j < n; j++) { 
     //do something 
    } 
} 

.

+3

Bu, sorunun gerçek cevabıdır. – emsr

+0

@Z boson 1996 yılında mezun oldum. Tom Cohen benim danışmanımdı. Son dört yıl part-time'ının çoğuyla birlikte iyi bir zaman geçirdim - 1986-96. – emsr