Не секрет, что в 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;
}
результаты следующие:
Связано с:-lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand время работы :5,852449
Связано с:-lcudart -lnpp -lcufft -lcublas время работы :1.425120
Связано с:-lcudart -lnpp -время работы lcufft :0,905424
Связано с:-время работы lcudart :0,394558
Согласно 'gdb', время действительно входит в мой cudaMalloc, так что это не вызвано каким-то Процедура инициализации библиотеки..
Интересно, есть ли у кого-нибудь правдоподобное объяснение этому?