количество процессоров
От: Socket Ниоткуда http://www.samborsky.com
Дата: 15.10.07 16:04
Оценка:
Есть ли кроссплатформенный способ получить количество процессоров в системе?
Пока обхожусь 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();
http://www.samborsky.com — мой блог
Количество процессоров
От: 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 ;
}
Re: количество процессоров
От: Аноним  
Дата: 16.10.07 03:37
Оценка:
Здравствуйте, Socket, Вы писали:

S>Есть ли кроссплатформенный способ получить количество процессоров в системе?

S>Пока обхожусь win32 решением, но программа кросс, и рано или поздно придется этим вопросом задастся
вдобавок к вышеприведенному ответу:
если реализована поддержка OpenMP — то можно спросить и через нее.
Re: количество процессоров
От: MegaVoltik  
Дата: 21.12.07 14:25
Оценка:
Здравствуйте, 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 возвращает количество ядер, а не количество процессоров. Вероятно, в вопросе и имелось в виду ядер.
Вопрос следующий: как определить количество физических процессоров?
Чем больше нас, тем меньше их...
Re[2]: количество процессоров
От: McQwerty Россия  
Дата: 21.12.07 15:05
Оценка:
Здравствуйте, MegaVoltik, Вы писали:

MV>GetSystemInfo возвращает количество ядер, а не количество процессоров. Вероятно, в вопросе и имелось в виду ядер.

MV>Вопрос следующий: как определить количество физических процессоров?

Злостный оффтоп:
Производители железа парятся, чтобы один процессор выглядел как несколько, а разработчики софта пытаются выяснить как оно на самом деле. Прямо противостояние щита и меча
Re: количество процессоров
От: Димчанский Литва http://dimchansky.github.io/
Дата: 22.12.07 06:28
Оценка:
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.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.