Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将指向非托管内存(IntPtr)的指针传递给Alea CUDA内核?_C#_Aleagpu - Fatal编程技术网

C# 如何将指向非托管内存(IntPtr)的指针传递给Alea CUDA内核?

C# 如何将指向非托管内存(IntPtr)的指针传递给Alea CUDA内核?,c#,aleagpu,C#,Aleagpu,我有一个IntPtr hData,它指向存储在非托管内存中的数据数组的开头。当我尝试使用下面描述的CUDA内核传递它时,我得到一个System.Exception:i64不是结构类型。我应该如何使用Alea CUDA内核在非托管内存中传递指向数组的指针 unsafe private static void CopyDataToDeviceMemory( IntPtr hData, deviceptr<float> dData, int dataLength)

我有一个
IntPtr hData
,它指向存储在非托管内存中的数据数组的开头。当我尝试使用下面描述的CUDA内核传递它时,我得到一个
System.Exception:i64不是结构类型
。我应该如何使用Alea CUDA内核在非托管内存中传递指向数组的指针

unsafe private static void CopyDataToDeviceMemory(
    IntPtr hData,
    deviceptr<float> dData,
    int dataLength)
{
    int start = blockIdx.x * blockDim.x + threadIdx.x;
    int stride = gridDim.x * blockDim.x;

    for (int i = start; i < dataLength; i += stride)
    {
        dData[i] = DeviceFunction.Convert<ushort, float>(
            *((ushort*)(hData + i * 2)));
    }
}
不安全的私有静态void CopyDataToDeviceMemory(
IntPtr hData,
deviceptr dData,
int数据长度)
{
int start=blockIdx.x*blockDim.x+threadIdx.x;
int stride=gridDim.x*blockDim.x;
对于(int i=开始;i<数据长度;i+=步幅)
{
dData[i]=DeviceFunction.Convert(
*((ushort*)(hData+i*2));
}
}

我不确定我是否完全理解了这个问题,但可能您正试图将IntPtr用作一个值,而不是指针。尝试将该值封送回来,并使用如下方式:var hDataValue=Marshal.ReadInt64(hData);然后使用hDataValue。我确实看到您正在使用ushort*并将其转换为*作为指针,但hData+1*2不是在指针上工作,而不是在值上工作吗?如果我错了,我道歉;“这里很晚了,”迈克尔·布克提伊说,“我正在做指针算术。”。因此
hData
指向数组的开头,然后
hData+1
应该指向下一个字节,依此类推。我试图将
hData
指向的数组基本复制到
dData
中。明白了,我现在明白了/hData位于哪里?我猜是在主机上,对吧?如果是这样,就不能在内核中直接使用它。您必须首先使用诸如
Alea.CUDAInterop.cuMemcpyHtoD
之类的函数将hData传输到设备中。