1
0

Hardware.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef MANDEL_HARDWARE_H
  2. #define MANDEL_HARDWARE_H
  3. #include <string>
  4. namespace mnd
  5. {
  6. class CpuInfo;
  7. }
  8. class mnd::CpuInfo
  9. {
  10. public:
  11. enum class Arch
  12. {
  13. X86,
  14. X86_64,
  15. ARM,
  16. ARM64
  17. };
  18. private:
  19. std::string vendor;
  20. std::string brand;
  21. Arch arch;
  22. bool sse2;
  23. bool avx;
  24. bool avx2;
  25. bool fma;
  26. bool avx512;
  27. bool neon;
  28. public:
  29. CpuInfo(void);
  30. inline const std::string& getVendor(void) const { return vendor; };
  31. inline const std::string& getBrand(void) const { return brand; };
  32. //#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86)
  33. inline bool hasSse2(void) const { return sse2; };
  34. inline bool hasAvx(void) const { return avx; };
  35. inline bool hasAvx2(void) const { return avx2; };
  36. inline bool hasFma(void) const { return fma; };
  37. inline bool hasAvx512(void) const { return avx512; };
  38. //#elif defined(__arm__) || defined(__aarch64__)
  39. inline bool hasNeon(void) const { return neon; };
  40. //#endif
  41. };
  42. #endif // MANDEL_HARDWARE_H