2012-08-29 2 views
2

JCuda를 사용하기 시작했습니다. 프로그램을 컴파일 할 때 "jcuda.cuda exception cuda_error_launch_failed"오류가 발생합니다. 설치 안내서의 단계를 수행했지만 작동하지 않습니다. 온라인에서 사용할 수있는 리소스는 거의 없습니다. 내가 설치 한 NVIDIA 460 GTX GPU와 CUDA 드라이버 및 툴킷을JCuda 컴파일러 오류

extern "C" 
__global__ void reduce(float *g_idata, float *g_odata, unsigned int n) 
{ 
    extern __shared__ float sdata[]; 
    unsigned int tid = threadIdx.x; 
    unsigned int i = blockIdx.x*blockDim.x*2 + threadIdx.x; 
    unsigned int gridSize = blockDim.x*2*gridDim.x; 

    float mySum = 0; 


    while (i < n) 
    { 
     mySum += g_idata[i]; 
     if (i + blockDim.x < n) 
      mySum += g_idata[i+blockDim.x]; 
     i += gridSize; 
    } 

    sdata[tid] = mySum; 
    __syncthreads(); 

    if (blockDim.x >= 512) { if (tid < 256) { sdata[tid] = mySum = mySum + sdata[tid + 256]; } __syncthreads(); } 
    if (blockDim.x >= 256) { if (tid < 128) { sdata[tid] = mySum = mySum + sdata[tid + 128]; } __syncthreads(); } 
    if (blockDim.x >= 128) { if (tid < 64) { sdata[tid] = mySum = mySum + sdata[tid + 64]; } __syncthreads(); } 

    if (tid < 32) 
    { 
     volatile float* smem = sdata; 
     if (blockDim.x >= 64) { smem[tid] = mySum = mySum + smem[tid + 32]; } 
     if (blockDim.x >= 32) { smem[tid] = mySum = mySum + smem[tid + 16]; } 
     if (blockDim.x >= 16) { smem[tid] = mySum = mySum + smem[tid + 8]; } 
     if (blockDim.x >= 8) { smem[tid] = mySum = mySum + smem[tid + 4]; } 
     if (blockDim.x >= 4) { smem[tid] = mySum = mySum + smem[tid + 2]; } 
     if (blockDim.x >= 2) { smem[tid] = mySum = mySum + smem[tid + 1]; } 
    } 

    if (tid == 0) 
     g_odata[blockIdx.x] = sdata[0]; 
} 

: .so를, 도와주세요거야 여기 내 코드입니다.

답변

1

cudaFree(deviceId); 또는 cudaFree(deviceId);을 사용하여 메모리를 확보하고 다시 시도하십시오. 도움이 되었으면 좋겠다.

+0

고맙습니다. 이제 작동합니다. – user1633170