xref: /petsc/src/sys/objects/device/tests/ex2hip.hip.cxx (revision daba9d70159ea2f6905738fcbec7404635487b2b)
1 static char help[] = "Benchmarking hipPointerGetAttributes() time\n";
2 /*
3   Running example on Crusher at OLCF:
4     # run with 1 mpi rank (-n1), 32 CPUs (-c32), and map the process to CPU 0 and GPU 0
5   $ srun -n1 -c32 --cpu-bind=map_cpu:0 --gpus-per-node=8 --gpu-bind=map_gpu:0 ./ex2hip
6     Average hipPointerGetAttributes() time = 0.24 microseconds
7 */
8 #include <petscsys.h>
9 #include <petscdevice_hip.h>
10 
main(int argc,char ** argv)11 int main(int argc, char **argv)
12 {
13   PetscInt              i, n = 4000;
14   hipError_t            cerr;
15   PetscScalar         **ptrs;
16   PetscLogDouble        tstart, tend, time;
17   hipPointerAttribute_t attr;
18 
19   PetscFunctionBeginUser;
20   PetscCall(PetscInitialize(&argc, &argv, nullptr, help));
21   PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL));
22   PetscCallHIP(hipStreamSynchronize(NULL)); /* Initialize HIP runtime to get more accurate timing below */
23 
24   PetscCall(PetscMalloc1(n, &ptrs));
25   for (i = 0; i < n; i++) {
26     if (i % 2) PetscCall(PetscMalloc1(i + 16, &ptrs[i]));
27     else PetscCallHIP(hipMalloc((void **)&ptrs[i], (i + 16) * sizeof(PetscScalar)));
28   }
29 
30   PetscCall(PetscTime(&tstart));
31   for (i = 0; i < n; i++) {
32     cerr = hipPointerGetAttributes(&attr, ptrs[i]);
33     if (cerr) cerr = hipGetLastError();
34   }
35   PetscCall(PetscTime(&tend));
36   time = (tend - tstart) * 1e6 / n;
37 
38   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Average hipPointerGetAttributes() time = %.2f microseconds\n", time));
39 
40   for (i = 0; i < n; i++) {
41     if (i % 2) PetscCall(PetscFree(ptrs[i]));
42     else PetscCallHIP(hipFree(ptrs[i]));
43   }
44   PetscCall(PetscFree(ptrs));
45   PetscCall(PetscFinalize());
46   return 0;
47 }
48 
49 /*TEST
50   build:
51     requires: hip
52 
53   test:
54     requires: hip
55     args: -n 2
56     output_file: output/empty.out
57     filter: grep "DOES_NOT_EXIST"
58 
59 TEST*/
60