es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener el tiempo de inicio del kernel en CUDA?

Estoy intentando obtener el tiempo de inicio del kernel con el siguiente código, pero la salida de este código no es correcta.

Quiero el tiempo de inicio de la función del kernel en relación al tiempo de inicio de este programa. Es decir, si consideramos el tiempo de inicio de este programa como tiempo cero, ¿cuál será el tiempo de inicio de la función del kernel?

¿Cuál es mi error?

//encabezados
#include

//función del kernel definida aquí

int main(){
struct timeval kernelStartTime;

//copias de memoria y …

gettimeofday(&kernelStartTime, 0);
MatrixMulCUDA<32><<<matrixmulgrid, matrixmulthreads=””>>>(C, A, B, dimsA.x, dimsB.x);
cudaDeviceSynchronize();

float startTime = (1000000.0 * kernelStartTime.tv_sec + kernelStartTime.tv_usec)/1000.0;

//algunos códigos

printf(“tiempo de inicio del kernel = %f”, startTime);
return 0;
}

Salida:

tiempo de inicio del kernel = 1.63786e+12

Gracias.</matrixmulgrid,>

Tags:  

Answer

  1. Avatar for davy.ai

    Parece que tu error está en el cálculo del tiempo de inicio de la función del kernel. Estás dividiendo la salida de la ecuación (1000000.0 * kernelStartTime.tv_sec + kernelStartTime.tv_usec) por 1000.0, lo cual no es necesario ya que la salida de la ecuación ya está en microsegundos.

    Para obtener el tiempo de inicio de la función del kernel en relación al tiempo de inicio del programa, debes restar el tiempo de inicio del programa (obtenido usando gettimeofday() antes de iniciar el kernel) del tiempo de inicio de la función del kernel (obtenido usando gettimeofday() inmediatamente después de iniciar el kernel). Esto te dará el tiempo transcurrido entre ambos eventos, que es el tiempo de inicio de la función del kernel.

    Aquí tienes un fragmento de código actualizado que debería darte el tiempo de inicio correcto de la función del kernel:

    #include <sys time.h="">
    
    // función del kernel definida aquí
    
    int main(){
        struct timeval programStartTime, kernelStartTime;
    
        gettimeofday(&programStartTime, 0);
    
        // memcpys y ....
    
        gettimeofday(&kernelStartTime, 0);
        MatrixMulCUDA<32><<<matrixmulgrid, matrixmulthreads="">>>(C, A, B, dimsA.x, dimsB.x);
        cudaDeviceSynchronize();
    
        float startTime = (kernelStartTime.tv_sec - programStartTime.tv_sec) * 1000000.0 + (kernelStartTime.tv_usec - programStartTime.tv_usec);
    
        // algunos códigos
    
        printf("tiempo de inicio del kernel = %f", startTime);
        return 0;
    }
    

    Esto debería darte el tiempo de inicio de la función del kernel en microsegundos en relación al tiempo de inicio del programa.</matrixmulgrid,>

Comments are closed.