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.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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-2020 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,
  42. cpuinfo_get_core(i)->uarch);
  43. break;
  44. case 4:
  45. case 5:
  46. case 6:
  47. case 7:
  48. ASSERT_EQ(cpuinfo_uarch_cortex_a55,
  49. cpuinfo_get_core(i)->uarch);
  50. break;
  51. }
  52. }
  53. } else {
  54. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  55. }
  56. }
  57. TEST(ARM_RUNTIME, CPUINFO_SDM8150) {
  58. ASSERT_TRUE(cpuinfo_initialize());
  59. int right_soc =
  60. strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 8150");
  61. if (!right_soc) {
  62. ASSERT_EQ(8, cpuinfo_get_processors_count());
  63. ASSERT_TRUE(cpuinfo_get_processors());
  64. ASSERT_TRUE(cpuinfo_has_arm_neon());
  65. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  66. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  67. ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
  68. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  69. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  70. }
  71. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  72. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  73. }
  74. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  75. switch (i) {
  76. case 0:
  77. case 1:
  78. case 2:
  79. case 3:
  80. ASSERT_EQ(cpuinfo_uarch_cortex_a76,
  81. cpuinfo_get_core(i)->uarch);
  82. break;
  83. case 4:
  84. case 5:
  85. case 6:
  86. case 7:
  87. ASSERT_EQ(cpuinfo_uarch_cortex_a55,
  88. cpuinfo_get_core(i)->uarch);
  89. break;
  90. }
  91. }
  92. } else {
  93. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  94. }
  95. }
  96. TEST(ARM_RUNTIME, CPUINFO_SDM660) {
  97. ASSERT_TRUE(cpuinfo_initialize());
  98. int right_soc =
  99. strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 660");
  100. if (!right_soc) {
  101. ASSERT_EQ(8, cpuinfo_get_processors_count());
  102. ASSERT_TRUE(cpuinfo_get_processors());
  103. ASSERT_TRUE(cpuinfo_has_arm_neon());
  104. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  105. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  106. ASSERT_FALSE(cpuinfo_has_arm_neon_dot());
  107. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  108. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  109. }
  110. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  111. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  112. }
  113. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  114. switch (i) {
  115. case 0:
  116. case 1:
  117. case 2:
  118. case 3:
  119. ASSERT_EQ(cpuinfo_uarch_cortex_a73,
  120. cpuinfo_get_core(i)->uarch);
  121. break;
  122. case 4:
  123. case 5:
  124. case 6:
  125. case 7:
  126. ASSERT_EQ(cpuinfo_uarch_cortex_a53,
  127. cpuinfo_get_core(i)->uarch);
  128. break;
  129. }
  130. }
  131. } else {
  132. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  133. }
  134. }
  135. } // namespace test
  136. } // namespace megdnn
  137. #endif
  138. // vim: syntax=cpp.doxygen

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