Łą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?