Количество процессоров
От: Conr Россия  
Дата: 15.10.07 17:25
Оценка: 108 (14)
#Имя: FAQ.ncpus
Здравствуйте, 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 ;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.