gpt4 book ai didi

cuda - cudaMemcpyToSymbol 的问题

转载 作者:行者123 更新时间:2023-12-01 00:59:37 40 4
gpt4 key购买 nike

我正在尝试复制到常量内存。但是我不能因为我对 cudaMemcpyToSymbol 函数的用法有误解。我正在尝试关注 this

代码如下

__device__ __constant__ double var1;
__device__ __constant__ int var2;

int main(){

//... some code here...

double var1ToCopy = 10.1;
int var2ToCopy = 1;

void * p1 = &var1ToCopy;
void * p2 = &var2ToCopy;

cudaStatus = cudaMemcpyToSymbol((void*)&var1,p1,sizeof(double),0,cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess){
return -1;
}

cudaStatus = cudaMemcpyToSymbol((void*)&var2,p2,sizeof(int),0,cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess){
return -1;
}


//... and some code here...
}

我知道这是一个非常愚蠢的问题,但我花了几个小时在谷歌上搜索答案,但没有成功。

最佳答案

您不需要符号名称上的符号。符号不同于指针或变量。

取而代之的是:

cudaStatus = cudaMemcpyToSymbol((void*)&var1,p1,sizeof(double),0,cudaMemcpyHostToDevice);

这样做:

cudaStatus = cudaMemcpyToSymbol(var1,&var1ToCopy,sizeof(double));

我还根据一些参数具有默认值这一事实简化了上述调用,如 the documentation 中所示.

这是一个围绕您的代码修改版本的完整示例(需要 cc2.0+ GPU):

$ cat t626.cu
#include <stdio.h>

__device__ __constant__ double var1;
__device__ __constant__ int var2;

__global__ void kernel(){

printf("%f\n", var1);
printf("%d\n", var2);
}


int main(){


double var1ToCopy = 10.1;
int var2ToCopy = 1;
cudaError_t cudaStatus = cudaMemcpyToSymbol(var1,&var1ToCopy,sizeof(double));
if (cudaStatus != cudaSuccess) {printf("fail1\n"); return 1;}

cudaStatus = cudaMemcpyToSymbol(var2,&var2ToCopy,sizeof(int));
if (cudaStatus != cudaSuccess) {printf("fail2\n"); return 1;}
kernel<<<1,1>>>();
cudaDeviceSynchronize();
return 0;

}
$ nvcc -arch=sm_20 -o t626 t626.cu
$ ./t626
10.100000
1
$

关于cuda - cudaMemcpyToSymbol 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671509/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com