【问题标题】:A multi-threaded software(PFC3D-to do simulation) not using all the available cores不使用所有可用内核的多线程软件(PFC3D-to do simulation)
【发布时间】:2020-10-15 14:35:04
【问题描述】:

我正在使用多线程软件(Itasca 咨询公司开发的 PFC3D)做一些模拟。转移到功能强大的计算机 Intel Xeon Gold 5120T CPU 2.2GHZ 2.19 GHZ(2 个处理器)(28 个物理内核,56 个逻辑cores)(Windows10)为了快速计算,软件似乎只使用了有限数量的核心。软件中检测到的核心数量通常为56个,自动取最大核心数。

我很确定问题出在系统而不是我的软件中,因为我在英特尔酷睿 i9-9880H 处理器(16 个逻辑核心)中运行相同的代码,并且它使用的是所有核心比至强金效率更高。

软件使用22到30; 任务管理器CPU页面显示28核/56线程。我有windows 10 pro。

非常感谢您的宝贵帮助。

谢谢

优素福

interface

classes

details

code

【问题讨论】:

  • 为什么不就这个问题联系软件制造商呢?这更像是一个与 PFC3D 相关的问题,因此他们最适合回答。
  • 谢谢,我在等着看我们能做些什么。

标签: windows multithreading


【解决方案1】:

很难说,因为我没有代码,而且你提供的信息太少。 您似乎没有 IO,因为您说您在 i9 上使用了 100% 的 CPU。这应该会简化一点,但是...

可能有很多原因。

我的感觉是你有依赖于共享资源的线程同步(如临界区)。该资源似乎被轻轻请求,线程只需要它一点点,使 16 个线程可以访问它而不会发生太多冲突(或很少)。我的意思是线程不必等待共享资源(它大部分可用/未锁定)。但是添加更多线程显着提高了必须等待该资源的冲突量(另一个线程锁定共享资源的状态)。听起来确实像那样。但这只是猜测。

一个可能会提高性能的快速尝试(因为我觉得共享资源需要非常快速的访问)是使用 SpinLock 而不是常规的关键部分。但这完全是基于很少的猜测,而且 SpinLock 在 C# 中可用,但在您的语言中可能不可用。

关于占用的CPU数量,根据程序的制作方式,通常只占用一半。有时不使用超线程可能会更好,也许您的程序本身就是这样做的。程序本身、C# 或 BIOS 中也可能存在错误,告诉应用程序只有 28 个 cpu 而不是 56 个(通常是由于超线程)。它仍然是一个猜测。

在此stack overflow question 中可能有一些其他信息可能对您有所帮助。

祝你好运。

【讨论】:

  • 欧莱特先生,非常感谢您的回答;我很感激。我关闭了超线程;所以它仍然是 28 个核心,而且工作得更好!我已经通过添加一些 pfc5.0 接口文档的屏幕截图来编辑我的问题,也许它会有所帮助;我在实用程序实现中找到了著名的自旋锁!
  • 我同意奥伯格的观点。我认为最好联系 PFC3D 的制造商。也许他们可以解决这个问题。对不起,我不会亲自投入更多时间。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
相关资源
最近更新 更多