mirror of
https://github.com/opencv/opencv.git
synced 2024-12-16 18:39:12 +08:00
42 lines
955 B
C
42 lines
955 B
C
#include <cstdio>
|
|
|
|
static inline int getPossibleCPUs()
|
|
{
|
|
FILE* cpuPossible = fopen("/sys/devices/system/cpu/possible", "r");
|
|
if(!cpuPossible)
|
|
return 1;
|
|
|
|
char buf[2000]; //big enough for 1000 CPUs in worst possible configuration
|
|
char* pbuf = fgets(buf, sizeof(buf), cpuPossible);
|
|
fclose(cpuPossible);
|
|
if(!pbuf)
|
|
return 1;
|
|
|
|
//parse string of form "0-1,3,5-7,10,13-15"
|
|
int cpusAvailable = 0;
|
|
|
|
while(*pbuf)
|
|
{
|
|
const char* pos = pbuf;
|
|
bool range = false;
|
|
while(*pbuf && *pbuf != ',')
|
|
{
|
|
if(*pbuf == '-') range = true;
|
|
++pbuf;
|
|
}
|
|
if(*pbuf) *pbuf++ = 0;
|
|
if(!range)
|
|
++cpusAvailable;
|
|
else
|
|
{
|
|
int rstart = 0, rend = 0;
|
|
sscanf(pos, "%d-%d", &rstart, &rend);
|
|
cpusAvailable += rend - rstart + 1;
|
|
}
|
|
|
|
}
|
|
return cpusAvailable ? cpusAvailable : 1;
|
|
}
|
|
|
|
#define __TBB_HardwareConcurrency() getPossibleCPUs()
|