check if increasing halo to get proper alignment would increase performance? (of course the idea is to increase the amout of allocated memory, but not to increase the amount of data exchanged in boundary condition logic)
check if storing blitz expressions would reduce OO-overhead (e.g. the antidiffusive velocities), here's an example:
include <blitz/array.h>
using arr_t = blitz::Array<double, 2>;
using rng_t = blitz::Range;
int main()
{
rng_t i(0,10), j(0,10);
arr_t a(i,j), b(i,j);
auto xpr = 2 * a(i,j) * b(i,j);
a = 2;
b = 2;
for (int i=0; i<10; ++i)
a = xpr;
std::cerr << a << std::endl;
}
replace where()s in FCT code with zero-multipliers
check if consts, noexcepts or copy-instead-of-ref (or vice-versa) could help
check if storing blitz expressions would reduce OO-overhead (e.g. the antidiffusive velocities), here's an example:
include <blitz/array.h>
using arr_t = blitz::Array<double, 2>; using rng_t = blitz::Range;
int main() { rng_t i(0,10), j(0,10); arr_t a(i,j), b(i,j); auto xpr = 2 * a(i,j) * b(i,j);
a = 2; b = 2;
for (int i=0; i<10; ++i) a = xpr;
std::cerr << a << std::endl; }
... finally, check alternatives for Blitz...