Чтобы объяснить необходимость чуть более подробно:
До звонка на cudaMalloc
, M
баллов ... везде, не определено. После вызова cudaMalloc
вы хотите, чтобы действительный массив присутствовал в той области памяти, на которую он указывает. Можно наивно сказать «затем просто выделить память в этом месте», но это, конечно, вообще невозможно: неопределенный адрес обычно даже не будет в допустимой памяти. cudaMalloc
необходимо иметь возможность выбрать местоположение. Но если указатель вызывается по значению, нет никакого способа сообщить вызывающей стороне, где.
В C ++ можно сделать подпись
template<typename PointerType>
cudaStatus_t cudaMalloc(PointerType& ptr, size_t);
, где передача ptr
по ссылке позволяет функции изменять местоположение, но поскольку cudaMalloc
является частью CUDA C API, это не вариант. Единственный способ передать что-то как модифицируемое в C - это передать указатель на него. И сам объект является указателем. То, что вам нужно передать, это указатель на указатель.