janusheide / cpuid

C++ library for detecting CPU capabilities

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cpuid

http://buildbot.steinwurf.dk/svgstatus?project=cpuid

cpuid is a C++ library for CPU dispatching. Currently the project can detect the following CPU capabilities:

  • Instruction sets detected on x86: FPU, MMX, SSE, SSE2, SSE3, SSSE3,
    SSE 4.1, SSE 4.2, PCLMULQDQ, AVX, and AVX2
  • Instruction sets detected on ARM: NEON

License

cpuid license is based on the BSD License. Please refer to the LICENSE.rst file for more details.

Platforms

We have tested cpuid on various versions of Windows, Linux and Mac. We run automated tests on x86 and ARM architectures with different compilers like g++, clang and Microsoft Visual Studio.

You can see the status by selecting the cpuid project on the Steinwurf buildbot page.

Build

Fetch the sources:

git clone https://github.com/steinwurf/cpuid
cd cpuid
git checkout 6.2.1

We use the waf build system to build the cpuid static library. We have some additional waf tools which can be found at waf.

To configure and build cpuid, run the following commands:

python waf configure
python waf build
python waf install --destdir .

The final install step will create a folder containing all the nessecary files needed to use the library (e.g. static library, headers etc.). You can change the output folder by passing a different path to --destdir:

python waf install --destdir=/tmp
cd /tmp/cpuid_6.2.1

When building the libraries, waf will also build the print_cpuinfo_example executable which is useful to print the available CPU instruction sets. The compiled binary is located in the build/[platform]/examples/print_cpuinfo folder (where [platform] denotes your current platform, e.g. linux, win32 or darwin).

API

class cpuinfo

Scope: cpuid

In header: #include <cpuinfo.hpp>

Member functions (public)

  cpuinfo ()
  ~cpuinfo ()
bool has_avx () const
bool has_avx2 () const
bool has_fpu () const
bool has_mmx () const
bool has_neon () const
bool has_pclmulqdq () const
bool has_sse () const
bool has_sse2 () const
bool has_sse3 () const
bool has_sse4_1 () const
bool has_sse4_2 () const
bool has_ssse3 () const

Description

The cpuinfo object extract information about which, if any, additional instructiions are supported by the CPU.

Member Function Description

cpuinfo ()

Constructor for feature detection with default values.

~cpuinfo ()

Destructor.

bool has_avx ()

Return true if the CPU supports AVX.

bool has_avx2 ()

Return true if the CPU supports AVX2.

bool has_fpu ()

Has X87 FPU.

bool has_mmx ()

Return true if the CPU supports MMX.

bool has_neon ()

ARM member functions.

bool has_pclmulqdq ()

Return true if the CPU supports pclmulqdq.

bool has_sse ()

Return true if the CPU supports SSE.

bool has_sse2 ()

Return true if the CPU supports SSE2.

bool has_sse3 ()

Return true if the CPU supports SSE3.

bool has_sse4_1 ()

Return true if the CPU supports SSE 4.1.

bool has_sse4_2 ()

Return true if the CPU supports SSE 4.2.

bool has_ssse3 ()

Return true if the CPU supports SSSE3.

Use as Dependency in CMake

To depend on this project when using the CMake build system, add the following in your CMake build script:

add_subdirectory("/path/to/cpuid" cpuid)
target_link_libraries(<my_target> steinwurf::cpuid)

Where <my_target> is replaced by your target.

Credits

We have created cpuid to fit our specific needs, however we hope that others may also find it useful. When designing cpuid we found inspiration in these other nice projects:

About

C++ library for detecting CPU capabilities

License:Other


Languages

Language:C++ 65.7%Language:Python 31.7%Language:CMake 2.6%