Rendimiento de cudaMemcpyToSymbol

Tengo algunas funciones que cargan una variable en la memoria constante del dispositivo y lanzan una función del núcleo. Noté que la primera vez que una función carga una variable en memoria constante toma 0.6 segundos, pero las siguientes cargas en memoria constante son muy rápidas (0.0008 segundos). Este comportamiento se produce independientemente de qué función sea la primera en la principal. Debajo de un código de ejemplo:

        __constant__ double res1;

        __global__kernel1(...) {...}

        void function1() {
            double resHost = 255 / ((double) size);
            CUDA_CHECK_RETURN(cudaMemcpyToSymbol(res1, &resHost, sizeof(double)));


            //prepare and launch kernel
        }

        __constant__ double res2;

        __global__kernel2(...) {...}

        void function2() {
            double resHost = 255 / ((double) size);
            CUDA_CHECK_RETURN(cudaMemcpyToSymbol(res2, &resHost, sizeof(double)));


            //prepare and launch kernel
        }

        int main(){
            function1(); //takes 0.6 seconds for loading
            function2(); // takes 0.0008 seconds for loading
            function1(); //takes 0.0008 seconds for loading

            return 0;
        }

¿Por qué está pasando esto? ¿Puedo evitarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta