Added Android-specific implementation of getNumberOfCPUs
This commit is contained in:
parent
dccfd79da8
commit
cb1565ebc9
@ -374,6 +374,46 @@ int getThreadNum(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ANDROID
|
||||||
|
static inline int getNumberOfCPUsImpl()
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int getNumberOfCPUs(void)
|
int getNumberOfCPUs(void)
|
||||||
{
|
{
|
||||||
#if defined WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32
|
||||||
@ -381,6 +421,10 @@ int getNumberOfCPUs(void)
|
|||||||
GetSystemInfo( &sysinfo );
|
GetSystemInfo( &sysinfo );
|
||||||
|
|
||||||
return (int)sysinfo.dwNumberOfProcessors;
|
return (int)sysinfo.dwNumberOfProcessors;
|
||||||
|
#elif ANDROID
|
||||||
|
static int ncpus = getNumberOfCPUsImpl();
|
||||||
|
printf("CPUS= %d\n", ncpus);
|
||||||
|
return ncpus;
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
return (int)sysconf( _SC_NPROCESSORS_ONLN );
|
return (int)sysconf( _SC_NPROCESSORS_ONLN );
|
||||||
#elif defined __APPLE__
|
#elif defined __APPLE__
|
||||||
|
Loading…
x
Reference in New Issue
Block a user