Go to the documentation of this file.
11 Info<<
"Initialising fields" <<
endl;
13 const label nIter = 100;
14 const label size = 10000000;
15 const label rndAddrSkip = 40;
16 const label redFac = 6;
17 const label redSize = size/redFac;
20 double*
f1 =
new double[size];
21 double* f2 =
new double[size];
22 double* f3 =
new double[size];
23 double* f4 =
new double[size];
24 double* fr =
new double[redSize];
29 for (
label i=0; i<size; i++)
35 redAddr[i] = i/redFac;
36 redAddr2[i] = (size - i - 1)/redFac;
39 for (
label i=0; i<size; i+=rndAddrSkip)
41 addr[i] = genAddr.
integer(0, size-1);
44 for (
label i=0; i<redSize; i++)
52 Info<<
"Single loop combined operation (expression templates)"
57 for (
int j=0; j<nIter; j++)
59 for (
label i=0; i<size; i++)
61 f4[i] =
f1[i] + f2[i] - f3[i];
65 Info<<
"ExecutionTime = "
73 Info<<
"Single loop combined operation with indirect addressing"
78 for (
int j=0; j<nIter; j++)
80 for (
label i=0; i<size; i++)
82 f4[addr[i]] =
f1[addr[i]] + f2[addr[i]] - f3[addr[i]];
86 Info<<
"ExecutionTime = "
94 Info<<
"Single loop reduction operation"
98 label redOffset = (size - 1)/redFac;
100 for (
int j=0; j<nIter; j++)
102 for (
label i=0; i<size; i++)
106 fr[redOffset - j] -= f2[i];
110 Info<<
"ExecutionTime = "
118 Info<<
"Single loop reduction operation with indirect addressing"
123 for (
int j=0; j<nIter; j++)
125 for (
label i=0; i<size; i++)
127 fr[redAddr[i]] +=
f1[i];
128 fr[redAddr2[i]] -= f2[i];
132 Info<<
"ExecutionTime = "
140 Info<<
"Separate loops ?= operations" <<
endl;
144 for (
int j=0; j<nIter; j++)
146 for (
label i=0; i<size; i++)
150 for (
label i=0; i<size; i++)
154 for (
label i=0; i<size; i++)
160 Info<<
"ExecutionTime = "
168 Info<<
"OpenFOAM field algebra" <<
endl;
178 for (
int j=0; j<nIter; j++)
186 Info<<
"ExecutionTime = "
Starts timing CPU usage and return elapsed time from start.
Simple random number generator.
Useful combination of include files which define Sin, Sout and Serr and the use of IO streams general...
OFstream Snull
Global predefined null output stream "/dev/null".
Ostream & endl(Ostream &os)
Add newline and flush stream.
Specialisations of Field<T> for scalar, vector and tensor.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Pre-declare SubField and related Field type.
double elapsedCpuTime() const
Return CPU time (in seconds) from the start.
label integer(const label lower, const label upper)
Label [lower..upper].