我有一个多线程 C++ 应用程序(使用 pThreads),它可以处理一个在 Windows 上运行良好的大型平面文件 - 在我小小的 CPU 上使用所有四个核心。客户希望在 Red Hat 的 64 Xeon CPU 机器上运行相同的代码。所以我在这里编译它(g++),在 VMWare 上的 Ubuntu 上运行它,代码只使用了四个核心之一。所以我认为这是一个 VMWare 问题,我将代码发送到客户端 - 它执行相同的操作(据我远程所知 - mpstat -P ALL 显示 CPU 几乎没有加载)。我需要做些什么来强制 Red Hat 分散线程吗?我是否遗漏了一些东西 - 我正在尝试下一步更改“好的”优先级 - 但我觉得我遗漏了一些东西。
我可以发布代码 - 但就像我说的,在 Windows 上运行良好,使用 pThreads 等。
答案1
我会尝试诊断这是否是您的虚拟机环境或代码的问题。以下是有关虚拟机需要考虑的一些事项。
您是否将 vmware 配置为允许访问多个 CPU?我没有使用最新版本的经验,但它曾经是你必须特别允许的东西。在 VirtualBox 中,我在虚拟机配置中有一个选项,用于说明允许来宾使用多少个 CPU。
如果您
cat /proc/cpuinfo
在 Ubuntu 虚拟机中看到不止一个 CPU 吗?如果您执行一些通用操作(例如进入内核源代码并运行内核编译),您是否可以正确使用多个 CPU
make -j10
?
如果其中任何一个出现错误,则表明您的虚拟机配置错误,而不是您的代码有问题。