繁体   English   中英

多线程 C++ 程序在 Windows 中使用 30% CPU(使用 MinGW 编译),但在 Linux 中使用 100%

[英]Multithreaded C++ program using 30% CPU in Windows (compiled with MinGW), but 100% in Linux

我编写了一个 C++ 程序,用于使用多个处理器解决一个困难的优化问题。 它的基本结构可以在下面的片段中看到。 通过使用g_thread_new线程,使用 glib 以一种简单的方式进行并行化。

该程序最初是在 Linux 中开发的,其中 htop 显示它使用了所有内核的 100%。 但在 Windows 中,CPU 使用率在具有 4 个处理器 + 4 个虚拟处理器的四核计算机中达到 30-40% 左右的峰值。 我已经使用MinGWg++在 Windows 中编译了它。

为什么在 Windows 下性能如此下降? 这是由于我使用 MinGW 编译程序造成的吗?

#include <gtk/gtk.h>
#include <thread>

using namespace std;

void intensive_function() {
    //... heavy computations
    return;
}

static gpointer worker(gpointer data) {
    intensive_function();
    return NULL;
}

int main(int argc, char *argv[]) {
    int processors = thread::hardware_concurrency();

    for(int i = 0; i < processors; i++) {
        GThread *thread;
        thread = g_thread_new("worker", worker, NULL);
        g_thread_unref(thread);
    }
}

尝试检查值:

int processor = thread::hardware_concurrency();

该值可以不是处理器/内核数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM