Hardware.h 992 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 fma;
  25. bool avx512;
  26. bool neon;
  27. public:
  28. CpuInfo(void);
  29. inline const std::string& getVendor(void) const { return vendor; };
  30. inline const std::string& getBrand(void) const { return brand; };
  31. //#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86)
  32. inline bool hasSse2(void) const { return sse2; };
  33. inline bool hasAvx(void) const { return avx; };
  34. inline bool hasFma(void) const { return fma; };
  35. inline bool hasAvx512(void) const { return avx512; };
  36. //#elif defined(__arm__) || defined(__aarch64__)
  37. inline bool hasNeon(void) const { return neon; };
  38. //#endif
  39. };
  40. #endif // MANDEL_HARDWARE_H