Browse Source

TimeBeginPeriod and TimeEndPeriod do not add significant overhead when run the entire time for cgminer so avoid trying to maintain balanced numbers of them for specific time calls to simplify code.

nfactor-troky
Con Kolivas 11 years ago
parent
commit
ee2a5ae8f4
  1. 7
      cgminer.c
  2. 23
      util.c

7
cgminer.c

@ -37,6 +37,8 @@
#ifndef WIN32 #ifndef WIN32
#include <sys/resource.h> #include <sys/resource.h>
#else
#include <windows.h>
#endif #endif
#include <ccan/opt/opt.h> #include <ccan/opt/opt.h>
#include <jansson.h> #include <jansson.h>
@ -6790,6 +6792,9 @@ static void clean_up(void)
#endif #endif
cgtime(&total_tv_end); cgtime(&total_tv_end);
#ifdef WIN32
timeEndPeriod(1);
#endif
#ifdef HAVE_CURSES #ifdef HAVE_CURSES
disable_curses(); disable_curses();
#endif #endif
@ -7449,6 +7454,8 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &handler, &inthandler); sigaction(SIGINT, &handler, &inthandler);
#ifndef WIN32 #ifndef WIN32
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#else
timeBeginPeriod(1);
#endif #endif
opt_kernel_path = alloca(PATH_MAX); opt_kernel_path = alloca(PATH_MAX);
strcpy(opt_kernel_path, CGMINER_PREFIX); strcpy(opt_kernel_path, CGMINER_PREFIX);

23
util.c

@ -807,24 +807,10 @@ void thr_info_cancel(struct thr_info *thr)
/* This is a cgminer gettimeofday wrapper. Since we always call gettimeofday /* This is a cgminer gettimeofday wrapper. Since we always call gettimeofday
* with tz set to NULL, and windows' default resolution is only 15ms, this * with tz set to NULL, and windows' default resolution is only 15ms, this
* gives us higher resolution times on windows. */ * gives us higher resolution times on windows. */
#ifndef WIN32
void cgtime(struct timeval *tv) void cgtime(struct timeval *tv)
{ {
gettimeofday(tv, NULL); gettimeofday(tv, NULL);
} }
#else
static void __cgtime(struct timeval *tv)
{
gettimeofday(tv, NULL);
}
void cgtime(struct timeval *tv)
{
timeBeginPeriod(1);
__cgtime(tv);
timeEndPeriod(1);
}
#endif
void subtime(struct timeval *a, struct timeval *b) void subtime(struct timeval *a, struct timeval *b)
{ {
@ -938,8 +924,7 @@ void cgsleep_us_r(cgtimer_t *ts_start, int64_t us)
#else #else
void cgsleep_prepare_r(cgtimer_t *ts_start) void cgsleep_prepare_r(cgtimer_t *ts_start)
{ {
timeBeginPeriod(1); cgtime(ts_start);
__cgtime(ts_start);
} }
static void ms_to_timeval(struct timeval *val, int ms) static void ms_to_timeval(struct timeval *val, int ms)
@ -957,14 +942,12 @@ void cgsleep_ms_r(cgtimer_t *ts_start, int ms)
ms_to_timeval(&tv_diff, ms); ms_to_timeval(&tv_diff, ms);
timeradd(ts_start, &tv_diff, &tv_end); timeradd(ts_start, &tv_diff, &tv_end);
__cgtime(&now); cgtime(&now);
if (unlikely(time_more(&now, &tv_end))) if (unlikely(time_more(&now, &tv_end)))
goto out; return;
timersub(&tv_end, &now, &tv_diff); timersub(&tv_end, &now, &tv_diff);
timeval_to_spec(&ts_diff, &tv_diff); timeval_to_spec(&ts_diff, &tv_diff);
nanosleep(&ts_diff, NULL); nanosleep(&ts_diff, NULL);
out:
timeEndPeriod(1);
} }
void cgsleep_us_r(cgtimer_t *ts_start, int64_t us) void cgsleep_us_r(cgtimer_t *ts_start, int64_t us)

Loading…
Cancel
Save