La vinculación con bibliotecas CUDA de terceros ralentiza cudaMalloc

No es un secreto que en CUDA 4.x la primera llamada acudaMalloc puede ser ridículamente lento (lo cual se reportó varias veces), aparentemente un error en los controladores CUDA.

Recientemente, noté un comportamiento extraño: el tiempo de ejecución decudaMalloc depende directamente de cuántas bibliotecas CUDA de terceros vinculé a mi programa (tenga en cuenta que NO utilizo estas bibliotecas, solo vinculo mi programa con ellas)

Corrí algunas pruebas usando el siguiente programa:

int main() {
  cudaSetDevice(0);
  unsigned int *ptr = 0;
  cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));   
  cudaFree(ptr);
return 1;
}

Los resultados son los siguientes:

Relacionado con: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand tiempo de ejecución: 5.852449

Vinculado con: -lcudart -lnpp -lcufft -lcublas tiempo de ejecución: 1.425120

Vinculado con: -lcudart -lnpp -lcufft tiempo de ejecución: 0.905424

Vinculado con: -lcudart tiempo de ejecución: 0.394558

De acuerdo con 'gdb', el tiempo de hecho se usa en mi cudaMalloc, por lo que no es causado por alguna rutina de inicialización de la biblioteca ...

Me pregunto si alguien tiene una explicación plausible para esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta