如何保持指向从.NET调用的C dll中生成的CUDA纹理对象的指针?

问题描述

我有一个使用CUDA对CUDA纹理对象执行操作的C dll。我反复使用相同的纹理数据从C#托管代码调用C dll。

将纹理对象的数据传输到GPU所需的时间明显长于执行实际处理所需的时间。

为了加快处理速度,我正在寻找一种最佳方法,即在托管代码对Dll的调用之间保留指向该对象的指针,方法是在该对象上保留一个指针。

以某种方式在C dll中保留指针还是更好,还是将指向纹理对象的指针传递回托管代码,并在后续函数调用中将其传递给C DLL更好?

任何关于如何使用这两种方法的想法都会受到赞赏。

我不是C / C ++专家,所以我可能缺少真正明显的东西...

解决方法

我找到了一个似乎可行的解决方案(感谢罗伯特在上面的评论)。

由于dll本身存在于托管代码的函数调用之间的内存中(我本来不知道),因此我只在C dll中声明了两个静态变量:-

static cudaTextureObject_t TexureVariable;
static cudaArray* ArrayPointer;

我可以在一个初始函数调用中像往常一样将数据分配给静态纹理。 然后,我可以使用该纹理数据运行多个操作,然后 最后通过一个函数调用销毁/释放两个静态对象。