Funkcje związane z procesorem

Istnieje kilka sposobów na sprawdzenie w kodzie funkcji procesora. Każdy z nich wiąże się z innym zestawem wad.

ABI: użyj wstępnie zdefiniowanych makr wstępnie procesora

Zwykle najlepiej jest określić interfejs ABI na etapie kompilacji za pomocą parametru #ifdef w połączeniu z:

  • __arm__ dla 32-bitowej ARM
  • __aarch64__ dla 64-bitowej procesora ARM
  • __i386__ dla 32-bitowej wersji X86
  • __x86_64__ dla 64-bitowej wersji X86

Pamiętaj, że 32-bitowy kod X86 nosi nazwę __i386__, a nie __x86__.

Liczba rdzeni procesora: użyj pliku sysconf(3) biblioteki libc

sysconf(3) pozwala na wysyłanie zapytań o _SC_NPROCESSORS_CONF (liczbę rdzeni procesora w systemie) i _SC_NPROCESSORS_ONLN (liczbę rdzeni procesora obecnie online).

Funkcje: użyj polecenia getauxval(3) biblioteki libc

W interfejsie API na poziomie 18 lub nowszym funkcja getauxval(3) jest dostępna w bibliotece C Androida. Argumenty AT_HWCAP i AT_HWCAP2 zwracają maski bitowe z listą funkcji związanych z CPU. Sprawdź różne nagłówki parametru hwcap.h w pakiecie NDK, z którymi chcesz porównywać stałe, np. HWCAP_SHA512 – instrukcje dotyczące algorytmu SHA512 w grupie eksperymentalnej i HWCAP_IDIVT w przypadku instrukcji dzielenia liczby całkowitej kciuka.

Biblioteka Google cpu_features

Jednym z problemów z usługą AT_HWCAP jest to, że czasami urządzenia się mylą. Niektóre stare urządzenia, na przykład, podają się jako instrukcję dzielenia liczb całkowitych, ale nie mają.

Biblioteka cpu_features Google eliminuje takie problemy, stosując własną wiedzę o konkretnych układach scalonych (analiza /proc/cpuinfo w celu znalezienia konkretnego SOC).

Ta biblioteka jest udostępniana do użytku przez zespoły Google ds. aplikacji własnych i zawiera obejścia wszystkich problemów, które napotkali oni w środowisku Google.

Biblioteka procesorów NDK (wycofana)

Pakiet NDK nadal zawiera wycofaną bibliotekę o nazwie cpufeatures, która zapewnia zgodność źródła z aplikacjami, które już z niej korzystają. W przeciwieństwie do nowszej i bardziej kompletnej biblioteki cpu_features ta biblioteka historyczna nie ma obejścia dla tak wielu konkretnych układów SOC.