У меня есть многопоточное приложение, которое обрабатывает очень большой файл данных.Отлично работает на Windows 7, код полностью на C ++, использует библиотеку pthreads для межплатформенной многопоточности.Когда я запускаю его под Windows на моем Intel i3 - Диспетчер задач показывает все четыре ядра, привязанные к пределу, чего я и хочу.Скомпилировал тот же код, используя рабочую станцию g ++ Ubuntu / VMWare - запущено одинаковое количество потоков, но все потоки выполняются на одном ядре (насколько я могу судить - диспетчер задач показывает, что занято только одно ядро).
IЯ собираюсь погрузиться в вызовы pThreads - возможно, я пропустил некоторые настройки по умолчанию - но если у кого-то есть идеи, я хотел бы услышать их, и я могу дать больше информации -
Обновление : Я настроил VMWare, чтобы увидеть все четыре ядра, а / proc / cpuinfo показывает 4 ядра
Обновление 2 - только что написал простое приложение, чтобы показать проблему - может быть, это только VMWare?- кто-нибудь из Linux хочет попробовать и посмотреть, действительно ли это загружает несколько ядер?Для запуска этого в Windows вам понадобится библиотека pThread - легко загружаемая.И если кто-нибудь может предложить что-нибудь более интенсивное, чем printf, то вперед!
#ifdef _WIN32
#include "stdafx.h"
#endif
#include "stdio.h"
#include "stdlib.h"
#include "pthread.h"
void *Process(void *data)
{
long id = (long)data;
for (int i=0;i<100000;i++)
{
printf("Process %ld says Hello World\n",id);
}
return NULL;
}
#ifdef _WIN32
int _tmain(int argc, _TCHAR* argv[])
#else
int main(int argc, char* argv[])
#endif
{
int numCores = 1;
if (argc>1)
numCores = strtol(&argv[1][2],NULL,10);
pthread_t *thread_ids = (pthread_t *)malloc(numCores*sizeof(pthread_t));
for (int i=0;i<numCores;i++)
{
pthread_create(&thread_ids[i],NULL,Process,(void *)i);
}
for (int i=0;i<numCores;i++)
{
pthread_join(thread_ids[i],NULL);
}
return 0;
}