source: CIVL/examples/omp/jan_example.c@ 7d77e64

main test-branch
Last change on this file since 7d77e64 was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 2.6 KB
RevLine 
[0aadd44]1#ifndef _CIVL
2#include <cassert>
3#include <cstdlib>
4#include <cmath>
5#include <iostream>
6#include <fstream>
7#include <vector>
8#include <cstdio>
9#include <string>
10#include <inttypes.h>
11#include <sys/time.h>
12#include <math.h>
13#include <omp.h>
14#endif
15
16
17#ifdef _CIVL
18#include <civlc.cvh>
19#include <stdio.h>
20#include <assert.h>
21#include <omp.h>
22#endif
23
24
25const int sz = 8;
26const int st = 10;
27
28
29#ifdef _CIVL
30$input float uvecin[sz*st*sz];
31#else
32float uvecin[st*sz*sz];
33#endif
34
35
36
37
38int OperatorSerial(float *u_vec)
39{
40#ifdef _CIVL
41 float *u[st][sz];
42 for(int i3=0; i3<st; i3++) {
43 for(int i2=0; i2<sz; i2++) {
44 u[i3][i2] = &u_vec[i3*sz*sz+i2*sz];
45 }
46 }
47#else
48 float (*u)[sz][sz] = (float (*)[sz][sz]) u_vec;
49#endif
50 {
51 int t0;
52 int t1;
53 for (int i3 = 0; i3<st; i3+=1)
54 {
55 {
56 t0 = (i3)%(2);
57 t1 = (t0 + 1)%(2);
58 }
59 {
60 for (int i1 = 1; i1<sz-1; i1++)
61 {
62 #pragma GCC ivdep
63 for (int i2 = 1; i2<sz-1; i2++)
64 {
65 u[t1][i1][i2] = 2.5e-1F*u[t0][i1][i2 - 1] + 2.5e-1F*u[t0][i1][i2 + 1] + 2.5e-1F*u[t0][i1 - 1][i2] + 2.5e-1F*u[t0][i1 + 1][i2];
66 }
67 }
68 }
69 }
70 }
71 return 0;
72}
73
74
75
76
77int OperatorParall(float *u_vec)
78{
79#ifdef _CIVL
80 float *u[st][sz];
81 for(int i3=0; i3<st; i3++) {
82 for(int i2=0; i2<sz; i2++) {
83 u[i3][i2] = &u_vec[i3*sz*sz+i2*sz];
84 }
85 }
86#else
87 float (*u)[sz][sz] = (float (*)[sz][sz]) u_vec;
88#endif
89 {
90 int t0;
91 int t1;
92 #pragma omp parallel
93 for (int i3 = 0; i3<st; i3+=1)
94 {
95 #pragma omp single
96 {
97 t0 = (i3)%(2);
98 t1 = (t0 + 1)%(2);
99 }
100 {
101 #pragma omp for schedule(static)
102 for (int i1 = 1; i1<sz-1; i1++)
103 {
104 //#pragma omp simd aligned(u:64)
105 for (int i2 = 1; i2<sz-1; i2++)
106 {
107 u[t1][i1][i2] = 2.5e-1F*u[t0][i1][i2 - 1] + 2.5e-1F*u[t0][i1][i2 + 1] + 2.5e-1F*u[t0][i1 - 1][i2] + 2.5e-1F*u[t0][i1 + 1][i2];
108 }
109 }
110 }
111 }
112 }
113 return 0;
114}
115
116
117int main(int argc, char** argv) {
118 printf("alive A\n");
119 float uvecoutserial[st*sz*sz];
120 float uvecoutparall[st*sz*sz];
121 printf("alive B\n");
122 #ifndef _CIVL
123 for (int i = 0; i<st*sz*sz; i++) {
124 uvecin[i] = 0.0;
125 }
126 #endif
127 printf("alive C\n");
128 for (int i = 0; i<st*sz*sz; i++) {
129 uvecoutserial[i] = uvecin[i];
130 uvecoutparall[i] = uvecin[i];
131 }
132 printf("alive D\n");
133 OperatorSerial(&uvecoutserial[0]);
134 OperatorParall(&uvecoutparall[0]);
135 printf("alive E\n");
136 for (int i = 0; i<st*sz*sz; i++) {
137 printf("%f %f \n",uvecoutserial[i], uvecoutparall[i]);
138 assert(uvecoutserial[i] == uvecoutparall[i]);
139 }
140 printf("alive F\n");
141 return 0;
142}
Note: See TracBrowser for help on using the repository browser.