Skip to content

Commit 21473e5

Browse files
committed
Complete examples for parallel for with and without nounroll.
1 parent b21a0a7 commit 21473e5

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <omp.h>
2+
3+
4+
// Do parallel for
5+
void omp(float *x, int npoints) {
6+
7+
#pragma omp parallel for
8+
for (int i = 0; i < npoints; i++) {
9+
x[i] *= x[i];
10+
}
11+
}
12+
13+
14+
double __enzyme_autodiff(void*, ...);
15+
16+
int main() {
17+
18+
// Initialize array
19+
float array[1000];
20+
for(int i=0, i<1000; i++) {
21+
array[i] = i + 0.5;
22+
}
23+
24+
// Set up the array to host the gradients
25+
float d_array[1000];
26+
for(int i=0, i<1000; i++) {
27+
d_array[i] = 1.0f;
28+
}
29+
30+
// Alter the entries
31+
#ifdef FORWARD
32+
sub(array, 1000);
33+
#else
34+
__enzyme_autodiff((void*)omp, array, d_array, 1000);
35+
#endif
36+
37+
return 0;
38+
}

P5_omp_parallel_for/omp_parallel_for_firstprivate.c

Whitespace-only changes.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <omp.h>
2+
3+
4+
// Do parallel for
5+
void omp(float *x, int npoints) {
6+
7+
#pragma omp parallel for
8+
#pragma nounroll
9+
for (int i = 0; i < npoints; i++) {
10+
x[i] *= x[i];
11+
}
12+
}
13+
14+
15+
double __enzyme_autodiff(void*, ...);
16+
17+
int main() {
18+
19+
// Initialize array
20+
float array[1000];
21+
for(int i=0, i<1000; i++) {
22+
array[i] = i + 0.5;
23+
}
24+
25+
// Set up the array to host the gradients
26+
float d_array[1000];
27+
for(int i=0, i<1000; i++) {
28+
d_array[i] = 1.0f;
29+
}
30+
31+
// Alter the entries
32+
#ifdef FORWARD
33+
sub(array, 1000);
34+
#else
35+
__enzyme_autodiff((void*)omp, array, d_array, 1000);
36+
#endif
37+
38+
return 0;
39+
}

0 commit comments

Comments
 (0)