CUDA MemcpyHostToDevice

CUDA MemcpyHostToDevice,cuda,memcpy,nvcc,Cuda,Memcpy,Nvcc,我有一个设备变量d_db主机上的变量db。在db变量上加载相同的值后,我想在设备上复制这个变量。编译时没有错误,但是当我执行代码时,有一些关于缓存的问题,有时电脑会重新启动。我做错了什么?使用\uuuuu设备\uuuuuuu变量您需要使用memcpytocomsymbol和MemcpyFromSymbol而不是cudaMemcpy。 所以在我的情况下,我必须使用 typedef struct { int M; int N; int

我有一个设备变量d_db主机上的变量db。在db变量上加载相同的值后,我想在设备上复制这个变量。编译时没有错误,但是当我执行代码时,有一些关于缓存的问题,有时电脑会重新启动。我做错了什么?

使用
\uuuuu设备\uuuuuuu
变量您需要使用
memcpytocomsymbol
MemcpyFromSymbol
而不是
cudaMemcpy
。 所以在我的情况下,我必须使用

typedef struct {    
        int M;  
        int N;  
        int records[NMAX][SZM];     
        int times[NMAX];    
        bool prime[NMAX]; 
} DATASET;

typedef int ITEMSET[SZM];

__device__ DATASET d_db;

DATASET db;

int main(void) {

    loadDB();       
    cudaMemcpy(&d_db, &db, sizeof(DATASET), cudaMemcpyHostToDevice);
    ...

您还可以声明
数据集*d_dbcudamaloc(&d_db,SZM*sizeof(DATASET))分配内存(当你完成它时,别忘了
cudaFree(d_db)
cudaMemcpyToSymbol(d_db,&db,sizeof(DATASET)));