Google bringt eine C-Library zum Abfragen von Prozessor-Features

Die Open-Source-Bibliothek cpu_features soll Entwicklern helfen, ihren Code für spezifische CPU-Funktionen zu optimieren. Derzeit ist die Library auf x86, ARM, AArch64 und MIPS ausgelegt, aber weitere Systeme sollen folgen.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Google bringt eine C-Library zum Abfragen von Prozessor-Features
Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Google hat eine Library veröffentlicht, die Entwicklern das Erkennen und Verwenden von CPU-Features erleichtern soll. Die Bibliothek mit dem Namen "cpu_features" setzt auf den inzwischen relativ betagten Standard C89, um eine möglich große Portabilität zu erreichen. Die Entwicklung befindet sich noch am Anfang, und derzeit unterstützt die Bibliothek die Prozessorarchitekturen x86, ARM, AArch64 und MIPS. Die Library ist auf Erweiterungen für beliebige Architekturen und Features ausgelegt.

Um die Funktionen zu nutzen, binden Entwickler die Header-Dateien für die gewünschten Architekturen ein und können anschließend zur Laufzeit abfragen, welche Features die CPU unterstützt. Auf die Weise können sie je nach Situation optimierte und reguläre Codepfade verwenden, wie folgendes einfaches Beispiel aus dem GitHub-Repository zeigt:

#include "cpuinfo_x86.h"

static const X86Features features = GetX86Info().features;

void Compute(void) {
if(features.aes && features.sse4_2) {
// Run optimized code.
} else {
// Run standard code.
}
}

Die Bibliothek klopft nicht nur die CPU ab, sondern überprüft auch die für die Optimierung vorgesehenen Compiler-Flags wie -mavx. Außerdem ist sie darauf ausgelegt, gewisse Implementierungen nicht zu verwenden, wenn die Architektur effizienter anbietet. So lässt sich beispielsweise AVX für Sandy-Bridge-CPUs folgendermaßen deaktivieren, was jedoch derzeit nur für x86 funktioniert:

#include "cpuinfo_x86.h"

static const X86Info info = GetX86Info();
static const X86Microarchitecture uarch = GetX86Microarchitecture(&info);
static const bool has_fast_avx = info.features.avx && uarch != INTEL_SNB;

Laut dem Repository soll die Bibliothek auch innerhalb von Sandboxes die Architektur erkennen können. Außerdem bezeichnen die Macher sie als Thread safe. Sie alloziert keinen Speicher und löst keine Exceptions aus.

Weitere Informationen lassen sich dem Google Open-Source-Blog sowie dem GitHub-Repository entnehmen. Dort ist neben dem Quellcode auch eine Tabelle zu finden, die zeigt, welche Funktionen für welche Architekturen verfügbar sind. (rme)