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