You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cpuinfo.cpp 5.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /**
  2. * \file dnn/test/arm_common/cpuinfo.cpp
  3. * MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  4. *
  5. * Copyright (c) 2014-2021 Megvii Inc. All rights reserved.
  6. *
  7. * Unless required by applicable law or agreed to in writing,
  8. * software distributed under the License is distributed on an
  9. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or
  10. * implied.
  11. */
  12. #include "src/common/utils.h"
  13. #if defined(MGB_ENABLE_CPUINFO_CHECK) && MGB_ENABLE_CPUINFO
  14. #include <cpuinfo.h>
  15. #include <inttypes.h>
  16. #include "gtest/gtest.h"
  17. namespace megdnn {
  18. namespace test {
  19. TEST(ARM_RUNTIME, CPUINFO_KIRIN980) {
  20. ASSERT_TRUE(cpuinfo_initialize());
  21. int right_soc = strcmp(cpuinfo_get_package(0)->name, "HiSilicon Kirin 980");
  22. if (!right_soc) {
  23. ASSERT_EQ(8, cpuinfo_get_processors_count());
  24. ASSERT_TRUE(cpuinfo_get_processors());
  25. ASSERT_TRUE(cpuinfo_has_arm_neon());
  26. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  27. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  28. ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
  29. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  30. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  31. }
  32. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  33. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  34. }
  35. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  36. switch (i) {
  37. case 0:
  38. case 1:
  39. case 2:
  40. case 3:
  41. ASSERT_EQ(cpuinfo_uarch_cortex_a76, cpuinfo_get_core(i)->uarch);
  42. break;
  43. case 4:
  44. case 5:
  45. case 6:
  46. case 7:
  47. ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch);
  48. break;
  49. }
  50. }
  51. } else {
  52. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  53. }
  54. }
  55. TEST(ARM_RUNTIME, CPUINFO_SDM8150) {
  56. ASSERT_TRUE(cpuinfo_initialize());
  57. int right_soc = strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 8150");
  58. if (!right_soc) {
  59. ASSERT_EQ(8, cpuinfo_get_processors_count());
  60. ASSERT_TRUE(cpuinfo_get_processors());
  61. ASSERT_TRUE(cpuinfo_has_arm_neon());
  62. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  63. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  64. ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
  65. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  66. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  67. }
  68. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  69. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  70. }
  71. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  72. switch (i) {
  73. case 0:
  74. case 1:
  75. case 2:
  76. case 3:
  77. ASSERT_EQ(cpuinfo_uarch_cortex_a76, cpuinfo_get_core(i)->uarch);
  78. break;
  79. case 4:
  80. case 5:
  81. case 6:
  82. case 7:
  83. ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch);
  84. break;
  85. }
  86. }
  87. } else {
  88. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  89. }
  90. }
  91. TEST(ARM_RUNTIME, CPUINFO_SDM660) {
  92. ASSERT_TRUE(cpuinfo_initialize());
  93. int right_soc = strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 660");
  94. if (!right_soc) {
  95. ASSERT_EQ(8, cpuinfo_get_processors_count());
  96. ASSERT_TRUE(cpuinfo_get_processors());
  97. ASSERT_TRUE(cpuinfo_has_arm_neon());
  98. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  99. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  100. ASSERT_FALSE(cpuinfo_has_arm_neon_dot());
  101. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  102. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  103. }
  104. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  105. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  106. }
  107. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  108. switch (i) {
  109. case 0:
  110. case 1:
  111. case 2:
  112. case 3:
  113. ASSERT_EQ(cpuinfo_uarch_cortex_a73, cpuinfo_get_core(i)->uarch);
  114. break;
  115. case 4:
  116. case 5:
  117. case 6:
  118. case 7:
  119. ASSERT_EQ(cpuinfo_uarch_cortex_a53, cpuinfo_get_core(i)->uarch);
  120. break;
  121. }
  122. }
  123. } else {
  124. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  125. }
  126. }
  127. } // namespace test
  128. } // namespace megdnn
  129. #endif
  130. // vim: syntax=cpp.doxygen

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台