* Set CMAKE_C_FLAGS_DEBUG to display warnings during build CI workflows are reporting warnings. Adding more C flags here help to avoid that. * Add new types * Add set_cpu_affinity function * Add cpu_identify_all function * Add cpu_request_core_type function * Add cpuid_get_all_raw_data, cpuid_serialize_all_raw_data and cpuid_deserialize_all_raw_data functions * Detect hybrid architecture for Intel CPUs * Update cpuid_tool to detect all CPU logical cores * Rename tests subdirectories for Intel Core * Update all tests Since e4309a6c4bc3ad875711a1599cba01a205b3103e, new fields are reported by cpuid_tool * Add Intel Alder Lake Fix #157 * Remove convert_instlatx64.c This tool is not useful anymore because the cpuid_deserialize_raw_data_internal() function can natively parse them since5667e1401c
* Fix affinity_mask computation * Define _GNU_SOURCE in configure.ac Forgotten in4f80964db5
* Use dynamic raw array in cpu_raw_data_array_t * Add cpu_affinity_mask_t type * Improve set_cpu_affinity function - Print a warning if logical CPU number is not supported on operating system - Return a boolean value in case of success instead of an integer * Improve cpu_identify_all and cpu_request_core_type functions * Use dynamic array for cpu_types in system_id_t This commit also adds cleanups, fixes and consistency * Tests: update Ryzen 5 Matisse with all CPU cores * Add affinity_mask_str_r function and address other comments - Fixed cpuid_grow_raw_data_array and cpu_raw_data_array_t.logical_cpu_t with the correct type - Added a note about hard limit of cpu_raw_data_array_t - Fixed a typo in cpuid_deserialize_raw_data_internal * Fix build on Windows
4.6 KiB
libcpuid
libcpuid provides CPU identification for the x86 (and x86_64). For details about the programming API, you might want to take a look at the project's website on sourceforge (http://libcpuid.sourceforge.net/). There you'd find a short tutorial, as well as the full API reference.
Configuring after checkout
Under Linux, where you download the sources, there's no configure script to run. This is because it isn't a good practice to keep such scripts in a source control system. To create it, you need to run the following commands once, after you checkout the libcpuid sources from github:
1. run "libtoolize"
2. run "autoreconf --install"
You need to have autoconf
, automake
and libtool
installed.
After that you can run ./configure
and make
- this will build
the library.
make dist
will create a tarball (with "configure" inside) with the
sources.
Prerequisites
Using libcpuid requires no dependencies on any of the supported OSes. Building it requires the aforementioned libtool and autotools commands to be available, which is a matter of installing a few common packages with related names (e.g. automake, autoconf, libtool). It also requires a POSIX-compatible shell. On NetBSD, you may need to install one (credits to @brucelilly):
- Install a POSIX-compatible shell such as ksh93 (pkg_add ast-ksh || pkgin in ast-ksh)
- export CONFIG_SHELL=/usr/pkg/bin/ksh93 (substitute the correct path if required)
- Follow the regular Linux instructions
Testing
After any change to the detection routines or match tables, it's always
a good idea to run make test
. If some test fails, and you're confident
that the test is wrong and needs fixing, run make fix-tests
.
You can also add a new test (which is basically a file containing
the raw CPUID data and the expected decoded items) by using
tests/create_test.py
. The workflow there is as follows:
- Run "cpuid_tool" with no arguments. It will tell you that it has written a pair of files, raw.txt and report.txt. Ensure that report.txt contains meaningful data.
- Run "tests/create_test.py raw.txt report.txt > «my-cpu».test"
- Use a proper descriptive name for the test (look into tests/amd and tests/intel to get an idea) and copy your test file to an appropriate place within the tests directory hierarchy.
AIDA64 CPUID dumps (mostly found on InstLatx64) are also supported. To create a new test based on a AIDA64 CPUID dump, you can do:
cpuid_tool --load=aida64_raw.txt --outfile=report.txt --report
./tests/create_test.py aida64_raw.txt report.txt > tests/xxx/yyy/my-cpu.test
For non-developers, who still want to contribute tests for the project, use this page to report misdetections or new CPUs that libcpuid doesn't handle well yet.
Users
So far, I'm aware of the following projects which utilize libcpuid (listed alphabetically):
- CPU-X (https://github.com/X0rg/CPU-X)
- fre:ac (https://www.freac.org/)
- I-Nex (https://github.com/i-nex/I-Nex)
- Multiprecision Computing Toolbox for MATLAB (https://www.advanpix.com/)
- ucbench (http://anrieff.net/ucbench)
We'd love to hear from you if you are also using libcpuid and want your project listed above.
Downloads
You can find latest versioned archives here, with binaries for macOS and Windows.
Binary packages
Also, libcpuid is available for following systems in official repositories:
- Arch Linux:
pacman -S libcpuid
- Debian (since version 11 "Bullseye"):
apt install cpuidtool libcpuid-dev
- Fedora (since version 25):
dnf install libcpuid libcpuid-devel
- FreeBSD (since version 11):
pkg install libcpuid
- OpenMandriva Lx (since version 4.0 "Nitrogen"):
dnf install libcpuid-tools libcpuid-devel
- openSUSE Leap (since version 15.1):
zypper install libcpuid-tools libcpuid-devel
- Solus:
eopkg install libcpuid libcpuid-devel
- Ubuntu (since version 20.04 "Focal Fossa") :
apt install cpuidtool libcpuid-dev
Build tool
- Vcpkg:
vcpkg install cpuid