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.