mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
949 B
41 lines
949 B
#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()
|
|
|