20#ifndef TIMER_SYNC_DEVICE
31 start_ = clock::now();
37#ifdef TIMER_SYNC_DEVICE
41 auto end = clock::now();
42 double local_ms = std::chrono::duration<double, std::milli>(end - start_).count();
43 double global_ms = local_ms;
46 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
47 MPI_Comm_size(MPI_COMM_WORLD, &nranks);
49 MPI_Barrier(MPI_COMM_WORLD);
52 MPI_Reduce(MPI_IN_PLACE,&global_ms, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
54 MPI_Reduce(&global_ms, NULL, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
56#ifdef TIMER_OUTPUT_ALLRANKS
57 if(nranks > 1 && rank > 0)
58 std::printf(
"[TIMER(%d)] %s : %.6f ms\n", rank, name_, local_ms);
61 std::printf(
"[TIMER(%d)] %s : %.6f ms\n", rank, name_, local_ms);
64 std::printf(
"[TIMER(all)] %s : %.6f ms\n", name_, global_ms);
75 using clock = std::chrono::steady_clock;
77 clock::time_point start_;