int main(int argc, char* argv[]) { const char* answer; char vendor[13]; char cpu_name[49]; if (!cpuinfo_has_cpuid()) { fprintf(stderr, "Cpu does not support CPUID, aborting.\n"); return 0; } cpuinfo_get_vendor(vendor); cpuinfo_get_cpu_name(cpu_name); printf("Cpu vendor:\t\t%s\n", vendor); printf("Cpu name:\t\t%s\n", cpu_name); if (cpuinfo_has_mmx()) answer = "yes"; else answer = "no"; printf("MMX support:\t\t%s\n", answer); if (cpuinfo_has_sse()) answer = "yes"; else answer = "no"; printf("SSE support:\t\t%s\n", answer); if (cpuinfo_has_sse2()) answer = "yes"; else answer = "no"; printf("SSE2 support:\t\t%s\n", answer); if (cpuinfo_has_3dnow()) answer = "yes"; else answer = "no"; printf("3dnow support:\t\t%s\n", answer); if (cpuinfo_has_e3dnow()) answer = "yes"; else answer = "no"; printf("e3dnow support:\t\t%s\n", answer); return 0; }
static void print_cpuinfo(struct cpuinfo *cip, FILE *out) { int i, j; fprintf(out, "Processor Information\n"); int vendor = cpuinfo_get_vendor(cip); fprintf(out, " Model: %s %s", cpuinfo_string_of_vendor(vendor), cpuinfo_get_model(cip)); int freq = cpuinfo_get_frequency(cip); if (freq > 0) { fprintf(out, ", "); if (freq > 1000) fprintf(out, "%.2f GHz", (double)freq / 1000.0); else fprintf(out, "%d MHz", freq); } fprintf(out, "\n"); int socket = cpuinfo_get_socket(cip); fprintf(out, " Package:"); if (socket != CPUINFO_SOCKET_UNKNOWN) fprintf(out, " %s,", cpuinfo_string_of_socket(socket)); int n_cores = cpuinfo_get_cores(cip); fprintf(out, " %d Core%s", n_cores, n_cores > 1 ? "s" : ""); int n_threads = cpuinfo_get_threads(cip); if (n_threads > 1) fprintf(out, ", %d Threads per Core", n_threads); fprintf(out, "\n"); fprintf(out, "\n"); fprintf(out, "Processor Caches\n"); const cpuinfo_cache_t *ccp = cpuinfo_get_caches(cip); if (ccp) { for (i = 0; i < ccp->count; i++) { const cpuinfo_cache_descriptor_t *ccdp = &ccp->descriptors[i]; if (ccdp->level == 0 && ccdp->type == CPUINFO_CACHE_TYPE_TRACE) fprintf(out, " Instruction trace cache, %dK uOps", ccdp->size); else { fprintf(out, " L%d %s cache, ", ccdp->level, cpuinfo_string_of_cache_type(ccdp->type)); if (ccdp->size >= 1024) { if ((ccdp->size % 1024) == 0) fprintf(out, "%d MB", ccdp->size / 1024); else fprintf(out, "%.2f MB", (double)ccdp->size / 1024.0); } else fprintf(out, "%d KB", ccdp->size); } fprintf(out, "\n"); } } fprintf(out, "\n"); fprintf(out, "Processor Features\n"); static const struct { int base; int max; } features_bits[] = { { CPUINFO_FEATURE_COMMON + 1, CPUINFO_FEATURE_COMMON_MAX }, { CPUINFO_FEATURE_X86, CPUINFO_FEATURE_X86_MAX }, { CPUINFO_FEATURE_IA64, CPUINFO_FEATURE_IA64_MAX }, { CPUINFO_FEATURE_PPC, CPUINFO_FEATURE_PPC_MAX }, { CPUINFO_FEATURE_MIPS, CPUINFO_FEATURE_MIPS_MAX }, { -1, 0 } }; for (i = 0; features_bits[i].base != -1; i++) { int base = features_bits[i].base; int count = features_bits[i].max - base; for (j = 0; j < count; j++) { int feature = base + j; if (cpuinfo_has_feature(cip, feature)) { const char *name = cpuinfo_string_of_feature(feature); const char *detail = cpuinfo_string_of_feature_detail(feature); if (name && detail) fprintf(out, " %-10s %s\n", name, detail); else fprintf(out, " %-10s No description for feature %08x\n", "<error>", feature); } } } }