LlamaLib  v2.0.2
Cross-platform library for local LLMs
Loading...
Searching...
No Matches
archchecker.cpp
1#include "archchecker.h"
2
3#include "cpu_x86.h"
4
5using namespace FeatureDetector;
6
7const bool has_avx()
8{
9 int32_t info[4];
10 cpu_x86::cpuid(info, 0, 0);
11 int nIds = info[0];
12
13 if (nIds >= 0x00000001)
14 {
15 cpu_x86::cpuid(info, 0x00000001, 0);
16 return (info[2] & ((int)1 << 28)) != 0;
17 }
18 return false;
19}
20
21const bool has_avx2()
22{
23 int32_t info[4];
24 cpu_x86::cpuid(info, 0, 0);
25 int nIds = info[0];
26
27 if (nIds >= 0x00000007)
28 {
29 cpu_x86::cpuid(info, 0x00000007, 0);
30 return (info[1] & ((int)1 << 5)) != 0;
31 }
32 return false;
33}
34
35const bool has_avx512()
36{
37 int32_t info[4];
38 cpu_x86::cpuid(info, 0, 0);
39 int nIds = info[0];
40
41 if (nIds >= 0x00000007)
42 {
43 cpu_x86::cpuid(info, 0x00000007, 0);
44 bool HW_AVX512_F = (info[1] & ((int)1 << 16)) != 0;
45 bool HW_AVX512_BW = (info[1] & ((int)1 << 30)) != 0;
46 return HW_AVX512_F && HW_AVX512_BW;
47 }
48 return false;
49}
50
51/*
52int main(int argc, char ** argv) {
53 std::cout<<has_avx()<<std::endl;
54 std::cout<<has_avx2()<<std::endl;
55 std::cout<<has_avx512()<<std::endl;
56}
57*/