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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. #ifdef MGB_ENABLE_CPUINFO_CHECK
  13. #include <cpuinfo.h>
  14. #include <inttypes.h>
  15. #include "gtest/gtest.h"
  16. namespace megdnn {
  17. namespace test {
  18. TEST(ARM_RUNTIME, CPUINFO_KIRIN980) {
  19. ASSERT_TRUE(cpuinfo_initialize());
  20. int right_soc = strcmp(cpuinfo_get_package(0)->name, "HiSilicon Kirin 980");
  21. if (!right_soc) {
  22. ASSERT_EQ(8, cpuinfo_get_processors_count());
  23. ASSERT_TRUE(cpuinfo_get_processors());
  24. ASSERT_TRUE(cpuinfo_has_arm_neon());
  25. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  26. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  27. ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
  28. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  29. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  30. }
  31. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  32. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  33. }
  34. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  35. switch (i) {
  36. case 0:
  37. case 1:
  38. case 2:
  39. case 3:
  40. ASSERT_EQ(cpuinfo_uarch_cortex_a76,
  41. 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,
  48. cpuinfo_get_core(i)->uarch);
  49. break;
  50. }
  51. }
  52. } else {
  53. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  54. }
  55. }
  56. TEST(ARM_RUNTIME, CPUINFO_SDM8150) {
  57. ASSERT_TRUE(cpuinfo_initialize());
  58. int right_soc =
  59. strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 8150");
  60. if (!right_soc) {
  61. ASSERT_EQ(8, cpuinfo_get_processors_count());
  62. ASSERT_TRUE(cpuinfo_get_processors());
  63. ASSERT_TRUE(cpuinfo_has_arm_neon());
  64. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  65. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  66. ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
  67. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  68. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  69. }
  70. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  71. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  72. }
  73. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  74. switch (i) {
  75. case 0:
  76. case 1:
  77. case 2:
  78. case 3:
  79. ASSERT_EQ(cpuinfo_uarch_cortex_a76,
  80. cpuinfo_get_core(i)->uarch);
  81. break;
  82. case 4:
  83. case 5:
  84. case 6:
  85. case 7:
  86. ASSERT_EQ(cpuinfo_uarch_cortex_a55,
  87. cpuinfo_get_core(i)->uarch);
  88. break;
  89. }
  90. }
  91. } else {
  92. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  93. }
  94. }
  95. TEST(ARM_RUNTIME, CPUINFO_SDM660) {
  96. ASSERT_TRUE(cpuinfo_initialize());
  97. int right_soc =
  98. strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 660");
  99. if (!right_soc) {
  100. ASSERT_EQ(8, cpuinfo_get_processors_count());
  101. ASSERT_TRUE(cpuinfo_get_processors());
  102. ASSERT_TRUE(cpuinfo_has_arm_neon());
  103. ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
  104. ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
  105. ASSERT_FALSE(cpuinfo_has_arm_neon_dot());
  106. for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
  107. ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
  108. }
  109. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  110. ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
  111. }
  112. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
  113. switch (i) {
  114. case 0:
  115. case 1:
  116. case 2:
  117. case 3:
  118. ASSERT_EQ(cpuinfo_uarch_cortex_a73,
  119. cpuinfo_get_core(i)->uarch);
  120. break;
  121. case 4:
  122. case 5:
  123. case 6:
  124. case 7:
  125. ASSERT_EQ(cpuinfo_uarch_cortex_a53,
  126. cpuinfo_get_core(i)->uarch);
  127. break;
  128. }
  129. }
  130. } else {
  131. printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
  132. }
  133. }
  134. } // namespace test
  135. } // namespace megdnn
  136. #endif
  137. // vim: syntax=cpp.doxygen

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