Example #1
0
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;
}
Example #2
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);
	  }
	}
  }
}