Hello,
I have download cuda 5.0,and I config it as below:
CUDA_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0
CUDA_PATH_V5_0
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0
NVCUDASAMPLES_ROOT
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0
NVCUDASAMPLES5_0_ROOT
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0
NVTOOLSEXT_PATH
C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt
Path
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\libnvvp;
vs2008
c/c++
“$(CUDA_PATH)/include”;“$(NVCUDASAMPLES_ROOT)\common\inc”
link
“$(CUDA_PATH)/lib/$(PlatformName)”;“$(NVCUDASAMPLES_ROOT)\common\lib”
input
cuda.lib cudart.lib
but when I build my code piece,it shows:
error C2065: ‘threadIdx’ : undeclared identifier.
My code piece as bellow,if you know the true bug,pls tell me,tks:
#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#define THREAD_N 256
#define THRESHOLD 127
global static void binarizeKernel(unsigned char *in, unsigned char *out)
{
const unsigned long offset = (blockIdx.x * THREAD_N + threadIdx.x);
unsigned long p = ((unsigned long *)in)[offset];
unsigned char b = ((unsigned char *)(&p))[0];
unsigned char g = ((unsigned char *)(&p))[1];
unsigned char r = ((unsigned char *)(&p))[2];
unsigned char mi = __min(r, __min(g, b));
unsigned char ma = __max(r, __max(g, b));
out[offset] = (((unsigned short)ma + (unsigned short)mi) > THRESHOLD * 2) ? 255 : 0;
}
extern “C” float binarizeCall(unsigned char *in, unsigned char *out, int w, int h)
{
unsigned char *device_src = 0;
unsigned char *device_dest = 0;
cudaMalloc((void **)&device_src, w * h * 3);
cudaMalloc((void **)&device_dest, w * h);
//unsigned int timer = 0;
//cutCreateTimer(&timer);
cudaMemcpy(device_src, in, w * h * 3, cudaMemcpyHostToDevice);
//cutStartTimer(timer);
binarizeKernel<<<w * h / THREAD_N, THREAD_N>>>(device_src, device_dest);
cudaThreadSynchronize();
//cutStopTimer(timer);
cudaMemcpy(out, device_dest, w * h, cudaMemcpyDeviceToHost);
//float ms = cutGetTimerValue(timer);
//cutDeleteTimer(timer);
cudaFree(device_dest);
cudaFree(device_src);
//return ms;
}