Я написал программу на 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);
}
}