| 693 |
} |
} |
| 694 |
|
|
| 695 |
static |
static |
|
unsigned |
|
|
usec() |
|
|
{ |
|
|
#if !defined(WIN32) |
|
|
struct timeval tv; |
|
|
gettimeofday(&tv, NULL); |
|
|
return 100 * tv.tv_sec + (tv.tv_usec / 10000); |
|
|
#else |
|
|
struct timeb tm; |
|
|
ftime(&tm); |
|
|
return 100 * tm.time + tm.millitm / 10; |
|
|
#endif |
|
|
} |
|
|
|
|
|
static |
|
| 696 |
int |
int |
| 697 |
log_printf(FILE *ofp, char const *fmt, ...) |
log_printf(FILE *ofp, char const *fmt, ...) |
| 698 |
{ |
{ |
| 752 |
FILE *ofp; |
FILE *ofp; |
| 753 |
FILE *sfp; /* scoreboard */ |
FILE *sfp; /* scoreboard */ |
| 754 |
struct ITREE *root_expr; |
struct ITREE *root_expr; |
|
int n_iter; |
|
| 755 |
int cr; |
int cr; |
| 756 |
|
|
| 757 |
int xhash_loaded; |
int xhash_loaded; |
| 758 |
|
|
| 759 |
#define N_TS 4 |
#define LOOP_FACTOR 100000 |
| 760 |
struct |
#define UPDATE_INTERVAL 5 /* ステータス表示の最低間隔 */ |
| 761 |
{ |
struct status { |
| 762 |
unsigned t; |
time_t startTime; /* 開始時刻 */ |
| 763 |
int c; |
time_t lastTime; /* 最後に表示した時刻 */ |
| 764 |
} ts[N_TS]; |
unsigned long lastLoopCnt; /* 最後に表示した時の検索数 */ |
| 765 |
|
unsigned long loop; /* ループ回数 % LOOP_FACTOR */ |
| 766 |
|
unsigned long mloop; /* ループ回数 / LOOP_FACTOR */ |
| 767 |
|
} status; |
| 768 |
|
|
| 769 |
#if 0 |
#if 0 |
| 770 |
if (argc < 2) |
if (argc < 2) |
| 833 |
|
|
| 834 |
setvbuf(ofp, NULL, _IONBF, BUFSIZ); /* XXX MSVCRT では _IOLBF が期待通りに動作しない */ |
setvbuf(ofp, NULL, _IONBF, BUFSIZ); /* XXX MSVCRT では _IOLBF が期待通りに動作しない */ |
| 835 |
|
|
|
for (i = 0; i < N_TS; i++) |
|
|
ts[i].t = ts[i].c = 0; |
|
|
|
|
| 836 |
mincnt = 0x7FFFFFFF; |
mincnt = 0x7FFFFFFF; |
| 837 |
nblk_hit = nblk_total = 0; |
nblk_hit = nblk_total = 0; |
| 838 |
nap_hit = nap_total = 0; |
nap_hit = nap_total = 0; |
|
n_iter = 0; |
|
| 839 |
cr = 0; |
cr = 0; |
| 840 |
|
status.startTime = status.lastTime = time( NULL ); |
| 841 |
|
status.lastLoopCnt = 0; |
| 842 |
|
status.loop = 0; |
| 843 |
|
status.mloop = 0; |
| 844 |
/* 探索ループだぞっと */ |
/* 探索ループだぞっと */ |
| 845 |
for (;;) |
for (;;) |
| 846 |
{ |
{ |
| 951 |
} |
} |
| 952 |
} |
} |
| 953 |
|
|
| 954 |
if (++n_iter - ts[0].c >= 8192) |
status.loop += N_ALU * ALU_BITS; |
| 955 |
|
if ( status.loop >= LOOP_FACTOR ) |
| 956 |
{ |
{ |
| 957 |
int t = usec(); |
time_t curTime; |
| 958 |
if (ts[N_TS - 1].c) |
status.mloop += ( status.loop / LOOP_FACTOR ); |
| 959 |
|
status.loop %= LOOP_FACTOR; |
| 960 |
|
curTime = time( NULL ); |
| 961 |
|
if ( curTime >= (status.lastTime + (time_t)UPDATE_INTERVAL) ) |
| 962 |
{ |
{ |
| 963 |
int a = (100 << N_STRIDE) * (n_iter - ts[N_TS - 1].c) / (t - ts[N_TS - 1].t); |
int a, b; |
| 964 |
|
unsigned long loopCnt, zoneCnt; |
| 965 |
|
loopCnt = status.mloop * LOOP_FACTOR + status.loop; |
| 966 |
|
zoneCnt = loopCnt - status.lastLoopCnt; |
| 967 |
|
a = loopCnt / (curTime - status.startTime); |
| 968 |
|
b = zoneCnt / (curTime - status.lastTime); |
| 969 |
#if DEBUG>=1 |
#if DEBUG>=1 |
| 970 |
fprintf(stderr, |
fprintf(stderr, |
| 971 |
"%5d/%5d(%3d%%)", |
"%5d/%5d(%3d%%)", |
| 980 |
" -----/-----(---%%)"); |
" -----/-----(---%%)"); |
| 981 |
nap_hit = nap_total = 0; |
nap_hit = nap_total = 0; |
| 982 |
#endif |
#endif |
| 983 |
fprintf(stderr, |
fprintf( stderr, |
| 984 |
"%8d.%03d(ktrips/sec)\r", |
"%8d.%03dktrips/s [%8d.%03dktrips/s]\r", |
| 985 |
a / 1000, |
a / 1000, a % 1000, |
| 986 |
a % 1000); |
b / 1000, b % 1000 ); |
| 987 |
|
status.lastTime = curTime; |
| 988 |
|
status.lastLoopCnt = loopCnt; |
| 989 |
cr++; |
cr++; |
| 990 |
} |
} |
|
for (i = N_TS - 1; i >= 1; i--) |
|
|
ts[i] = ts[i - 1]; |
|
|
ts[0].c = n_iter; |
|
|
ts[0].t = t; |
|
|
for (i = 1; i < N_TS; i++) |
|
|
if (ts[i].c) |
|
|
break; |
|
|
else |
|
|
ts[i] = ts[i - 1]; |
|
| 991 |
} |
} |
| 992 |
#if 1 |
#if 1 |
| 993 |
if (!key_inc(3)) |
if (!key_inc(3)) |