Java JCuda编译器错误

Java JCuda编译器错误,java,jcuda,Java,Jcuda,我已经开始使用JCuda。当我编译程序时,会出现“JCuda.cuda exception cuda_error_launch_failed”错误。我已经按照安装指南中给出的步骤进行了操作,但不起作用。联机资源很少。因此,请帮助我。这是我的代码: extern "C" __global__ void reduce(float *g_idata, float *g_odata, unsigned int n) { extern __shared__ float sdata[]; u

我已经开始使用JCuda。当我编译程序时,会出现“JCuda.cuda exception cuda_error_launch_failed”错误。我已经按照安装指南中给出的步骤进行了操作,但不起作用。联机资源很少。因此,请帮助我。这是我的代码:

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];
}
extern“C”
__全局无效减少(浮点*g_idata,浮点*g_odata,无符号整数n)
{
外部共享浮点数据[];
unsigned int tid=threadIdx.x;
无符号整数i=blockIdx.x*blockDim.x*2+threadIdx.x;
无符号整数gridSize=blockDim.x*2*gridDim.x;
浮点数mySum=0;
而(i=512){if(tid<256){sdata[tid]=mySum=mySum+sdata[tid+256];}
if(blockDim.x>=256){if(tid<128){sdata[tid]=mySum=mySum+sdata[tid+128];}
if(blockDim.x>=128){if(tid<64){sdata[tid]=mySum=mySum+sdata[tid+64];}
如果(tid<32)
{
挥发性浮动*smem=sdata;
如果(blockDim.x>=64){smem[tid]=mySum=mySum+smem[tid+32];}
如果(blockDim.x>=32){smem[tid]=mySum=mySum+smem[tid+16];}
如果(blockDim.x>=16){smem[tid]=mySum=mySum+smem[tid+8];}
如果(blockDim.x>=8){smem[tid]=mySum=mySum+smem[tid+4];}
如果(blockDim.x>=4){smem[tid]=mySum=mySum+smem[tid+2];}
如果(blockDim.x>=2){smem[tid]=mySum=mySum+smem[tid+1];}
}
如果(tid==0)
g_odata[blockIdx.x]=sdata[0];
}
我安装了nvidia 460 gtx gpu和cuda驱动程序及工具包。

使用
cudaFree(deviceId)
cudaFree(设备ID)
以释放内存并重试。希望这对您有所帮助