Вам нужно будет перенести массив структур в графический процессор.например, чтобы получить доступ к массиву с плавающей точкой внутри ядра, вам нужно будет сделать следующее </p>
<pre>__global__ static void myKernel(float *val)
{
val[0] = 0.4f;
}
int main()
{
...
cudaMemcpy(d_Val, h_Val, n * sizeof(float), cudaMemcpyHostToDevice);
...
}
Это, конечно, базовые знания.Вы можете заменить float любым типом данных и получить такое же поведение.Структуры - это не что иное, как определяемые пользователем типы данных.
Это отличается от отправки в единственном числе (и, следовательно, в единой структуре), поскольку все входы в ядро помещаются в некоторую часть системы памяти графического процессора при запуске.время (в зависимости от карты), откуда GPU может получить доступ к этим значениям.Таким образом, если входные данные являются структурой, вся структура находится в графическом процессоре, когда ядро пытается получить к нему доступ.Но если вы отправляете указатель на структуры, которые были сгенерированы на хосте, GPU имеет значение указателя, но не фактические данные.