<分区>
CUDA 在此处找到了一些文档:https://docs.nvidia.com/cuda/thrust/index.html#vectors这允许在设备内存/代码中使用 vector 。我正在尝试创建一个结构类型的 vector 以用于一般处理。这是示例代码:
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <iostream>
struct Data
{
double first, second, total;
};
__global__
void add(thrust::device_vector<Data> *d_matrix)
{
&d_matrix[1].total = &d_matrix[1].first + &d_matrix[1].second;
}
int main()
{
thrust::host_vector<Data> matrix;
thrust::device_vector<Data> *d_matrix;
int size = sizeof(thrust::host_vector<Data>);
matrix[1].first = 2100;
matrix[1].second = 100;
cudaMalloc(&d_matrix, size);
cudaMemcpy(d_matrix, &matrix, size, cudaMemcpyHostToDevice);
add<<<1,1>>>(d_matrix);
cudaMemcpy(&matrix, d_matrix, size, cudaMemcpyDeviceToHost);
cudaFree(d_matrix);
std::cout << "The sum is: " << matrix[1].total;
return 0;
}
我收到以下错误:
gpuAnalysis.cu(13): error: class "thrust::device_vector>" has no member "total"
gpuAnalysis.cu(13): error: class "thrust::device_vector>" has no member "first"
gpuAnalysis.cu(13): error: class "thrust::device_vector>" has no member "second"
3 errors detected in the compilation of "/tmp/tmpxft_000013c9_00000000-8_gpuAnalysis.cpp1.ii".
根据 nvidia 网站上提供的文档,这些 vector 能够将所有数据类型存储为 std::vector。有没有办法修复此错误以使用每个 vector 元素访问结构的成员?