gpt4 book ai didi

.net - 增强托管线程和OS线程之间的关系(CUDA用例)

转载 作者:行者123 更新时间:2023-12-03 12:53:22 31 4
gpt4 key购买 nike

问题

我正在尝试创建一个与.net很好集成的CUDA应用程序。设计目标是要具有几个可以从托管代码中调用的CUDA函数。数据还应该能够在函数调用之间保留在设备上,以便可以将其传递给多个CUDA函数。

重要的是,每个单独的数据段只能由单个OS线程访问(根据CUDA的要求)

我的策略

我将CUDA功能和设备指针包装在托管C++代码中。 CUDA设备指针可以包装在用MC++编写的DevicePointer类中。如果该类跟踪它正在使用哪个线程,则可以强制只有一个线程可以访问CUDA设备指针。

然后,我将设计程序,以便只有一个线程会尝试访问任何给定的数据。

我需要帮助的地方

我已经做了一些研究,并了解了托管线程和OS线程之间的区别。总体上看,两者之间存在多对多的关系。

这意味着即使我仅使用一个托管线程,它也可能会切换OS线程,并且我将失去对设备指针的访问权限。

有什么方法可以强制CLR在OS线程之间不移动托管线程?

最佳答案

使用 BeginThreadAffinity EndThreadAffinity 方法:

try
{
Thread.BeginThreadAffinity(); // prevents OS thread switch

// your code
// ...
}
finally
{
Thread.EndThreadAffinity();
}

关于.net - 增强托管线程和OS线程之间的关系(CUDA用例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979191/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com