【发布时间】:2014-04-01 15:33:14
【问题描述】:
我想使用 CUDA 生成白噪声(正态分布)。下面是我的尝试。
enter code here
#define SCALE 1.0
#define SHIFT 0.0
#define BLOCKS 64
#define THREADS 64
__global__ void setup_kernel(curandState *state)
{
int id = threadIdx.x + blockIdx.x * blockDim.x;
curand_init(7+id, id, 0, &state[id]);
}
__global__ void generate_normal_kernel(curandState *state, int *result)
{
int id = threadIdx.x + blockIdx.x * blockDim.x;
float x;
curandState localState = state[id];
for(int n = 0; n < 100000; n++) {
x = (curand_normal(&localState) * SCALE)+SHIFT;
}
state[id] = localState;
result[id] = (int) x;
}
int main(int argc, char *argv[])
{
int i;
unsigned int total;
curandState *devStates;
int *devResults, *hostResults;
int device;
struct cudaDeviceProp properties;
CUDA_CALL(cudaGetDevice(&device));
CUDA_CALL(cudaGetDeviceProperties(&properties,device));
hostResults = (int *)calloc(THREADS * BLOCKS, sizeof(int));
CUDA_CALL(cudaMalloc((void **)&devResults, BLOCKS * THREADS *
sizeof(int)));
CUDA_CALL(cudaMemset(devResults, 0, THREADS * BLOCKS *
sizeof(int)));
CUDA_CALL(cudaMalloc((void **)&devStates, THREADS * BLOCKS *
sizeof(curandState)));
setup_kernel<<<BLOCKS, THREADS>>>(devStates);
generate_normal_kernel<<<BLOCKS, THREADS>>>(devStates, devResults);
CUDA_CALL(cudaMemcpy(hostResults, devResults, BLOCKS * THREADS *
sizeof(int), cudaMemcpyDeviceToHost));
I_TCS = ITCSAmp*hostResults;
/* Cleanup */
CUDA_CALL(cudaFree(devStates));
CUDA_CALL(cudaFree(devResults));
free(hostResults);
return EXIT_SUCCESS;
}
================================================ =================================
但我收到以下错误,
错误:标识符“CUDA_CALL”未定义
错误:表达式必须具有算术或枚举类型
错误:表达式必须具有算术或枚举类型
错误:表达式必须具有算术或枚举类型
警告:变量“total”已声明但从未被引用
错误:标识符“devStates”未定义
错误:标识符“CUDA_CALL”未定义
错误:标识符“devResults”未定义
错误:标识符“hostResults”未定义
它以为我已经定义了它们,但显然它不起作用。如果您有任何建议或知道如何更改代码,我将非常感谢您的帮助!
【问题讨论】:
-
请显示 CUDA_CALL 是在哪里定义的? CUDA_CALL 不是 CUDA 工具包提供的宏。
-
您显示的代码肯定缺少一些
#include编译器指令。如果您需要帮助,我建议您显示您尝试编译的 整个 代码(当然您不是在尝试编译“在此处输入代码”,对吗?),并显示您使用的完整命令编译,以及编译器的整个输出。那么我认为有人将能够轻松地帮助你。现在,最好的说法是您显示的代码缺少重要部分。 -
对不起,罗伯特。你是对的,我错过了#include 部分和代码的其他一些部分。原因是我没有代码的所有权,所以我不能把所有的东西都放在这里。下次我会考虑这一点并避免这种情况。再次抱歉。
标签: cuda