ManagedCuda:ErrorIllegalAddress:执行内核时,设备在无效的内存地址上遇到加载或存储指令

时间:2015-01-20 22:22:29

标签: cuda

我正在使用Managed Cuda 6.5。显卡是GTX 770(计算能力3.0)。 我在平台目标X64上运行我的程序时遇到问题,但我对X86没有任何问题。 我正在使用例如以下代码

在设备上成功分配内存

CudaDeviceVariable<double> d_input = new CudaDeviceVariable<double>(input.Length)CudaDeviceVariable<double> d_output = new CudaDeviceVariable<double>(output.Length)

但是当涉及到运行内核时,如

inToLSTM.BlockDimensions = threadsPerBlock;
inToLSTM.GridDimensions = numberofBlock;
inToLSTM.Run(d_input.DevicePointer,d_output.DevicePointer);

它会给我以下错误:

&#34; ErrorIllegalAddress:执行内核时,设备在无效的内存地址上遇到加载或存储指令。 不能使用上下文,因此必须销毁它(并且应该创建一个新的)。&#34;

内核看起来像这样:

__global__ void InToLSTM(double *input,double* output)
{
     int idx=threadIdx.x+blockDim.x*blockIdx.x;
    __shared__ double sharedvar[1024];
    sharedvar[threadIdx.x]=input[threadIdx.x];


    __syncthreads();
    if( 0 == threadIdx.x ) 
    {
        double sum = 0;
        for( int i = 0; i < blockDim.x; i++ )
        {
            sum += sharedvar[i];
        }
        output[blockIdx.x]=sum;
    }

0 个答案:

没有答案