Die Verknüpfung mit CUDA-Bibliotheken von Drittanbietern verlangsamt cudaMalloc

Es ist kein Geheimnis, dass auf CUDA 4.x der erste Anruf erfolgtcudaMalloc kann lächerlich langsam sein (was mehrmals gemeldet wurde), anscheinend ein Fehler in CUDA-Treibern.

Vor kurzem habe ich merkwürdiges Verhalten bemerkt: die Laufzeit voncudaMalloc hängt direkt davon ab, wie viele CUDA-Bibliotheken von Drittanbietern ich mit meinem Programm verknüpft habe (beachte, dass ich diese Bibliotheken NICHT verwende, verlinke einfach mein Programm mit ihnen)

Ich habe einige Tests mit dem folgenden Programm durchgeführt:

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

Die Ergebnisse sind wie folgt:

Verknüpft mit: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurund Laufzeit: 5.852449

Verknüpft mit: -lcudart -lnpp -lcufft -lcublas Laufzeit: 1.425120

Verknüpft mit: -lcudart -lnpp -lcufft Laufzeit: 0.905424

Verknüpft mit: -lcudart Laufzeit: 0.394558

Laut 'gdb' geht die Zeit tatsächlich in meinen cudaMalloc ein, sodass sie nicht durch eine Initialisierungsroutine der Bibliothek verursacht wird.

Ich frage mich, ob jemand eine plausible Erklärung dafür hat.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage