@@ -6,7 +6,10 @@ program perf_cuda_reorder
66 use m_cuda_kernels_reorder, only: reorder_x2y, reorder_x2z, reorder_y2x, &
77 reorder_y2z, reorder_z2x, reorder_z2y, &
88 reorder_c2x, reorder_x2c
9- use m_test_utils, only: write_perf_metric, write_perf_summary, &
9+ use m_backend_runtime, only: select_cuda_device
10+ use m_test_utils, only: initialise_mpi, finalise_test, global_all, &
11+ check_status, &
12+ write_perf_metric, write_perf_summary, &
1013 write_device_bw_metric
1114
1215 implicit none
@@ -29,12 +32,17 @@ program perf_cuda_reorder
2932
3033 integer :: ierr
3134 integer :: n_block, ndof
35+ integer :: nrank, nproc, devnum
3236 integer :: memClockRt, memBusWidth
3337 real (dp), allocatable :: u_i(:, :, :)
3438 real (dp), device, allocatable :: u_i_d(:, :, :), u_o_d(:, :, :), &
3539 u_temp_d(:, :, :)
3640 real (dp), device, allocatable :: u_c_d(:, :, :)
3741 type (dim3) :: blocks, threads
42+ logical :: allpass = .true.
43+
44+ call initialise_mpi(nrank, nproc)
45+ call select_cuda_device(nrank, devnum)
3846
3947 n_block = ny* nz/ SZ
4048 ndof = nx* ny* nz
@@ -47,20 +55,26 @@ program perf_cuda_reorder
4755 call random_number (u_i)
4856 u_i_d = u_i
4957
50- ierr = cudaDeviceGetAttribute(memClockRt, cudaDevAttrMemoryClockRate, 0 )
58+ ierr = cudaDeviceGetAttribute(memClockRt, cudaDevAttrMemoryClockRate, &
59+ devnum)
60+ call check_status(ierr, ' query CUDA memory clock rate' , allpass)
5161 ierr = cudaDeviceGetAttribute(memBusWidth, &
52- cudaDevAttrGlobalMemoryBusWidth, 0 )
53-
54- call run_case(' cuda_reorder_x2y' , CASE_X2Y)
55- call run_case(' cuda_reorder_x2z' , CASE_X2Z)
56- call run_case(' cuda_reorder_y2x' , CASE_Y2X)
57- call run_case(' cuda_reorder_y2z' , CASE_Y2Z)
58- call run_case(' cuda_reorder_z2x' , CASE_Z2X)
59- call run_case(' cuda_reorder_z2y' , CASE_Z2Y)
60- call run_case(' cuda_reorder_x2c' , CASE_X2C)
61- call run_case(' cuda_reorder_c2x' , CASE_C2X)
62-
63- call write_device_bw_metric(memClockRt, memBusWidth)
62+ cudaDevAttrGlobalMemoryBusWidth, devnum)
63+ call check_status(ierr, ' query CUDA memory bus width' , allpass)
64+ call global_all(allpass)
65+
66+ if (allpass) call run_case(' cuda_reorder_x2y' , CASE_X2Y)
67+ if (allpass) call run_case(' cuda_reorder_x2z' , CASE_X2Z)
68+ if (allpass) call run_case(' cuda_reorder_y2x' , CASE_Y2X)
69+ if (allpass) call run_case(' cuda_reorder_y2z' , CASE_Y2Z)
70+ if (allpass) call run_case(' cuda_reorder_z2x' , CASE_Z2X)
71+ if (allpass) call run_case(' cuda_reorder_z2y' , CASE_Z2Y)
72+ if (allpass) call run_case(' cuda_reorder_x2c' , CASE_X2C)
73+ if (allpass) call run_case(' cuda_reorder_c2x' , CASE_C2X)
74+
75+ if (allpass) call write_device_bw_metric(memClockRt, memBusWidth)
76+ call global_all(allpass)
77+ call finalise_test(allpass, nrank)
6478
6579contains
6680
@@ -74,17 +88,20 @@ subroutine run_case(label, case_id)
7488 print * , ' Performance test:' , trim (label)
7589
7690 call prepare_input(case_id)
91+ if (.not. allpass) return
7792
7893 do iter = 1 , n_warmup
7994 call launch_kernel(case_id)
8095 end do
8196 call sync_device()
97+ if (.not. allpass) return
8298
8399 call cpu_time(tstart)
84100 do iter = 1 , n_iters
85101 call launch_kernel(case_id)
86102 end do
87103 call sync_device()
104+ if (.not. allpass) return
88105 call cpu_time(tend)
89106
90107 call write_perf_metric(label, tend - tstart, n_iters, ndof, consumed_bw)
@@ -157,6 +174,8 @@ end subroutine launch_kernel
157174
158175 subroutine sync_device ()
159176 ierr = cudaDeviceSynchronize()
177+ call check_status(ierr, ' synchronise CUDA device' , allpass)
178+ call global_all(allpass)
160179 end subroutine sync_device
161180
162181end program perf_cuda_reorder
0 commit comments