Hola, estamos midiendo el tiempo de ejecución del ejercicio 1 y nos esta dando los siguientes resultados:
Time (%) Total Time (ns) Instances Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Style Range
-------- --------------- --------- --------- -------- -------- -------- ----------- ------- ---------------
100.0 1,593,963 10 159,396.3 40,606.5 37,422 703,754 248,914.1 PushPop :Scan exclusivo
Nos preocupa la desviacion estándar tan alta y la diferencia con los tiempos de ejecucion de cada uno de los kernels:
Time (%) Total Time (ns) Instances Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Name
-------- --------------- --------- -------- -------- -------- -------- ----------- ------------------------------------------
44.3 35,137 10 3,513.7 3,072.0 3,072 7,360 1,352.0 block_scan(const int *, int *, int *, int)
32.1 25,473 10 2,547.3 2,496.0 2,464 2,976 155.4 scan_sums(const int *, int *)
23.6 18,720 10 1,872.0 1,536.0 1,440 3,680 732.4 add_offsets(int *, const int *, int)
Cuando ejecutamos nuestro programa en la maquina asignada a nuestro grupo nos da muchos mejores resultados en la medida conjunta pero no cuando medimos cada kernel por separado:
Time (%) Total Time (ns) Instances Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Style Range
-------- --------------- --------- -------- -------- -------- -------- ----------- ------- ---------------
100.0 490,696 10 49,069.6 25,081.5 24,778 258,070 73,447.9 PushPop :Scan exclusivo
Time (%) Total Time (ns) Instances Avg (ns) Med (ns) Min (ns) Max (ns) StdDev (ns) Name
-------- --------------- --------- -------- -------- -------- -------- ----------- ------------------------------------------
42.8 37,888 10 3,788.8 3,712.0 3,680 4,416 225.4 block_scan(const int *, int *, int *, int)
36.6 32,449 10 3,244.9 3,168.0 3,167 3,745 182.7 scan_sums(const int *, int *)
20.6 18,210 10 1,821.0 1,792.5 1,760 2,048 83.1 add_offsets(int *, const int *, int)
Para medir el tiempo estamos utilizando nvtxRangePush
:
nvtxRangePush("Scan exclusivo");
// llamada kernel1
CUDA_CHK(cudaDeviceSynchronize());
// llamada kernel2
CUDA_CHK(cudaDeviceSynchronize());
// llamada kernel3
CUDA_CHK(cudaDeviceSynchronize());
nvtxRangePop();
¿Puede deberse esto a que hay mas carga sobre nuestras GPUs?
Saludos,
Camilo