2010-01-28 2 views
4

Я выделяю некоторые массивы флоатов (довольно большие, т.е. 9 000 000 элементов) на графическом процессоре, используя cudaMalloc((void**)&(storage->data), size * sizeof(float)). В конце моей программы я освобождаю эту память, используя cudaFree(storage->data);.Освобождение памяти CUDA болезненно медленное

Проблема в том, что первое освобождение происходит очень медленно, около 10 секунд, тогда как другие почти мгновенно.

Мой вопрос в следующем: что может вызвать эту разницу? Является ли память освобождения на графическом процессоре, как правило, медленной?

ответ

3

Как указано на форумах NVIDIA, это почти наверняка проблема с тем, как вы выбираете вещи, а не cudaFree.

+0

Да, в этом была проблема. Я спросил на форумах SO и nVidia, чтобы убедиться, что кто-то компетентный ответит, и мне захотелось, чтобы я захотел на обоих;)! Удивительные ребята! Благодаря ! – Wookai

1

не должно быть так медленно, на Linux с cuda 2.2 требуется доля секунды. Вы пытались запустить профилировщики хоста и устройства, чтобы увидеть, почему именно медленно? сколько у вас выделенного распределения ?, у кого есть какой-то штраф, но не такой большой.