Структура с динамически выделенным массивом, который работает на хосте и устройстве с помощью Cuda.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Структура с динамически выделенным массивом, который работает на хосте и устройстве с помощью Cuda.

Сообщение Anonymous »

Я хотел бы создать структуру, которая может работать на хосте и устройстве, хранящем динамически выделенный массив (размер неизвестен во время компиляции). Эта структура будет отправлена в ядро, чтобы каждый поток имел указатель на нее.
Как я могу заставить это работать?
Конструктор и деструктор должны быть разными для хоста и устройства, используя new[] и cudaMalloc() соответственно.
Как можно аккуратно отправлять эту структуру в обоих направлениях без дублирования кода каждый раз, когда я хочу отправить версию хоста на устройство, отправив внутренний массив, а затем отправить дубликат структуры с другим указателем на массив устройств вместо массива хостов.
Я пробовал что-то подобное, но безрезультатно:

Код: Выделить всё

struct MyStruct {
int array_size;
int* array;

MyStruct(int size) {
array_size = size;
array = new int[size];
}

~MyStruct() {
delete[] array;
array = nullptr;
}

__host__ __device__ int getValue(index) {
if (index >= 0 && index < array_size) {
return array[index];
}
// Throw an error;
}
}
Должна ли эта структура быть файлом Cuda? Должен ли хост или устройство стоять перед какими-либо функциями?
Приносим извинения за множество вопросов.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -with-cuda
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»