summaryrefslogtreecommitdiff
path: root/benchmarks/CUDA/DG/src/MaxwellsRun3d.c
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/CUDA/DG/src/MaxwellsRun3d.c')
-rw-r--r--benchmarks/CUDA/DG/src/MaxwellsRun3d.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/benchmarks/CUDA/DG/src/MaxwellsRun3d.c b/benchmarks/CUDA/DG/src/MaxwellsRun3d.c
new file mode 100644
index 0000000..d4ee9f9
--- /dev/null
+++ b/benchmarks/CUDA/DG/src/MaxwellsRun3d.c
@@ -0,0 +1,60 @@
+#include "mpi.h"
+#include "fem.h"
+
+void MaxwellsRun3d(Mesh *mesh, double FinalTime, double dt){
+
+ double time = 0;
+ int INTRK, tstep=0;
+
+ double mpitime0 = MPI_Wtime();
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ dt = 0.001;
+
+ /* outer time step loop */
+ while (time<FinalTime){
+
+ /* adjust final step to end exactly at FinalTime */
+ if (time+dt > FinalTime) { dt = FinalTime-time; }
+
+ for (INTRK=1; INTRK<=5; ++INTRK) {
+
+ /* compute rhs of TM-mode MaxwellsGPU's equations */
+ const float fdt = dt;
+ const float fa = (float)mesh->rk4a[INTRK-1];
+ const float fb = (float)mesh->rk4b[INTRK-1];
+
+#ifdef CUDA
+ MaxwellsKernel3d(mesh, fa, fb, fdt);
+#else
+ MaxwellsRHS3d(mesh, fa, fb, fdt);
+#endif
+ }
+
+ time += dt; /* increment current time */
+ tstep++; /* increment timestep */
+ }
+
+#ifdef CUDA
+ cudaThreadSynchronize();
+#endif
+
+ double flopsV = p_Np*p_Np*36 + p_Np*66; /* V3 */
+ double flopsS = p_Nfp*p_Nfaces*(15 + 10 + 36) + p_Np*(p_Nfaces*p_Nfp*12 + 6);
+ double flopsR = p_Np*p_Nfields*4;
+
+ int Kloc = mesh->K;
+
+ double mpitime1 = MPI_Wtime();
+
+ double time_total = mpitime1-mpitime0;
+
+ MPI_Barrier(MPI_COMM_WORLD);
+ printf("%d %d %lg %lg proc, N, time taken, GFLOPS/s (GPU)\n",
+ mesh->procid,
+ p_N,
+ time_total,
+ 5*(tstep)*( (flopsV+flopsS+flopsR)*((double)Kloc/(1.e9*time_total))));
+
+
+}