diff options
Diffstat (limited to 'extern/mantaflow/preprocessed/commonkernels.h')
-rw-r--r-- | extern/mantaflow/preprocessed/commonkernels.h | 853 |
1 files changed, 407 insertions, 446 deletions
diff --git a/extern/mantaflow/preprocessed/commonkernels.h b/extern/mantaflow/preprocessed/commonkernels.h index 7fa6f185146..7ac13fbdfc4 100644 --- a/extern/mantaflow/preprocessed/commonkernels.h +++ b/extern/mantaflow/preprocessed/commonkernels.h @@ -34,7 +34,7 @@ struct InvertCheckFluid : public KernelBase { runMessage(); run(); } - inline void op(IndexInt idx, const FlagGrid &flags, Grid<Real> &grid) const + inline void op(IndexInt idx, const FlagGrid &flags, Grid<Real> &grid) { if (flags.isFluid(idx) && grid[idx] > 0) grid[idx] = 1.0 / grid[idx]; @@ -49,21 +49,17 @@ struct InvertCheckFluid : public KernelBase { return grid; } typedef Grid<Real> type1; - void runMessage() - { - debMsg("Executing kernel InvertCheckFluid ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const - { - for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, flags, grid); - } + void runMessage(){}; void run() { - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this); + const IndexInt _sz = size; +#pragma omp parallel + { + +#pragma omp for + for (IndexInt i = 0; i < _sz; i++) + op(i, flags, grid); + } } const FlagGrid &flags; Grid<Real> &grid; @@ -77,9 +73,9 @@ struct GridSumSqr : public KernelBase { runMessage(); run(); } - inline void op(IndexInt idx, const Grid<Real> &grid, double &sum) + inline void op(int i, int j, int k, const Grid<Real> &grid, double &sum) { - sum += square((double)grid[idx]); + sum += square((double)grid(i, j, k)); } inline operator double() { @@ -94,28 +90,37 @@ struct GridSumSqr : public KernelBase { return grid; } typedef Grid<Real> type0; - void runMessage() - { - debMsg("Executing kernel GridSumSqr ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) - { - for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, grid, sum); - } + void runMessage(){}; void run() { - tbb::parallel_reduce(tbb::blocked_range<IndexInt>(0, size), *this); - } - GridSumSqr(GridSumSqr &o, tbb::split) : KernelBase(o), grid(o.grid), sum(0) - { - } - void join(const GridSumSqr &o) - { - sum += o.sum; + const int _maxX = maxX; + const int _maxY = maxY; + if (maxZ > 1) { + const Grid<Real> &grid = getArg0(); +#pragma omp target teams distribute parallel for reduction(+ : sum) collapse(2) schedule(static, 1) + { + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, grid, sum); + } + { + this->sum = sum; + } + } + else { + const int k = 0; + const Grid<Real> &grid = getArg0(); +#pragma omp target teams distribute parallel for reduction(+ : sum) collapse(1) schedule(static, 1) + { + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, grid, sum); + } + { + this->sum = sum; + } + } } const Grid<Real> &grid; double sum; @@ -129,7 +134,7 @@ struct CurlOp : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const Grid<Vec3> &grid, Grid<Vec3> &dst) const + inline void op(int i, int j, int k, const Grid<Vec3> &grid, Grid<Vec3> &dst) { Vec3 v = Vec3(0., 0., @@ -153,37 +158,35 @@ struct CurlOp : public KernelBase { return dst; } typedef Grid<Vec3> type1; - void runMessage() - { - debMsg("Executing kernel CurlOp ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, grid, dst); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, grid, dst); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, grid, dst); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, grid, dst); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } const Grid<Vec3> &grid; Grid<Vec3> &dst; }; @@ -197,7 +200,7 @@ struct DivergenceOpMAC : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Real> &div, const MACGrid &grid) const + inline void op(int i, int j, int k, Grid<Real> &div, const MACGrid &grid) { Vec3 del = Vec3(grid(i + 1, j, k).x, grid(i, j + 1, k).y, 0.) - grid(i, j, k); if (grid.is3D()) @@ -216,37 +219,35 @@ struct DivergenceOpMAC : public KernelBase { return grid; } typedef MACGrid type1; - void runMessage() - { - debMsg("Executing kernel DivergenceOpMAC ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, div, grid); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, div, grid); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, div, grid); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, div, grid); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } Grid<Real> ÷ const MACGrid &grid; }; @@ -259,7 +260,7 @@ struct GradientOpMAC : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, MACGrid &gradient, const Grid<Real> &grid) const + inline void op(int i, int j, int k, MACGrid &gradient, const Grid<Real> &grid) { Vec3 grad = (Vec3(grid(i, j, k)) - Vec3(grid(i - 1, j, k), grid(i, j - 1, k), 0.)); if (grid.is3D()) @@ -278,37 +279,35 @@ struct GradientOpMAC : public KernelBase { return grid; } typedef Grid<Real> type1; - void runMessage() - { - debMsg("Executing kernel GradientOpMAC ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, gradient, grid); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, gradient, grid); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, gradient, grid); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, gradient, grid); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } MACGrid &gradient; const Grid<Real> &grid; }; @@ -321,7 +320,7 @@ struct GradientOp : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Vec3> &gradient, const Grid<Real> &grid) const + inline void op(int i, int j, int k, Grid<Vec3> &gradient, const Grid<Real> &grid) { Vec3 grad = 0.5 * Vec3(grid(i + 1, j, k) - grid(i - 1, j, k), grid(i, j + 1, k) - grid(i, j - 1, k), @@ -340,37 +339,35 @@ struct GradientOp : public KernelBase { return grid; } typedef Grid<Real> type1; - void runMessage() - { - debMsg("Executing kernel GradientOp ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, gradient, grid); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, gradient, grid); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, gradient, grid); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, gradient, grid); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } Grid<Vec3> &gradient; const Grid<Real> &grid; }; @@ -383,7 +380,7 @@ struct LaplaceOp : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Real> &laplace, const Grid<Real> &grid) const + inline void op(int i, int j, int k, Grid<Real> &laplace, const Grid<Real> &grid) { laplace(i, j, k) = grid(i + 1, j, k) - 2.0 * grid(i, j, k) + grid(i - 1, j, k); laplace(i, j, k) += grid(i, j + 1, k) - 2.0 * grid(i, j, k) + grid(i, j - 1, k); @@ -401,37 +398,35 @@ struct LaplaceOp : public KernelBase { return grid; } typedef Grid<Real> type1; - void runMessage() - { - debMsg("Executing kernel LaplaceOp ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, laplace, grid); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, laplace, grid); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, laplace, grid); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, laplace, grid); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } Grid<Real> &laplace; const Grid<Real> &grid; }; @@ -444,7 +439,7 @@ struct CurvatureOp : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Real> &curv, const Grid<Real> &grid, const Real h) const + inline void op(int i, int j, int k, Grid<Real> &curv, const Grid<Real> &grid, const Real h) { const Real over_h = 1.0 / h; const Real x = 0.5 * (grid(i + 1, j, k) - grid(i - 1, j, k)) * over_h; @@ -492,37 +487,35 @@ struct CurvatureOp : public KernelBase { return h; } typedef Real type2; - void runMessage() - { - debMsg("Executing kernel CurvatureOp ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, curv, grid, h); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, curv, grid, h); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, curv, grid, h); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, curv, grid, h); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } Grid<Real> &curv; const Grid<Real> &grid; const Real h; @@ -536,7 +529,7 @@ struct GetShiftedComponent : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const Grid<Vec3> &grid, Grid<Real> &comp, int dim) const + inline void op(int i, int j, int k, const Grid<Vec3> &grid, Grid<Real> &comp, int dim) { Vec3i ishift(i, j, k); ishift[dim]--; @@ -557,37 +550,35 @@ struct GetShiftedComponent : public KernelBase { return dim; } typedef int type2; - void runMessage() - { - debMsg("Executing kernel GetShiftedComponent ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, grid, comp, dim); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, grid, comp, dim); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, grid, comp, dim); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, grid, comp, dim); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } const Grid<Vec3> &grid; Grid<Real> ∁ int dim; @@ -602,7 +593,7 @@ struct GetComponent : public KernelBase { runMessage(); run(); } - inline void op(IndexInt idx, const Grid<Vec3> &grid, Grid<Real> &comp, int dim) const + inline void op(IndexInt idx, const Grid<Vec3> &grid, Grid<Real> &comp, int dim) { comp[idx] = grid[idx][dim]; } @@ -621,21 +612,17 @@ struct GetComponent : public KernelBase { return dim; } typedef int type2; - void runMessage() - { - debMsg("Executing kernel GetComponent ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const - { - for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, grid, comp, dim); - } + void runMessage(){}; void run() { - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this); + const IndexInt _sz = size; +#pragma omp parallel + { + +#pragma omp for + for (IndexInt i = 0; i < _sz; i++) + op(i, grid, comp, dim); + } } const Grid<Vec3> &grid; Grid<Real> ∁ @@ -650,7 +637,7 @@ struct GridNorm : public KernelBase { runMessage(); run(); } - inline void op(IndexInt idx, Grid<Real> &n, const Grid<Vec3> &grid) const + inline void op(IndexInt idx, Grid<Real> &n, const Grid<Vec3> &grid) { n[idx] = norm(grid[idx]); } @@ -664,21 +651,17 @@ struct GridNorm : public KernelBase { return grid; } typedef Grid<Vec3> type1; - void runMessage() - { - debMsg("Executing kernel GridNorm ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const - { - for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, n, grid); - } + void runMessage(){}; void run() { - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this); + const IndexInt _sz = size; +#pragma omp parallel + { + +#pragma omp for + for (IndexInt i = 0; i < _sz; i++) + op(i, n, grid); + } } Grid<Real> &n; const Grid<Vec3> &grid; @@ -693,7 +676,7 @@ struct SetComponent : public KernelBase { runMessage(); run(); } - inline void op(IndexInt idx, Grid<Vec3> &grid, const Grid<Real> &comp, int dim) const + inline void op(IndexInt idx, Grid<Vec3> &grid, const Grid<Real> &comp, int dim) { grid[idx][dim] = comp[idx]; } @@ -712,21 +695,17 @@ struct SetComponent : public KernelBase { return dim; } typedef int type2; - void runMessage() - { - debMsg("Executing kernel SetComponent ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const - { - for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, grid, comp, dim); - } + void runMessage(){}; void run() { - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this); + const IndexInt _sz = size; +#pragma omp parallel + { + +#pragma omp for + for (IndexInt i = 0; i < _sz; i++) + op(i, grid, comp, dim); + } } Grid<Vec3> &grid; const Grid<Real> ∁ @@ -742,7 +721,7 @@ struct GetCentered : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Vec3> ¢er, const MACGrid &vel) const + inline void op(int i, int j, int k, Grid<Vec3> ¢er, const MACGrid &vel) { Vec3 v = 0.5 * (vel(i, j, k) + Vec3(vel(i + 1, j, k).x, vel(i, j + 1, k).y, 0.)); if (vel.is3D()) @@ -761,37 +740,35 @@ struct GetCentered : public KernelBase { return vel; } typedef MACGrid type1; - void runMessage() - { - debMsg("Executing kernel GetCentered ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, center, vel); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, center, vel); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, center, vel); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, center, vel); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } Grid<Vec3> ¢er; const MACGrid &vel; }; @@ -804,7 +781,7 @@ struct GetMAC : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, MACGrid &vel, const Grid<Vec3> ¢er) const + inline void op(int i, int j, int k, MACGrid &vel, const Grid<Vec3> ¢er) { Vec3 v = 0.5 * (center(i, j, k) + Vec3(center(i - 1, j, k).x, center(i, j - 1, k).y, 0.)); if (vel.is3D()) @@ -823,37 +800,35 @@ struct GetMAC : public KernelBase { return center; } typedef Grid<Vec3> type1; - void runMessage() - { - debMsg("Executing kernel GetMAC ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 1; j < _maxY; j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, vel, center); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, vel, center); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 1; i < _maxX; i++) - op(i, j, k, vel, center); +#pragma omp parallel + { + +#pragma omp for + for (int j = 1; j < _maxY; j++) + for (int i = 1; i < _maxX; i++) + op(i, j, k, vel, center); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(1, maxY), *this); - } MACGrid &vel; const Grid<Vec3> ¢er; }; @@ -866,7 +841,7 @@ struct FillInBoundary : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, Grid<Vec3> &grid, int g) const + inline void op(int i, int j, int k, Grid<Vec3> &grid, int g) { if (i == 0) grid(i, j, k) = grid(i + 1, j, k); @@ -891,37 +866,35 @@ struct FillInBoundary : public KernelBase { return g; } typedef int type1; - void runMessage() - { - debMsg("Executing kernel FillInBoundary ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, grid, g); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, grid, g); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, grid, g); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, grid, g); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } Grid<Vec3> &grid; int g; }; @@ -939,7 +912,7 @@ struct kn_conv_mex_in_to_MAC : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const double *p_lin_array, MACGrid *p_result) const + inline void op(int i, int j, int k, const double *p_lin_array, MACGrid *p_result) { int ijk = i + j * p_result->getSizeX() + k * p_result->getSizeX() * p_result->getSizeY(); const int n = p_result->getSizeX() * p_result->getSizeY() * p_result->getSizeZ(); @@ -958,37 +931,35 @@ struct kn_conv_mex_in_to_MAC : public KernelBase { return p_result; } typedef MACGrid type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_mex_in_to_MAC ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const double *p_lin_array; MACGrid *p_result; }; @@ -1000,7 +971,7 @@ struct kn_conv_MAC_to_mex_out : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const MACGrid *p_mac, double *p_result) const + inline void op(int i, int j, int k, const MACGrid *p_mac, double *p_result) { int ijk = i + j * p_mac->getSizeX() + k * p_mac->getSizeX() * p_mac->getSizeY(); const int n = p_mac->getSizeX() * p_mac->getSizeY() * p_mac->getSizeZ(); @@ -1019,37 +990,35 @@ struct kn_conv_MAC_to_mex_out : public KernelBase { return p_result; } typedef double type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_MAC_to_mex_out ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_mac, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_mac, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_mac, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_mac, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const MACGrid *p_mac; double *p_result; }; @@ -1063,7 +1032,7 @@ struct kn_conv_mex_in_to_Vec3 : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const double *p_lin_array, Grid<Vec3> *p_result) const + inline void op(int i, int j, int k, const double *p_lin_array, Grid<Vec3> *p_result) { int ijk = i + j * p_result->getSizeX() + k * p_result->getSizeX() * p_result->getSizeY(); const int n = p_result->getSizeX() * p_result->getSizeY() * p_result->getSizeZ(); @@ -1082,37 +1051,35 @@ struct kn_conv_mex_in_to_Vec3 : public KernelBase { return p_result; } typedef Grid<Vec3> type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_mex_in_to_Vec3 ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const double *p_lin_array; Grid<Vec3> *p_result; }; @@ -1124,7 +1091,7 @@ struct kn_conv_Vec3_to_mex_out : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const Grid<Vec3> *p_Vec3, double *p_result) const + inline void op(int i, int j, int k, const Grid<Vec3> *p_Vec3, double *p_result) { int ijk = i + j * p_Vec3->getSizeX() + k * p_Vec3->getSizeX() * p_Vec3->getSizeY(); const int n = p_Vec3->getSizeX() * p_Vec3->getSizeY() * p_Vec3->getSizeZ(); @@ -1143,37 +1110,35 @@ struct kn_conv_Vec3_to_mex_out : public KernelBase { return p_result; } typedef double type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_Vec3_to_mex_out ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_Vec3, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_Vec3, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_Vec3, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_Vec3, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const Grid<Vec3> *p_Vec3; double *p_result; }; @@ -1187,7 +1152,7 @@ struct kn_conv_mex_in_to_Real : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const double *p_lin_array, Grid<Real> *p_result) const + inline void op(int i, int j, int k, const double *p_lin_array, Grid<Real> *p_result) { int ijk = i + j * p_result->getSizeX() + k * p_result->getSizeX() * p_result->getSizeY(); @@ -1203,37 +1168,35 @@ struct kn_conv_mex_in_to_Real : public KernelBase { return p_result; } typedef Grid<Real> type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_mex_in_to_Real ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_lin_array, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_lin_array, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const double *p_lin_array; Grid<Real> *p_result; }; @@ -1245,7 +1208,7 @@ struct kn_conv_Real_to_mex_out : public KernelBase { runMessage(); run(); } - inline void op(int i, int j, int k, const Grid<Real> *p_grid, double *p_result) const + inline void op(int i, int j, int k, const Grid<Real> *p_grid, double *p_result) { int ijk = i + j * p_grid->getSizeX() + k * p_grid->getSizeX() * p_grid->getSizeY(); @@ -1261,37 +1224,35 @@ struct kn_conv_Real_to_mex_out : public KernelBase { return p_result; } typedef double type1; - void runMessage() - { - debMsg("Executing kernel kn_conv_Real_to_mex_out ", 3); - debMsg("Kernel range" - << " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ", - 4); - }; - void operator()(const tbb::blocked_range<IndexInt> &__r) const + void runMessage(){}; + void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { - for (int k = __r.begin(); k != (int)__r.end(); k++) - for (int j = 0; j < _maxY; j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_grid, p_result); + +#pragma omp parallel + { + +#pragma omp for + for (int k = minZ; k < maxZ; k++) + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_grid, p_result); + } } else { const int k = 0; - for (int j = __r.begin(); j != (int)__r.end(); j++) - for (int i = 0; i < _maxX; i++) - op(i, j, k, p_grid, p_result); +#pragma omp parallel + { + +#pragma omp for + for (int j = 0; j < _maxY; j++) + for (int i = 0; i < _maxX; i++) + op(i, j, k, p_grid, p_result); + } } } - void run() - { - if (maxZ > 1) - tbb::parallel_for(tbb::blocked_range<IndexInt>(minZ, maxZ), *this); - else - tbb::parallel_for(tbb::blocked_range<IndexInt>(0, maxY), *this); - } const Grid<Real> *p_grid; double *p_result; }; |