Difference between revisions of "OpenMP in Small Bites/Scoping"

From HPC Wiki
OpenMP in Small Bites/Scoping
Jump to navigation Jump to search
Line 37: Line 37:
  
 
{{hidden begin   
 
{{hidden begin   
|title = 3. The following code snippet is wrong due to a missing data sharing attribute. How can you fix it?  
+
|title = 3. The following code snippet is wrong due to a missing data sharing attribute. How can you fix it? <br>
 +
<code> int i, int s = 0; <br /> # pragma omp parallel for <br /> for (i = 1; i < 100; i++){</code> <div style="margin-left: 1em;"><code> s = s + a[i];</code></div> <code>}  </code> <br />
 
}}
 
}}
 
<quiz display=simple>
 
<quiz display=simple>
Line 43: Line 44:
 
|type="()"}
 
|type="()"}
 
+ Click and submit to see the answer
 
+ Click and submit to see the answer
|| <code> int i, int s = 0; <br /> # pragma omp parallel for <br /> for (i = 1; i < 100; i++){</code> <div style="margin-left: 1em;"><code> s = s + a[i];</code></div> <code>}  </code> <br /> {{Note|'''Add <code>reduction(+:s)</code> clause to the parallel for construct'''}}  
+
|| {{Note|'''Add <code>reduction(+:s)</code> clause to the parallel for construct'''}}  
 
</quiz>
 
</quiz>
 
{{hidden end}}
 
{{hidden end}}

Revision as of 18:35, 2 November 2020



HPC.NRW
HPC.NRW
Other HPC Courses
1. Gprof Tutorial
2. Introduction to Linux in HPC
OpenMP in Small Bites
1. Overview
2. Worksharing
3. Data Scoping
4. Non-Uniform Memory Access







Video


Quiz

1. What is the default data scoping of variable in a parallel region when this variable is declared before a parallel region?

Click and submit to see the answer

2. What is the data scoping of the variables a, b, c and d in the following code snippet in the parallel region? What is printed when executing the code?
int a = 0;
int b = 23;
int c = -3;
# pragma omp parallel num_threads(2) private(a) reduction(+:c)
{
int d = omp_get_thread_num();
a = 42 + d;
# pragma omp critical
b = 1;
c += a + b;
}
c = c / 2;
printf("a=%d, b=%d, c=%d\n", a, b, c)

Click and submit to see the answer

3. The following code snippet is wrong due to a missing data sharing attribute. How can you fix it?
int i, int s = 0;
# pragma omp parallel for
for (i = 1; i < 100; i++){
s = s + a[i];
}

Click and submit to see the answer