Spaces:
Running on Zero
Running on Zero
| struct powerpc_features { | |
| std::string platform = ""; | |
| int power_version = -1; | |
| bool has_vsx = false; | |
| powerpc_features() { | |
| unsigned long auxval = getauxval(AT_PLATFORM); | |
| if (auxval) { | |
| platform = std::string(reinterpret_cast<const char*>(auxval)); | |
| // TBD: Do systems exist that return this in uppercase? | |
| if (platform.substr(0, 5) == "power") { | |
| // Extractt a numeric suffix, if one exists | |
| int vpos = -1; | |
| for (int i = platform.length() - 1; i >= 0; i--) { | |
| if (std::isdigit(platform[i])) { | |
| vpos = i; | |
| } else { | |
| break; | |
| } | |
| } | |
| if (vpos > -1) { | |
| power_version = std::stoi(platform.substr(vpos)); | |
| } | |
| } | |
| } | |
| if (power_version >= 9) { | |
| has_vsx = true; | |
| } | |
| } | |
| }; | |
| static int ggml_backend_cpu_powerpc_score() { | |
| int score = 1; | |
| powerpc_features pf; | |
| // Platform scores | |
| if (pf.power_version < 7) { return 0; } | |
| score += 1<<1; | |
| if (pf.power_version < 8) { return 0; } | |
| score += 1<<2; | |
| if (pf.power_version < 9) { return 0; } | |
| score += 1<<3; | |
| if (pf.power_version < 10) { return 0; } | |
| score += 1<<4; | |
| if (pf.power_version < 11) { return 0; } | |
| score += 1<<5; | |
| // Feature scores | |
| if (!pf.has_vsx) { return 0; } | |
| score += 1<<6; | |
| return score; | |
| } | |
| GGML_BACKEND_DL_SCORE_IMPL(ggml_backend_cpu_powerpc_score) | |