X-Git-Url: http://git.rrze.uni-erlangen.de/gitweb/?p=LbmBenchmarkKernelsPublic.git;a=blobdiff_plain;f=src%2FKernel.h;h=d3f367da0b825396afa5630c7cd844231f43e787;hp=99e126b720b943ff5ffa4e92651a0811128c6b73;hb=8cafd9ea08a6b1103eab29811227a7ae536dffa6;hpb=e3f82424829ebb623343ce0092238f83b4a1b8c2 diff --git a/src/Kernel.h b/src/Kernel.h index 99e126b..d3f367d 100644 --- a/src/Kernel.h +++ b/src/Kernel.h @@ -8,6 +8,10 @@ // Viktor Haag, 2016 // LSS, University of Erlangen-Nuremberg, Germany // +// Michael Hussnaetter, 2017-2018 +// University of Erlangen-Nuremberg, Germany +// michael.hussnaetter -at- fau.de +// // This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). // // LbmBenchKernels is free software: you can redistribute it and/or modify @@ -47,6 +51,12 @@ #define DATA_LAYOUT_NAME AoS #endif +#ifdef DATA_LAYOUT_AOSOA + #define DATA_LAYOUT_NAME AoSoA + // number of cells consecutively stored (-> array length) + #define AOSOA_BLOCK_SIZE 8 +#endif + #ifdef PROP_MODEL_PUSH #define PROP_MODEL_NAME Push #endif @@ -60,9 +70,15 @@ #endif +#ifdef PRECISION_DP + typedef double PdfT; +#elif defined(PRECISION_SP) + typedef float PdfT; +#else + #error PRECISION must be defined as dp or sp. +#endif -typedef double PdfT; - + #define F(number) (PdfT)(number) #define D3Q19 @@ -181,6 +197,8 @@ typedef struct KernelData_ { int * BounceBackPdfsSrc; int * BounceBackPdfsDst; int nBounceBackPdfs; + double LoopBalance; // loopBalance when set in kernel init, Main.c may use it to derive metrics + double Duration; // duration when set in kernel routine, Main.c may use it to derive metrics void (* BoundaryConditionsGetPdf)(struct KernelData_ * kd, int x, int y, int z, int dir, PdfT * pdf); void (* BoundaryConditionsSetPdf)(struct KernelData_ * kd, int x, int y, int z, int dir, PdfT pdf); @@ -192,6 +210,10 @@ typedef struct KernelData_ { } KernelData; + +#define X_KERNEL_START(_kd) do { _kd->Duration = Time(); } while (0) +#define X_KERNEL_END(_kd) do { _kd->Duration = Time() - _kd->Duration; } while (0) + typedef struct Parameters_ { int nArgs; char ** Args;