OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_46/] [or1ksim/] [cpu/] [common/] [stats.c] - Diff between revs 3 and 6

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 3 Rev 6
Line 29... Line 29...
 
 
struct dstats_entry dstats[DSTATS_LEN]; /* dependency stats */
struct dstats_entry dstats[DSTATS_LEN]; /* dependency stats */
struct sstats_entry sstats[SSTATS_LEN]; /* single stats */
struct sstats_entry sstats[SSTATS_LEN]; /* single stats */
struct fstats_entry fstats[FSTATS_LEN]; /* functional units stats */
struct fstats_entry fstats[FSTATS_LEN]; /* functional units stats */
struct mstats_entry mstats;             /* misc units stats */
struct mstats_entry mstats;             /* misc units stats */
 
struct cachestats_entry ic_stats;       /* instruction cache stats */
 
struct cachestats_entry dc_stats;       /* data cache stats */
 
struct raw_stats raw_stats;             /* RAW hazard stats */
 
 
/* Dependency */
/* Dependency */
 
 
int check_depend()
int check_depend()
{
{
Line 119... Line 122...
{
{
        memset(sstats, 0, sizeof(sstats));
        memset(sstats, 0, sizeof(sstats));
        memset(dstats, 0, sizeof(dstats));
        memset(dstats, 0, sizeof(dstats));
        memset(fstats, 0, sizeof(fstats));
        memset(fstats, 0, sizeof(fstats));
        memset(&mstats, 0, sizeof(mstats));
        memset(&mstats, 0, sizeof(mstats));
 
        memset(&ic_stats, 0, sizeof(ic_stats));
 
        memset(&dc_stats, 0, sizeof(dc_stats));
 
        memset(&raw_stats, 0, sizeof(raw_stats));
}
}
 
 
void printstats()
void printstats(int which)
{
{
        int i, all = 0, dependall = 0;
        int i, all = 0, dependall = 0;
 
 
        for(i = 0; i < SSTATS_LEN; i++)
        for(i = 0; i < SSTATS_LEN; i++)
                all += sstats[i].cnt_static;
                all += sstats[i].cnt_static;
 
 
        for(i = 0; i < SSTATS_LEN; i++)
        for(i = 0; i < SSTATS_LEN; i++)
                if (sstats[i].cnt_static)
                if (sstats[i].cnt_static && (which == 1))
                        printf(" %s\t\tused %6dx (%2d%%)\n", sstats[i].insn, sstats[i].cnt_static, (sstats[i].cnt_static * 100)/all);
                        printf(" %s\t\tused %6dx (%2d%%)\n", sstats[i].insn, sstats[i].cnt_static, (sstats[i].cnt_static * 100)/all);
 
 
        printf("SUM: %d instructions (static, single stats)\n", all);
        printf("SUM: %d instructions (static, single stats)\n", all);
 
 
        all = 0;
        all = 0;
 
 
        for(i = 0; i < SSTATS_LEN; i++)
        for(i = 0; i < SSTATS_LEN; i++)
                all += sstats[i].cnt_dynamic;
                all += sstats[i].cnt_dynamic;
 
 
        for(i = 0; i < SSTATS_LEN; i++)
        for(i = 0; i < SSTATS_LEN; i++)
                if (sstats[i].cnt_dynamic)
                if (sstats[i].cnt_dynamic && (which == 2))
                        printf(" %s\t\tused %6dx (%2d%%)\n", sstats[i].insn, sstats[i].cnt_dynamic, (sstats[i].cnt_dynamic * 100)/all);
                        printf(" %s\t\tused %6dx (%2d%%)\n", sstats[i].insn, sstats[i].cnt_dynamic, (sstats[i].cnt_dynamic * 100)/all);
 
 
        printf("SUM: %d instructions (dynamic, single stats)\n", all);
        printf("SUM: %d instructions (dynamic, single stats)\n", all);
 
 
        all = 0;
        all = 0;
Line 152... Line 159...
                all += dstats[i].cnt_dynamic;
                all += dstats[i].cnt_dynamic;
                dependall += dstats[i].depend;
                dependall += dstats[i].depend;
        }
        }
 
 
        for(i = 0; i < DSTATS_LEN; i++)
        for(i = 0; i < DSTATS_LEN; i++)
                if (dstats[i].cnt_dynamic) {
                if (dstats[i].cnt_dynamic && (which == 3)) {
                        printf(" %s, %s ", dstats[i].insn1, dstats[i].insn2);
                        printf(" %s, %s ", dstats[i].insn1, dstats[i].insn2);
                        printf("\t\t\t%6dx (%2d%%)", dstats[i].cnt_dynamic, (dstats[i].cnt_dynamic * 100)/all);
                        printf("\t\t\t%6dx (%2d%%)", dstats[i].cnt_dynamic, (dstats[i].cnt_dynamic * 100)/all);
                        printf("   depend: %3d%%\n", (dstats[i].depend * 100) / dstats[i].cnt_dynamic);
                        printf("   depend: %3d%%\n", (dstats[i].depend * 100) / dstats[i].cnt_dynamic);
                }
                }
 
 
Line 168... Line 175...
                all += fstats[i].cnt_dynamic;
                all += fstats[i].cnt_dynamic;
                dependall += fstats[i].depend;
                dependall += fstats[i].depend;
        }
        }
 
 
        for(i = 0; i < FSTATS_LEN; i++)
        for(i = 0; i < FSTATS_LEN; i++)
                if (fstats[i].cnt_dynamic) {
                if (fstats[i].cnt_dynamic && (which == 4)) {
                        printf(" %s,", func_unit_str[fstats[i].insn1]);
                        printf(" %s,", func_unit_str[fstats[i].insn1]);
                        printf(" %s", func_unit_str[fstats[i].insn2]);
                        printf(" %s", func_unit_str[fstats[i].insn2]);
                        printf("\t\t\t%6dx (%2d%%)", fstats[i].cnt_dynamic, (fstats[i].cnt_dynamic * 100)/all);
                        printf("\t\t\t%6dx (%2d%%)", fstats[i].cnt_dynamic, (fstats[i].cnt_dynamic * 100)/all);
                        printf("   depend: %3d%%\n", (fstats[i].depend * 100) / fstats[i].cnt_dynamic);
                        printf("   depend: %3d%%\n", (fstats[i].depend * 100) / fstats[i].cnt_dynamic);
                }
                }
 
 
 
        for(i = 0; (i < RAW_RANGE) && (which == 5); i++)
 
                printf(" Register set and reused in %d. cycle: %d cases\n", i, raw_stats.range[i]);
 
 
        printf("SUM: %d instructions (dynamic, functional units stats)  depend: %d%%\n", all, (dependall * 100) / all);
        printf("SUM: %d instructions (dynamic, functional units stats)  depend: %d%%\n", all, (dependall * 100) / all);
        printf("Byte ADD: %d instructions\n", mstats.byteadd);
        printf("Byte ADD: %d instructions\n", mstats.byteadd);
        printf("BEQZ: %d (%d%%) taken,", mstats.beqz.taken, (mstats.beqz.taken * 100) / (mstats.beqz.taken + mstats.beqz.nottaken));
        printf("BEQZ: %d (%d%%) taken,", mstats.beqz.taken, (mstats.beqz.taken * 100) / (mstats.beqz.taken + mstats.beqz.nottaken));
        printf(" %d (%d%%) not taken\n", mstats.beqz.nottaken, (mstats.beqz.nottaken * 100) / (mstats.beqz.taken + mstats.beqz.nottaken));
        printf(" %d (%d%%) not taken\n", mstats.beqz.nottaken, (mstats.beqz.nottaken * 100) / (mstats.beqz.taken + mstats.beqz.nottaken));
        printf("BNEZ: %d (%d%%) taken,", mstats.bnez.taken, (mstats.bnez.taken * 100) / (mstats.bnez.taken + mstats.bnez.nottaken));
        printf("BNEZ: %d (%d%%) taken,", mstats.bnez.taken, (mstats.bnez.taken * 100) / (mstats.bnez.taken + mstats.bnez.nottaken));
        printf(" %d (%d%%) not taken\n", mstats.bnez.nottaken, (mstats.bnez.nottaken * 100) / (mstats.bnez.taken + mstats.bnez.nottaken));
        printf(" %d (%d%%) not taken\n", mstats.bnez.nottaken, (mstats.bnez.nottaken * 100) / (mstats.bnez.taken + mstats.bnez.nottaken));
        printf("BPB: hit %d (correct %d%%), miss %d\n", mstats.bpb.hit, (mstats.bpb.correct * 100) / mstats.bpb.hit, mstats.bpb.miss);
        printf("BPB: hit %d (correct %d%%), miss %d\n", mstats.bpb.hit, (mstats.bpb.correct * 100) / mstats.bpb.hit, mstats.bpb.miss);
        printf("BTIC: hit %d(%d%%), miss %d\n", mstats.btic.hit, (mstats.btic.hit * 100) / (mstats.btic.hit + mstats.btic.miss), mstats.btic.miss);
        printf("BTIC: hit %d(%d%%), miss %d\n", mstats.btic.hit, (mstats.btic.hit * 100) / (mstats.btic.hit + mstats.btic.miss), mstats.btic.miss);
 
        printf("IC read:  hit %d(%d%%), miss %d\n", ic_stats.readhit, (ic_stats.readhit * 100) / (ic_stats.readhit + ic_stats.readmiss), ic_stats.readmiss);
 
        printf("DC read:  hit %d(%d%%), miss %d\n", dc_stats.readhit, (dc_stats.readhit * 100) / (dc_stats.readhit + dc_stats.readmiss), dc_stats.readmiss);
 
        printf("DC write: hit %d(%d%%), miss %d\n", dc_stats.writehit, (dc_stats.writehit * 100) / (dc_stats.writehit + dc_stats.writemiss), dc_stats.writemiss);
}
}
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.