【问题标题】:Problems with tbb in native dll called from multi-threaded .net application?从多线程 .net 应用程序调用的本机 dll 中的 tbb 问题?
【发布时间】:2016-08-31 17:13:09
【问题描述】:

我们有一个原生 .dll,它使用 Threading Building Blocks 4.4 进行一些 HPC 类型的计算来管理并行性。这个 .dll 是从一个本身是多线程的 .Net 桌面程序中调用的。我是 tbb 的新手,我想知道这种设置是否会引起一些问题。我对 tbb 的使用非常基本——我只是调用 parallel_reduce 来进行一项特定的计算。我没有明确设置 tbb 线程池;我依赖于默认初始化。

当我们进行系统测试时,我们会看到一些间歇性进程挂起。当我们单独测试本机 dll 时,我们没有看到这些,所以我希望有一个最小的例子来证明这个问题很难构建。如果在这种使用场景中可能存在内在问题,我希望有人比我更熟悉 tbb 能够提出建议。

顺便说一句,一切都在 x86-64 平台上的 Windows 10 上运行。

【问题讨论】:

  • 您如何观察到“间歇性进程挂起”。 GUI 是否会延迟刷新?整个系统是否变得无响应?会不会是 CPU 使用率高和超额认购造成的?
  • @Alex - 两种行为:1,GUI 变得无响应,没有 CPU 活动。 2、GUI像崩溃一样关闭,但没有“此应用程序遇到错误”对话框。
  • 本机代码中的内存错误(例如,由于不正确的编组或其他原因)是否会导致托管运行时的行为不稳定?您是否尝试过使用空 Body 运行 parallel_reduce?
  • @Alex - 感谢您的建议。事实证明,问题完全出在托管方面。 TBB 根本没有任何作用,只是做了它应该做的事情。

标签: c# c++ multithreading clr tbb


【解决方案1】:

我的问题的答案似乎是没有问题;在这种情况下,线程构建块可以正常工作。消除 parallel_reduce 并没有改变行为,进一步调查表明问题仅限于托管代码;和 TBB 一点关系都没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多