"La guía definitiva para la programación en C de CUDA" 03 - Resumen de las funciones pequeñas de CUDA

1. Tiempo

1.1 linux

#include <sys/time.h>

double cpuSecond() {
	struct timeval tp;
	gettimeofday(&tp, NULL);
	return ((double)tp.tv_sec + (double)tp.tv_usec*1e-6);
}

// 调用
double start = cpuSecond();
kernel_name << <grid, block >> > (argument list);
cudaDeviceSynchronize();  // 显示的使其同步。
double cost = cpuSecond() - start;

1.2 debajo de las ventanas

#include <time.h>

// 调用
time_t begin, end;
time(&begin);
kernel_name << <grid, block >> > (argument list);
time(&end);
time_t elapsed = end - begin;
printf("Time measured: %ld seconds.\n", elapsed);

2. utilidad nvprof

nvprof es una herramienta de análisis de línea de comandos con muchas funciones que pueden ayudar a obtener información de línea de tiempo de las actividades de CPU y GPU de la aplicación, incluida la ejecución del kernel, la transferencia de memoria y las llamadas a la API de CUDA. Los detalles se pueden ver a través del siguiente comando.

nvprof --help

 (1) Si el comando anterior informa un error: el código no puede continuar ejecutándose porque no se puede encontrar cupti64_2022.2.1.dll. . .

Motivo: la herramienta nvprof es un complemento y su dll está en el directorio: 

C:\Archivos de programa\NVIDIA GPU Computing Toolkit\CUDA\v11.7\extras\CUPTI\lib64

 El entorno del sistema no tiene este directorio, por lo que la biblioteca dll no se puede indexar.

Solución: Dado que C:\Archivos de programa\NVIDIA GPU Computing Toolkit\CUDA\v11.7 \bin está en el entorno del sistema, puede copiar cupti64_2022.2.1.dll en el directorio bin.

(2) Pregunta 2, si ejecuta el archivo compilado e informa un error: No se puede encontrar el compilador 'cl.exe' en PATH

nvcc kernel.cu -o kernel  // 编译

 Luego agregue C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin a la ruta del sistema.

Ejemplo de uso:

nvprof ./kernel

(1) Qué operaciones se pueden ver, cuántas veces se han operado, cuál es el tiempo promedio, máximo y mínimo empleado, y cuál es la proporción del tiempo empleado;

(2) cudaMalloc toma la mayor parte del tiempo y se ejecutó 3 veces, el tiempo mínimo es 2us, el tiempo máximo es 259ms y el tiempo promedio es 86ms;

continuará. . .

Supongo que te gusta

Origin blog.csdn.net/jizhidexiaoming/article/details/132027586
Recomendado
Clasificación