|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #include "src/common/utils.h"
- #if defined(MGB_ENABLE_CPUINFO_CHECK) && MGB_ENABLE_CPUINFO
- #include <cpuinfo.h>
- #include <inttypes.h>
- #include "gtest/gtest.h"
-
- namespace megdnn {
- namespace test {
-
- TEST(ARM_RUNTIME, CPUINFO_KIRIN980) {
- ASSERT_TRUE(cpuinfo_initialize());
-
- int right_soc = strcmp(cpuinfo_get_package(0)->name, "HiSilicon Kirin 980");
-
- if (!right_soc) {
- ASSERT_EQ(8, cpuinfo_get_processors_count());
-
- ASSERT_TRUE(cpuinfo_get_processors());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
-
- for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
- ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- switch (i) {
- case 0:
- case 1:
- case 2:
- case 3:
- ASSERT_EQ(cpuinfo_uarch_cortex_a76, cpuinfo_get_core(i)->uarch);
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch);
- break;
- }
- }
- } else {
- printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
- }
- }
-
- TEST(ARM_RUNTIME, CPUINFO_SDM8150) {
- ASSERT_TRUE(cpuinfo_initialize());
-
- int right_soc = strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 8150");
-
- if (!right_soc) {
- ASSERT_EQ(8, cpuinfo_get_processors_count());
-
- ASSERT_TRUE(cpuinfo_get_processors());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
-
- ASSERT_FALSE(cpuinfo_has_arm_i8mm());
-
- for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
- ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- switch (i) {
- case 0:
- case 1:
- case 2:
- case 3:
- ASSERT_EQ(cpuinfo_uarch_cortex_a76, cpuinfo_get_core(i)->uarch);
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- ASSERT_EQ(cpuinfo_uarch_cortex_a55, cpuinfo_get_core(i)->uarch);
- break;
- }
- }
- } else {
- printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
- }
- }
-
- TEST(ARM_RUNTIME, CPUINFO_SDM660) {
- ASSERT_TRUE(cpuinfo_initialize());
-
- int right_soc = strcmp(cpuinfo_get_package(0)->name, "Qualcomm Snapdragon 660");
-
- if (!right_soc) {
- ASSERT_EQ(8, cpuinfo_get_processors_count());
-
- ASSERT_TRUE(cpuinfo_get_processors());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
-
- ASSERT_FALSE(cpuinfo_has_arm_neon_dot());
-
- for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
- ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- switch (i) {
- case 0:
- case 1:
- case 2:
- case 3:
- ASSERT_EQ(cpuinfo_uarch_cortex_a73, cpuinfo_get_core(i)->uarch);
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- ASSERT_EQ(cpuinfo_uarch_cortex_a53, cpuinfo_get_core(i)->uarch);
- break;
- }
- }
- } else {
- printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
- }
- }
-
- TEST(ARM_RUNTIME, CPUINFO_TAISHAN) {
- ASSERT_TRUE(cpuinfo_initialize());
-
- bool right_soc =
- cpuinfo_get_processors_count() == 96 &&
- cpuinfo_get_processor(0)->core->uarch == cpuinfo_uarch_taishan_v110;
- if (right_soc) {
- ASSERT_TRUE(cpuinfo_get_processors());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
-
- ASSERT_FALSE(cpuinfo_has_arm_i8mm());
-
- for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
- ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- ASSERT_EQ(cpuinfo_vendor_huawei, cpuinfo_get_core(i)->vendor);
- }
-
- } else {
- printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
- }
- }
-
- TEST(ARM_RUNTIME, CPUINFO_SDM8GEN1) {
- ASSERT_TRUE(cpuinfo_initialize());
- bool right_soc =
- cpuinfo_get_processors_count() == 8 &&
- cpuinfo_get_processor(0)->core->uarch == cpuinfo_uarch_cortex_x2 &&
- cpuinfo_get_processor(1)->core->uarch == cpuinfo_uarch_cortex_a710 &&
- cpuinfo_get_processor(7)->core->uarch == cpuinfo_uarch_cortex_a510;
-
- if (right_soc) {
- ASSERT_TRUE(cpuinfo_get_processors());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
-
- ASSERT_TRUE(cpuinfo_has_arm_neon_dot());
-
- //! Different devices which are the "right_soc" may support or don't support
- //! sve2, so comment the below code. When the SVE2 instruction set is used,
- //! please uncomment it and fix the bug.
- // ASSERT_FALSE(cpuinfo_has_arm_sve2());
- #if MEGDNN_AARCH64
- ASSERT_TRUE(cpuinfo_has_arm_i8mm());
- #endif
- for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
- ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
- }
-
- for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
- ASSERT_EQ(cpuinfo_vendor_arm, cpuinfo_get_core(i)->vendor);
- }
-
- } else {
- printf("detect soc: %s ,skip test.\n", cpuinfo_get_package(0)->name);
- }
- }
-
- } // namespace test
- } // namespace megdnn
- #endif
- // vim: syntax=cpp.doxygen
|