Здравствуйте, Socket, Вы писали:
S>Есть ли кроссплатформенный способ получить количество процессоров в системе?
S>Пока обхожусь win32 решением, но программа кросс, и рано или поздно придется этим вопросом задастся
Общего способа для все posix систем я не знаю, имхо его нет
Вот для тех систем, для которых знаю:
AIX,
Solaris:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int ncpus ;
ncpus = sysconf(_SC_NPROCESSORS_ONLN);
printf("cpus: %d\n", ncpus);
return 0 ;
}
BSD (включая
MacOS X)
#include <stdio.h>
#include <unistd.h>
#include <sys/sysctl.h>
int main(int argc, char * argv[])
{
int ncpus ;
size_t len = sizeof(ncpus);
int mib[2];
mib[0] = CTL_HW ;
mib[1] = HW_NCPU ;
if (sysctl(&mib[0], 2, &ncpus, &len, NULL, 0)!=0) {
ncpus=-1 ;
}
printf("cpus: %d\n", ncpus);
return 0 ;
}
Linux
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int ncpus ;
ncpus = sysconf(_SC_NPROCESSORS_CONF);
printf("cpus: %d\n", ncpus);
return 0 ;
}
HPUX
#include <stdio.h>
#include <sys/mpctl.h>
int main(void)
{
int ncpus ;
ncpus = mpctl(MPC_GETNUMSPUS, NULL, NULL);
printf("cpus: %d\n", ncpus);
return 0 ;
}
Есть ли кроссплатформенный способ получить количество процессоров в системе?
Пока обхожусь win32 решением, но программа кросс, и рано или поздно придется этим вопросом задастся
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
for (DWORD i = 0; i < siSysInfo.dwNumberOfProcessors; i++)
m_prepare_threads.create_thread(boost::bind(&parse_files,this));
m_prepare_threads.join_all();
Здравствуйте, Socket, Вы писали:
S>Есть ли кроссплатформенный способ получить количество процессоров в системе?
S>Пока обхожусь win32 решением, но программа кросс, и рано или поздно придется этим вопросом задастся
S>S> SYSTEM_INFO siSysInfo;
S> GetSystemInfo(&siSysInfo);
S> for (DWORD i = 0; i < siSysInfo.dwNumberOfProcessors; i++)
S> m_prepare_threads.create_thread(boost::bind(&parse_files,this));
S> m_prepare_threads.join_all();
S>
GetSystemInfo возвращает количество
ядер, а не количество процессоров. Вероятно, в вопросе и имелось в виду ядер.
Вопрос следующий: как определить количество физических процессоров?
Здравствуйте, MegaVoltik, Вы писали:
MV>GetSystemInfo возвращает количество ядер, а не количество процессоров. Вероятно, в вопросе и имелось в виду ядер.
MV>Вопрос следующий: как определить количество физических процессоров?
Злостный оффтоп:
Производители железа парятся, чтобы один процессор выглядел как несколько, а разработчики софта пытаются выяснить как оно на самом деле. Прямо противостояние щита и меча
Trolltech в своей библиотеке Qt сделали подобную кроссплатформенную функцию. Посмотрите на реализацию метода:
int QThread::idealThreadCount () [static]
Returns the ideal number of threads that can be run on the system. This is done querying the number of processor cores, both real and logical, in the system. This function returns -1 if the number of processor cores could not be detected.