gpt4 book ai didi

cuda - nvcc:错误:标识符未定义,但已定义

转载 作者:行者123 更新时间:2023-12-02 10:44:41 30 4
gpt4 key购买 nike

我有一个 CUDA C 代码,当我尝试编译它时,nvcc 提示未定义的标识符错误,但它确实退出了变量!

extern "C"
void vRand3f_cuda (vec3f *d_v, int n)
{

curandState *d_states;
CUDA_CALL (cudaMalloc ((void **)&d_states, n * sizeof (curandState)));

dim3 gDim (1);
dim3 bDim (n);

set_seed<<<gDim, bDim>>> (d_states, time (NULL), n);
vRand3f_cuda_generate<<<gDim, bDim>>> (d_v, d_states, n);

CUDA_CALL (cudaFree (d_states));

}

__global__ void set_seed (curandState *states, unsigned long seed, int n)
{
int idx = threadIdx.x + blockIdx.x * gridDim.x;
if (idx >= n)
return ;

curand_init (seed, idx, 0, &states[idx]);

}

__global__ void vRand3f_cuda_generate (vec3f *v, curandState *states, int n)
{
int idx = threadIdx.x + blockIdx.x * gridDim.x;
if (idx >= n)

curandState localS = states[idx];
double s, x, y;
s = 2.;

while (s > 1.)
{
x = 2. - curand_uniform_double (&localS) - 1.;
y = 2. - curand_uniform_double (&localS) - 1.;
s = x * x + y * y;
}

v[idx].z = 1. - 2. * s;
s = 2. * sqrt (1. - s);
v[idx].x = s * x;
v[idx].y = s * y;

states[idx] = localS;
}

我使用以下行进行编译:
nvcc -m64 -g -G `pkg-config --cflags glib-2.0`  -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -I/Developer/NVIDIA/CUDA-5.0/include -I. -o vec3-cuda.o -c vec3-cuda.cu

我得到以下信息:

vec3-cuda.cu(58): warning: variable "localS" was declared but never referenced

vec3-cuda.cu(64): error: identifier "localS" is undefined

vec3-cuda.cu(74): error: identifier "localS" is undefined



知道这里会发生什么吗?我在 OSX 上使用 CUDA 5。

谢谢你。

最佳答案

这是错误的:

if (idx >= n)

curandState localS = states[idx];

你的意思可能是这样的:
if (idx >= n) return;

curandState localS = states[idx];

如您所写,在 if 子句中定义的变量的范围是该 if 子句的本地变量。由于您从未在 if 子句中引用它,因此您会收到第一个警告。在其他地方,当您尝试在 if 子句范围之外引用它时会出错。

关于cuda - nvcc:错误:标识符未定义,但已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916423/

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