У меня есть код, который имеет большое количество malloc
и API-интерфейсов API-интерфейсов (я программирую на GPU, поэтому cudaMalloc
).Последовательные распределители/деллалокаторы
В принципе, мой конец моего кода - это большой smorgasbord вызовов выделения, в то время как мой заключительный раздел - вызовы освобождения.
Поскольку я инкапсулировал свои глобальные данные в структуры, deallocations довольно длинные, но по крайней мере я могу разбить их на отдельную функцию. С другой стороны, я хотел бы получить более короткое решение. Кроме того, автоматический дезактиватор уменьшит риск утечек памяти, если я забуду явно написать освобождение в глобальной функции распределения.
Мне было интересно, можно ли написать какую-то шаблонную оболочку класса, которая может позволить мне «регистрировать» переменные во время процесса malloc
/cudaMalloc
, а затем в конце моделирования выполняются массовые петлевые освобождение (дерегистрация). Чтобы быть ясным, я не хочу набирать отдельные освобождения от деления (free
/cudaFree
), потому что снова это длинное и нежелательное, и предположение состояло бы в том, что все, что я регистрирую, не будет освобождено до тех пор, пока симуляция устройства не будет полной и основной заканчивается.
Выгода здесь заключается в том, что если я зарегистрирую новую переменную длительности моделирования, она автоматически освободится, так что нет никакой опасности, что я забыл освободить ее и создать утечку памяти.
Возможно ли такое обертывание?
Вы предложили бы это сделать?
Если да, то как?
Заранее благодарен!
Старая проблема, но CUDA придает ей новый колорит. Интересно. –
Вы согласны с ответами на C++ или были ли ваши теги «C» преднамеренными? – harrism
Это должен быть C++. Первоначально проект был на C, но я добавил некоторые вещи STL на конечной стороне, так как он предлагает более чистый более простой контроль печати в моем сознании. Код устройства и распределение/освобождение являются традиционными C, хотя нет классов @ present. –