Возвращение указателя из функции устройства в порядке и работает просто отлично.
Проблема в вашем коде заключается в том, что вы не присваиваете значение указателю result
, которое затем разыменовываете, а затем возвращаете из функции позже. Вам нужно использовать float *result = malloc(mGl*aRows * sizeof(float));
для выделения памяти (и не забудьте free()
позже!).
Однако лучше было бы передать уже выделенный указатель в функцию вашего устройства. Это устанавливает четкое владение распределением (т. Е. Проясняет в вашем коде, где следует вызывать free()
), и может избежать ненужного выделения в некоторых случаях, например, например. выделение может быть извлечено из цикла.
Эта проблема не имеет ничего общего с CUDA, она также применима к стандарту C.