Многопоточная программа C ++, использующая 30% ЦП в Windows (скомпилирована с MinGW), но 100% в Linux - PullRequest
0 голосов
/ 15 января 2020

Я написал программу на C ++ для решения сложной задачи оптимизации с использованием нескольких процессоров. Его базовую c структуру можно увидеть в фрагменте ниже. Параллелизация выполняется простым способом, используя glib, порождая потоки с g_thread_new.

Программа изначально была разработана в Linux, где htop показывает, что она использует 100% всех ядер. Но в Windows загрузка ЦП достигает максимума около 30-40% в четырехъядерном компьютере с 4 процессорами + 4 виртуальными процессорами. Я скомпилировал его в Windows, используя MinGW и g++.

Почему производительность снижается до 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);
    }
}

1 Ответ

1 голос
/ 15 января 2020

Попробуйте проверить значение:

int processors = thread :: hardware_concurrency ();

значение может отличаться от количества процессоров / ядер.

...