问题描述
我有一个使用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;
我可以在一个初始函数调用中像往常一样将数据分配给静态纹理。 然后,我可以使用该纹理数据运行多个操作,然后 最后通过一个函数调用销毁/释放两个静态对象。