我正在使用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;
}