Есть ли способ узнать, какое дополнительное пространство резервирует cudaMalloc?

Когда я использую cudaMalloc (100), он резервирует более 100 B (по мнению некоторых пользователей, это связано с проблемами гранулярности и служебной информацией.

Можно ли определить, насколько большим будет это пространство, исходя из байтов, которые мне нужно зарезервировать?

Огромное спасибо.

РЕДАКТИРОВАТЬ: Я объясню, почему мне нужно знать.

Я хочу применить алгоритм свертки к огромным изображениям на GPU. Для этого, поскольку на GPU недостаточно памяти для его хранения, мне нужно разделить изображение на группы строк, чтобы вызвать ядро ​​несколько раз.

На самом деле мне нужно отправить 2 изображения: матрицу OnlyRead и матрицу результатов.

Я хочу априори подсчитать максимальное количество строк, которое я могу отправить на устройство в соответствии с объемом свободной памяти.

Первый cudaMalloc выполняется успешно, но проблема возникает при попытке выполнить второй CudaMalloc, поскольку первый резерв занял больше байтов, чем ожидалось.

То, что я сейчас делаю, считает, что объем свободной памяти на 10% меньше, чем он есть... но это просто магическое число, появившееся из ниоткуда..

1 ответ

Решение

"Есть ли способ узнать, какое дополнительное пространство резервирует cudaMalloc?"

Не без нарушения гарантий платформы CUDA, нет. cudaMalloc() возвращает указатель на запрошенный объем памяти. Вы не можете делать какие-либо предположения относительно объема памяти, который оказывается действительным после окончания запрошенного объема - распределитель CUDA уже использует субраспределители, и в отличие от распределителей памяти на основе ЦП, структур данных для отслеживания свободных списков и т. Д. не чередуются с выделенной памятью. Так, например, было бы неразумно предполагать, что гарантии времени выполнения CUDA о выравнивании возвращаемых указателей означают что-либо кроме того, что возвращенные указатели будут иметь определенное выравнивание.

Если вы изучите поведение среды выполнения CUDA, это проливает свет на поведение этой конкретной среды выполнения CUDA, но поведение может измениться в будущих выпусках и нарушить ваш код.

Другие вопросы по тегам