CMS 3D CMS Logo

processor_model.cc
Go to the documentation of this file.
1 #include <string>
2 #include <boost/predef/os.h>
3 
4 #if BOOST_OS_LINUX
5 // Linux
6 #include <fstream>
7 #include <regex>
8 #endif // BOOST_OS_LINUX
9 
10 #if BOOST_OS_BSD || BOOST_OS_MACOS
11 // OSX or BSD
12 #include <sys/types.h>
13 #include <sys/sysctl.h>
14 #endif // BOOST_OS_BSD || BOOST_OS_MACOS
15 
17 
19  std::string result = "unknown";
20 
21 #if BOOST_OS_LINUX
22  // on Linux, read the processor model from /proc/cpuinfo,
23  // and check the status of SMT from /sys/devices/system/cpu/smt/active
24  static const std::regex pattern("^model name\\s*:\\s*(.*)", std::regex::optimize);
25  std::smatch match;
26 
27  std::ifstream cpuinfo("/proc/cpuinfo", std::ios::in);
29  while (cpuinfo.good()) {
30  std::getline(cpuinfo, line);
31  if (std::regex_match(line, match, pattern)) {
32  result = match[1];
33  break;
34  }
35  }
36 
37  std::ifstream smtinfo("/sys/devices/system/cpu/smt/active", std::ios::in);
38  if (smtinfo) {
39  int status;
40  smtinfo >> status;
41  result += status ? " with SMT enabled" : " with SMT disabled";
42  }
43 #endif // BOOST_OS_LINUX
44 
45 #if BOOST_OS_BSD || BOOST_OS_MACOS
46  // on BSD and OS X, read the processor model via sysctlbyname("machdep.cpu.brand_string", ...)
48  size_t len;
49  sysctlbyname("machdep.cpu.brand_string", nullptr, &len, NULL, 0);
50  result.resize(len);
51  sysctlbyname("machdep.cpu.brand_string", result.data(), &len, NULL, 0);
52 #endif // BOOST_OS_BSD || BOOST_OS_MACOS
53 
54  return result;
55 }
56 
#define NULL
Definition: scimark2.h:8
std::string read_processor_model()
const std::string processor_model
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10