This repository has been archived on 2023-02-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-benchmark-bundle/benchmark/third_party/cpu_cores/linux.py

55 lines
2.2 KiB
Python
Raw Normal View History

# This file is part of cpu_cores released under the MIT license.
# See the LICENSE file for more information.
from cpu_cores.common import CPUCoresCounter
CPUINFO_FILEPATH = "/proc/cpuinfo"
def _core_hash(cpu_infos):
if 'core id' not in cpu_infos and 'physical id' not in cpu_infos:
return "%i" % cpu_infos['processor']
if 'core id' in cpu_infos and 'physical id' not in cpu_infos:
raise Exception("incorrect cpuinfo file :"
" we have a core_id without physical_id")
if 'core id' in cpu_infos:
return "%i_%i" % (cpu_infos['physical id'], cpu_infos['core id'])
else:
return "%i" % cpu_infos['physical id']
def _processor_hash(cpu_infos):
if 'core id' not in cpu_infos and 'physical id' not in cpu_infos:
return "%i" % cpu_infos['processor']
if 'core id' in cpu_infos and 'physical id' not in cpu_infos:
raise Exception("incorrect cpuinfo file :"
" we have a core_id without physical_id")
return "%i" % cpu_infos['physical id']
class LinuxCPUCoresCounter(CPUCoresCounter):
def _count(self, cpuinfo_filepath=None):
if cpuinfo_filepath is None:
cpuinfo_filepath = CPUINFO_FILEPATH
with open(cpuinfo_filepath, 'r') as f:
# we read lines in reversed order to be sure to end with a
# "processor:" line
lines = reversed(f.readlines())
cores = set()
processors = set()
cpu_infos = {}
for line in lines:
tmp = line.strip()
for key in ('processor', 'physical id', 'core id'):
if tmp.startswith(key):
cpu_infos[key] = int(tmp.split(':')[1].strip())
if key == 'processor':
cores.add(_core_hash(cpu_infos))
processors.add(_processor_hash(cpu_infos))
cpu_infos = {}
if len(cores) == 0 or len(processors) == 0:
raise Exception("can't get the cpu cores count (linux)")
self._physical_cores_count = len(cores)
self._physical_processors_count = len(processors)