Exemplo n.º 1
0
/* power analyzer stats register */
void
panalyzer_reg_stats(
	char *name, /* fu name */
	fu_pdissipation_t *pdissipation, /* fu pdissipation  statistics db ptr */
	struct stat_sdb_t *sdb /* stats db ptr */)
{
	char buf[512], buf1[512], buf2[512];

	/* get a name for this cache */
	if (!name || !name[0])
		name = "<unknown>";

	sprintf(buf, "%s.switching", name);
	sprintf(buf1, "%s total in switching power dissipation", name);
	stat_reg_double(sdb, buf, buf1, &pdissipation->switching, 0.0, "%12.4f");
	sprintf(buf, "%s.avgswitching", name);
	sprintf(buf1, "%s.switching / sim_cycle", name);
	sprintf(buf2, "%s avg in switching power dissipation", name);
	stat_reg_formula(sdb, buf, buf2, buf1, "%12.4f");

	sprintf(buf, "%s.internal", name);
	sprintf(buf1, "%s total internal power dissipation", name);
	stat_reg_double(sdb, buf, buf1, &pdissipation->internal, 0.0, "%12.4f");
	sprintf(buf, "%s.avginternal", name);
	sprintf(buf1, "%s.internal / sim_cycle", name);
	sprintf(buf2, "%s avg internal power dissipation", name);
	stat_reg_formula(sdb, buf, buf2, buf1, "%12.4f");

	sprintf(buf, "%s.leakage", name);
	sprintf(buf1, "%s total leakage power dissipation", name);
	stat_reg_double(sdb, buf, buf1, &pdissipation->leakage, 0.0, "%12.4f");
	sprintf(buf, "%s.avgleakage", name);
	sprintf(buf1, "%s.leakage / sim_cycle", name);
	sprintf(buf2, "%s avg leakage power dissipation", name);
	stat_reg_formula(sdb, buf, buf2, buf1, "%12.4f");

	sprintf(buf, "%s.pdissipation", name);
	sprintf(buf1, "%s total power dissipation", name);
	stat_reg_double(sdb, buf, buf1, &pdissipation->pdissipation, 0.0, "%12.4f");
	sprintf(buf, "%s.avgpdissipation", name);
	sprintf(buf1, "%s.pdissipation / sim_cycle", name);
	sprintf(buf2, "%s avg power dissipation", name);
	stat_reg_formula(sdb, buf, buf2, buf1, "%12.4f");

