Связывание со сторонними библиотеками CUDA замедляет работу cudaMalloc
Не секрет, что на CUDA 4.x первый звонокcudaMalloc
может быть смехотворно медленным (о чем сообщалось несколько раз), по-видимому, ошибка в драйверах CUDA.
Недавно я заметил странное поведение: время работыcudaMalloc
напрямую зависит от того, сколько сторонних библиотек CUDA я связал со своей программой
(обратите внимание, что я НЕ пользуюсь этими библиотеками, просто свяжу с ними мою программу)
Я провел несколько тестов, используя следующую программу:
int main() {
cudaSetDevice(0);
unsigned int *ptr = 0;
cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));
cudaFree(ptr);
return 1;
}
Результаты приведены ниже:
Linked with: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand running time: 5.852449
Linked with: -lcudart -lnpp -lcufft -lcublas running time: 1.425120
Linked with: -lcudart -lnpp -lcufft running time: 0.905424
Linked with: -lcudart running time: 0.394558
Согласно "gdb", время действительно входит в мой cudaMalloc, поэтому оно не вызывается некоторыми процедура инициализации библиотеки ..
Интересно, есть ли у кого-нибудь правдоподобное объяснение этому?