diff options
| author | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
| commit | 69f2911e04ffb1b19eef1fafb8c040af271f656e (patch) | |
| tree | 231d3b6bdc3a202f7c255bfcf7bf2c36e32cee9e /benchmarks/CUDA/LPS/laplace3d_gold.cpp | |
creating branch for adding support for CUDA 3.x and Fermi
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6829]
Diffstat (limited to 'benchmarks/CUDA/LPS/laplace3d_gold.cpp')
| -rw-r--r-- | benchmarks/CUDA/LPS/laplace3d_gold.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/benchmarks/CUDA/LPS/laplace3d_gold.cpp b/benchmarks/CUDA/LPS/laplace3d_gold.cpp new file mode 100644 index 0000000..966c4aa --- /dev/null +++ b/benchmarks/CUDA/LPS/laplace3d_gold.cpp @@ -0,0 +1,27 @@ + +//////////////////////////////////////////////////////////////////////////////// +// export C interface +extern "C" +void Gold_laplace3d(int NX, int NY, int NZ, float* u1, float* u2) +{ + int i, j, k, ind; + float sixth=1.0f/6.0f; // predefining this improves performance more than 10% + + for (k=0; k<NZ; k++) { + for (j=0; j<NY; j++) { + for (i=0; i<NX; i++) { // i loop innermost for sequential memory access + ind = i + j*NX + k*NX*NY; + + if (i==0 || i==NX-1 || j==0 || j==NY-1|| k==0 || k==NZ-1) { + u2[ind] = u1[ind]; // Dirichlet b.c.'s + } + else { + u2[ind] = ( u1[ind-1 ] + u1[ind+1 ] + + u1[ind-NX ] + u1[ind+NX ] + + u1[ind-NX*NY] + u1[ind+NX*NY] ) * sixth; + } + } + } + } +} + |
