Łączenie z bibliotekami CUDA innych firm spowalnia cudaMalloc

Nie jest tajemnicą, że na CUDA 4.x pierwsze połączenie docudaMalloc może być śmiesznie powolny (o czym pisano kilka razy), pozornie błąd w sterownikach CUDA.

Ostatnio zauważyłem dziwne zachowanie: czas działaniacudaMalloc zależy bezpośrednio od tego, ile bibliotek CUDA firm trzecich, które powiązałem z moim programem (zauważ, że NIE używam tych bibliotek, po prostu połącz z nimi mój program)

Przeprowadziłem kilka testów przy użyciu następującego programu:

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

Wyniki są następujące:

Powiązane z: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand czas trwania: 5.852449

Powiązane z: -lcudart -lnpp -lcufft -lcublas czas trwania: 1.425120

Powiązane z: -lcudart -lnpp -lcufft czas działania: 0.905424

Powiązane z: -lcudart czas trwania: 0.394558

Według „gdb” czas rzeczywiście trafia do mojego cudaMalloc, więc nie jest spowodowany przez jakąś procedurę inicjalizacji biblioteki.

Ciekawe, czy ktoś ma na to wiarygodne wyjaśnienie?

questionAnswers(1)

yourAnswerToTheQuestion