use std:🧵:hardware_concurrency instead of misc hacks
This commit is contained in:
parent
68a7ac61a0
commit
e99926cd5f
1 changed files with 4 additions and 76 deletions
|
@ -17,92 +17,20 @@
|
||||||
#ifndef TEST_CPUCONF
|
#ifndef TEST_CPUCONF
|
||||||
|
|
||||||
#include "autoconfig.h"
|
#include "autoconfig.h"
|
||||||
|
|
||||||
|
|
||||||
#include "cpuconf.h"
|
#include "cpuconf.h"
|
||||||
|
|
||||||
#if defined(__gnu_linux__)
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "execmd.h"
|
|
||||||
#include "smallut.h"
|
|
||||||
|
|
||||||
using std::string;
|
|
||||||
using std::vector;
|
|
||||||
|
|
||||||
// It seems that we could use sysconf as on macosx actually
|
|
||||||
bool getCpuConf(CpuConf& conf)
|
|
||||||
{
|
|
||||||
vector<string> cmdv = create_vector<string>("sh")("-c")
|
|
||||||
("egrep ^processor /proc/cpuinfo | wc -l");
|
|
||||||
|
|
||||||
string result;
|
|
||||||
if (!ExecCmd::backtick(cmdv, result))
|
|
||||||
return false;
|
|
||||||
conf.ncpus = atoi(result.c_str());
|
|
||||||
if (conf.ncpus < 1 || conf.ncpus > 100)
|
|
||||||
conf.ncpus = 1;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(__FreeBSD__)
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "execmd.h"
|
|
||||||
#include "smallut.h"
|
|
||||||
|
|
||||||
using std::string;
|
|
||||||
using std::vector;
|
|
||||||
|
|
||||||
bool getCpuConf(CpuConf& conf)
|
|
||||||
{
|
|
||||||
vector<string> cmdv = create_vector<string>("sysctl")("hw.ncpu");
|
|
||||||
|
|
||||||
string result;
|
|
||||||
if (!ExecCmd::backtick(cmdv, result))
|
|
||||||
return false;
|
|
||||||
conf.ncpus = atoi(result.c_str());
|
|
||||||
if (conf.ncpus < 1 || conf.ncpus > 100)
|
|
||||||
conf.ncpus = 1;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif 0 && defined(_WIN32)
|
|
||||||
// On windows, indexing is actually twice slower with threads enabled +
|
|
||||||
// there is a bug and the process does not exit at the end of indexing.
|
|
||||||
// Until these are solved, pretend there is only 1 cpu
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
// Go c++11 !
|
||||||
bool getCpuConf(CpuConf& cpus)
|
bool getCpuConf(CpuConf& cpus)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
// Native way
|
|
||||||
SYSTEM_INFO sysinfo;
|
|
||||||
GetSystemInfo( &sysinfo );
|
|
||||||
cpus.ncpus = sysinfo.dwNumberOfProcessors;
|
|
||||||
#else
|
|
||||||
// c++11
|
// c++11
|
||||||
cpus.ncpus = std::thread::hardware_concurrency();
|
cpus.ncpus = std::thread::hardware_concurrency();
|
||||||
#endif
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
bool getCpuConf(CpuConf& cpus)
|
|
||||||
{
|
|
||||||
cpus.ncpus = sysconf( _SC_NPROCESSORS_ONLN );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else // Any other system
|
|
||||||
|
|
||||||
// Generic, pretend there is one
|
|
||||||
bool getCpuConf(CpuConf& cpus)
|
|
||||||
{
|
|
||||||
cpus.ncpus = 1;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else // TEST_CPUCONF
|
#else // TEST_CPUCONF
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue