问题
我正在尝试创建一个与.net 良好集成的 CUDA 应用程序。设计目标是拥有几个可以从托管代码调用的 CUDA 函数。数据还应该能够在函数调用之间保持在设备上,以便可以将其传递给多个 CUDA 函数。
重要的是,每个单独的数据只能由单个 OS 线程访问(根据 CUDA 的要求)
我的策略
我将 CUDA 功能和设备指针包装在托管 C++ 代码中。一个 CUDA 设备指针可以包装在一个DevicePointer
用 MC++ 编写的类中。如果类跟踪它正在使用的线程,它可以强制只有单个线程可以访问 CUDA 设备指针。
然后我将设计程序,以便只有一个线程会尝试访问任何给定的数据。
我需要帮助的地方
我做了一些研究,并阅读了托管线程和操作系统线程之间的区别。一般来说,两者之间似乎存在多对多的关系。
这意味着即使我只使用单个托管线程,它也可以切换操作系统线程,并且我将失去对设备指针的访问权限。
有什么方法可以强制 CLR 不在 OS 线程之间移动托管线程?