	sprintf(buf, "%s.peak", name);
	sprintf(buf1, "%s peak power dissipation", name);
	stat_reg_double(sdb, buf, buf1, &pdissipation->peak, 0.0, "%12.4f");
}
Exemplo n.º 2
0
/* register level 1 power analayzer stats */
void
lv1_panalyzer_reg_stats(
    struct stat_sdb_t *sdb /* stats db ptr */)
{
    stat_reg_int(sdb, "alu access", "number of times alu is accessed",
                 &(lv1_alu_panal.alu_access), 0, NULL);
    stat_reg_double(sdb, "alu max power", "Maximum power for alu",
                    &(lv1_alu_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "fpu access", "number of times fpu is accessed",
                 &(lv1_fpu_panal.fpu_access), 0, NULL);
    stat_reg_double(sdb, "fpu max power", "Maximum power for fpu",
                    &(lv1_fpu_panal.max_power), 0, NULL);


    stat_reg_int(sdb, "mult access", "number of times mult is accessed",
                 &(lv1_mult_panal.mult_access), 0, NULL);
    stat_reg_double(sdb, "mult max power", "Maximum power for mult",
                    &(lv1_mult_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "rf access", "number of times rf is accessed",
                 &(lv1_rf_panal.rf_access), 0, NULL);


    stat_reg_double(sdb, "rf max power", "Maximum power for rf",
                    &(lv1_rf_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "bpred access", "number of times bpred is accessed",
                 &(lv1_bpred_panal.bpred_access), 0, NULL);
    stat_reg_double(sdb, "bpred max power", "Maximum power for bpred",
                    &(lv1_bpred_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "il1 access", "number of times il1 access is accessed",
                 &(lv1_il1_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "il1 max power", "Maximum power for il1",
                    &(lv1_il1_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "il2 access", "number of times il2 access is accessed",
                 &(lv1_il2_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "il2 max power", "Maximum power for il2",
                    &(lv1_il2_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "dl1 access", "number of times dl1 access is accessed",
                 &(lv1_dl1_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "dl1 max power", "Maximum power for dl1",
                    &(lv1_dl1_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "dl2 access", "number of times dl2 access is accessed",
                 &(lv1_dl2_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "dl2 max power", "Maximum power for dl2",
                    &(lv1_dl2_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "itlb access", "number of times itlb access is accessed",
                 &(lv1_itlb_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "itlb max power", "Maximum power for itlb",
                    &(lv1_itlb_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "dtlb access", "number of times dtlb access is accessed",
                 &(lv1_dtlb_panal.cache_access), 0, NULL);
    stat_reg_double(sdb, "dtlb max power", "Maximum power for dtlb",
                    &(lv1_dtlb_panal.max_power), 0, NULL);

    stat_reg_int(sdb, "io access", "number of times io access is accessed",
                 &(lv1_io_panal->io_access), 0, NULL);
    stat_reg_double(sdb, "aio max power", "Maximum power for aio",
                    &(lv1_io_panal->max_aio_power), 0, NULL);
    stat_reg_double(sdb, "dio max power", "Maximum power for dio",
                    &(lv1_io_panal->max_dio_power), 0, NULL);

    stat_reg_double(sdb, "clock max power", "Maximum power for clock",
                    &(lv1_clock_panal->max_power), 0, NULL);

    stat_reg_double(sdb, "uarch max power", "Maximum power for uarch",
                    &(lv1_uarch_panal->max_power), 0, NULL);


}
Exemplo n.º 3
0
void
main(void)
{
  struct stat_sdb_t *sdb;
  struct stat_stat_t *stat, *stat1, *stat2, *stat3, *stat4, *stat5;
  int an_int;
  unsigned int a_uint;
  float a_float;
  double a_double;
  static char *my_imap[8] = {
    "foo", "bar", "uxxe", "blah", "gaga", "dada", "mama", "googoo"
  };

  /* make stats database */
  sdb = stat_new();

  /* register stat variables */
  stat_reg_int(sdb, "stat.an_int", "An integer stat variable.",
	       &an_int, 1, NULL);
  stat_reg_uint(sdb, "stat.a_uint", "An unsigned integer stat variable.",
		&a_uint, 2, "%u (unsigned)");
  stat_reg_float(sdb, "stat.a_float", "A float stat variable.",
		 &a_float, 3, NULL);
  stat_reg_double(sdb, "stat.a_double", "A double stat variable.",
		  &a_double, 4, NULL);
  stat_reg_formula(sdb, "stat.a_formula", "A double stat formula.",
		   "stat.a_float / stat.a_uint", NULL);
  stat_reg_formula(sdb, "stat.a_formula1", "A double stat formula #1.",
		   "2 * (stat.a_formula / (1.5 * stat.an_int))", NULL);
  stat_reg_formula(sdb, "stat.a_bad_formula", "A double stat formula w/error.",
		   "stat.a_float / (stat.a_uint - 2)", NULL);
  stat = stat_reg_dist(sdb, "stat.a_dist", "An array distribution.",
		       0, 8, 1, PF_ALL, NULL, NULL, NULL);
  stat1 = stat_reg_dist(sdb, "stat.a_dist1", "An array distribution #1.",
			0, 8, 4, PF_ALL, NULL, NULL, NULL);
  stat2 = stat_reg_dist(sdb, "stat.a_dist2", "An array distribution #2.",
			0, 8, 1, (PF_PDF|PF_CDF), NULL, NULL, NULL);
  stat3 = stat_reg_dist(sdb, "stat.a_dist3", "An array distribution #3.",
			0, 8, 1, PF_ALL, NULL, my_imap, NULL);
  stat4 = stat_reg_sdist(sdb, "stat.a_sdist", "A sparse array distribution.",
			 0, PF_ALL, NULL, NULL);
  stat5 = stat_reg_sdist(sdb, "stat.a_sdist1",
			 "A sparse array distribution #1.",
			 0, PF_ALL, "0x%08lx        %10lu %6.2f %6.2f",
			 NULL);

  /* print initial stats */
  fprintf(stdout, "** Initial stats...\n");
  stat_print_stats(sdb, stdout);

  /* adjust stats */
  an_int++;
  a_uint++;
  a_float *= 2;
  a_double *= 4;

  stat_add_sample(stat, 8);
  stat_add_sample(stat, 8);
  stat_add_sample(stat, 1);
  stat_add_sample(stat, 3);
  stat_add_sample(stat, 4);
  stat_add_sample(stat, 4);
  stat_add_sample(stat, 7);

  stat_add_sample(stat1, 32);
  stat_add_sample(stat1, 32);
  stat_add_sample(stat1, 1);
  stat_add_sample(stat1, 12);
  stat_add_sample(stat1, 17);
  stat_add_sample(stat1, 18);
  stat_add_sample(stat1, 30);

  stat_add_sample(stat2, 8);
  stat_add_sample(stat2, 8);
  stat_add_sample(stat2, 1);
  stat_add_sample(stat2, 3);
  stat_add_sample(stat2, 4);
  stat_add_sample(stat2, 4);
  stat_add_sample(stat2, 7);

  stat_add_sample(stat3, 8);
  stat_add_sample(stat3, 8);
  stat_add_sample(stat3, 1);
  stat_add_sample(stat3, 3);
  stat_add_sample(stat3, 4);
  stat_add_sample(stat3, 4);
  stat_add_sample(stat3, 7);

  stat_add_sample(stat4, 800);
  stat_add_sample(stat4, 800);
  stat_add_sample(stat4, 1123);
  stat_add_sample(stat4, 3332);
  stat_add_sample(stat4, 4000);
  stat_add_samples(stat4, 4001, 18);
  stat_add_sample(stat4, 7);

  stat_add_sample(stat5, 800);
  stat_add_sample(stat5, 800);
  stat_add_sample(stat5, 1123);
  stat_add_sample(stat5, 3332);
  stat_add_sample(stat5, 4000);
  stat_add_samples(stat5, 4001, 18);
  stat_add_sample(stat5, 7);

  /* print final stats */
  fprintf(stdout, "** Final stats...\n");
  stat_print_stats(sdb, stdout);

  /* all done */
  stat_delete(sdb);
  exit(0);
}