Actual source code: ex2cu.cu
1: static char help[] = "Benchmarking cudaPointerGetAttributes() time\n";
2: /*
3: Running example on Summit at OLCF:
4: # run with total 1 resource set (RS) (-n1), 1 RS per node (-r1), 1 MPI rank (-a1), 7 cores (-c7) and 1 GPU (-g1) per RS
5: $ jsrun -n1 -a1 -c7 -g1 -r1 ./ex2cu
6: Average cudaPointerGetAttributes() time = 0.29 microseconds
7: */
8: #include <petscsys.h>
9: #include <petscdevice.h>
11: int main(int argc,char **argv)
12: {
13: PetscInt i,n=2000;
14: cudaError_t cerr;
15: PetscScalar **ptrs;
16: PetscLogDouble tstart,tend,time;
17: struct cudaPointerAttributes attr;
19: PetscInitialize(&argc,&argv,(char*)0,help);
20: PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);
22: PetscMalloc1(n,&ptrs);
23: for (i=0; i<n; i++) {
24: if (i%2) PetscMalloc1(i+16,&ptrs[i]);
25: else cudaMalloc((void**)&ptrs[i],(i+16)*sizeof(PetscScalar));
26: }
28: PetscTime(&tstart);
29: for (i=0; i<n; i++) {
30: cerr = cudaPointerGetAttributes(&attr,ptrs[i]);
31: if (cerr) cudaGetLastError();
32: }
33: PetscTime(&tend);
34: time = (tend-tstart)*1e6/n;
36: PetscPrintf(PETSC_COMM_WORLD,"Average cudaPointerGetAttributes() time = %.2f microseconds\n",time);
38: for (i=0; i<n; i++) {
39: if (i%2) PetscFree(ptrs[i]);
40: else cudaFree(ptrs[i]);
41: }
42: PetscFree(ptrs);
44: PetscFinalize();
45: return 0;
46: }
48: /*TEST
49: build:
50: requires: cuda
52: test:
53: requires: cuda
54: args: -n 2
55: output_file: output/empty.out
56: filter: grep "DOES_NOT_EXIST"
58: TEST*/