Changeset 1066


Ignore:
Timestamp:
Sep 13, 2008 12:23:41 PM (11 years ago)
Author:
stefan
Message:

try to get cbc parallel working on system without clock_gettime (e.g., MacOS X)

Location:
stable/BSP/Cbc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • stable/BSP/Cbc/configure

    r1041 r1066  
    2237122371if test $ac_cv_lib_rt_clock_gettime = yes; then
    2237222372  ADDLIBS="-lrt $ADDLIBS"
    22373 else
    22374   { { echo "$as_me:$LINENO: error: --enable-cbc-parallel selected, but -lrt unavailable" >&5
    22375 echo "$as_me: error: --enable-cbc-parallel selected, but -lrt unavailable" >&2;}
    22376    { (exit 1); exit 1; }; }
     22373
     22374cat >>confdefs.h <<\_ACEOF
     22375#define HAVE_CLOCK_GETTIME 1
     22376_ACEOF
     22377
     22378else
     22379  { echo "$as_me:$LINENO: WARNING: --enable-cbc-parallel selected, but -lrt unavailable; using gettimeofday instead of clock_gettime" >&5
     22380echo "$as_me: WARNING: --enable-cbc-parallel selected, but -lrt unavailable; using gettimeofday instead of clock_gettime" >&2;}
    2237722381fi
    2237822382
  • stable/BSP/Cbc/configure.ac

    r1025 r1066  
    148148  AC_DEFINE([CBC_THREAD],[1],[Define to 1 if the SMP version of Cbc should be compiled])
    149149  AC_CHECK_LIB([rt],[clock_gettime],
    150                [ADDLIBS="-lrt $ADDLIBS"],
    151                [AC_MSG_ERROR([--enable-cbc-parallel selected, but -lrt unavailable])])
     150               [ADDLIBS="-lrt $ADDLIBS"
     151                AC_DEFINE([HAVE_CLOCK_GETTIME],[1],[Define if clock_gettime and rt library is available])],
     152               [AC_MSG_WARN([--enable-cbc-parallel selected, but -lrt unavailable; using gettimeofday instead of clock_gettime])])
    152153  AC_CHECK_LIB([pthread],[pthread_create],
    153154               [ADDLIBS="-lpthread $ADDLIBS"],
  • stable/BSP/Cbc/inc/config_cbc.h.in

    r710 r1066  
    6262#undef COIN_HAS_XPR
    6363
     64/* Define if clock_gettime and rt library is available */
     65#undef HAVE_CLOCK_GETTIME
     66
    6467/* Define to 1 if you have the <dlfcn.h> header file. */
    6568#undef HAVE_DLFCN_H
  • stable/BSP/Cbc/src/CbcModel.cpp

    r1020 r1066  
    9191#endif
    9292#include <pthread.h>
     93#ifdef HAVE_CLOCK_GETTIME
     94inline int my_gettime(struct timespec* tp) {
     95        return clock_gettime(CLOCK_REALTIME, tp);
     96}
     97#else
     98//struct timespec {
     99//      time_t tv_sec;
     100//      long tv_nsec;
     101//};
     102inline int my_gettime(struct timespec* tp) {
     103        struct timeval tv;
     104        int ret = gettimeofday(&tv, NULL);
     105        tp->tv_sec = tv.tv_sec;
     106        tp->tv_nsec = tv.tv_usec*1000;
     107        return ret;
     108}
     109#endif
    93110//#include "clocktime.hpp"
    94111//#undef small
     
    24192436            pthread_mutex_lock(&condition_mutex);
    24202437            struct timespec absTime;
    2421             clock_gettime(CLOCK_REALTIME,&absTime);
     2438            my_gettime(&absTime);
    24222439            double time = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    24232440            absTime.tv_nsec += 1000000; // millisecond
     
    24272444            }
    24282445            pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    2429             clock_gettime(CLOCK_REALTIME,&absTime);
     2446            my_gettime(&absTime);
    24302447            double time2 = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    24312448            timeWaiting += time2-time;
     
    34103427            pthread_mutex_lock(&condition_mutex);
    34113428            struct timespec absTime;
    3412             clock_gettime(CLOCK_REALTIME,&absTime);
     3429            my_gettime(&absTime);
    34133430            double time = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    34143431            absTime.tv_nsec += 1000000; // millisecond
     
    34183435            }
    34193436            pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    3420             clock_gettime(CLOCK_REALTIME,&absTime);
     3437            my_gettime(&absTime);
    34213438            double time2 = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    34223439            timeWaiting += time2-time;
     
    34723489            pthread_mutex_lock(&condition_mutex);
    34733490            struct timespec absTime;
    3474             clock_gettime(CLOCK_REALTIME,&absTime);
     3491            my_gettime(&absTime);
    34753492            double time = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    34763493            absTime.tv_nsec += 1000000; // millisecond
     
    34803497            }
    34813498            pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    3482             clock_gettime(CLOCK_REALTIME,&absTime);
     3499            my_gettime(&absTime);
    34833500            double time2 = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    34843501            timeWaiting += time2-time;
     
    34963513          pthread_mutex_lock(&condition_mutex);
    34973514          struct timespec absTime;
    3498           clock_gettime(CLOCK_REALTIME,&absTime);
     3515          my_gettime(&absTime);
    34993516          double time = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    35003517          absTime.tv_nsec += 1000000; // millisecond
     
    35043521          }
    35053522          pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    3506           clock_gettime(CLOCK_REALTIME,&absTime);
     3523          my_gettime(&absTime);
    35073524          double time2 = absTime.tv_sec+1.0e-9*absTime.tv_nsec;
    35083525          timeWaiting += time2-time;
     
    35973614        pthread_mutex_lock(&condition_mutex);
    35983615        struct timespec absTime;
    3599         clock_gettime(CLOCK_REALTIME,&absTime);
     3616        my_gettime(&absTime);
    36003617        absTime.tv_nsec += 1000000; // millisecond
    36013618        if (absTime.tv_nsec>=1000000000) {
     
    36043621        }
    36053622        pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    3606         clock_gettime(CLOCK_REALTIME,&absTime);
     3623        my_gettime(&absTime);
    36073624        pthread_mutex_unlock(&condition_mutex);
    36083625      }
     
    71087125              pthread_mutex_lock(&condition_mutex);
    71097126              struct timespec absTime;
    7110               clock_gettime(CLOCK_REALTIME,&absTime);
     7127              my_gettime(&absTime);
    71117128              absTime.tv_nsec += 1000000; // millisecond
    71127129              if (absTime.tv_nsec>=1000000000) {
     
    71427159              pthread_mutex_lock(&condition_mutex);
    71437160              struct timespec absTime;
    7144               clock_gettime(CLOCK_REALTIME,&absTime);
     7161              my_gettime(&absTime);
    71457162              absTime.tv_nsec += 1000000; // millisecond
    71467163              if (absTime.tv_nsec>=1000000000) {
     
    82128229        pthread_mutex_lock(&condition_mutex);
    82138230        struct timespec absTime;
    8214         clock_gettime(CLOCK_REALTIME,&absTime);
     8231        my_gettime(&absTime);
    82158232        absTime.tv_nsec += 1000000; // millisecond
    82168233        if (absTime.tv_nsec>=1000000000) {
     
    82198236        }
    82208237        pthread_cond_timedwait(&condition_main,&condition_mutex,&absTime);
    8221         clock_gettime(CLOCK_REALTIME,&absTime);
     8238        my_gettime(&absTime);
    82228239        pthread_mutex_unlock(&condition_mutex);
    82238240      }
     
    1451314530    while (stuff->returnCode) {
    1451414531      struct timespec absTime2;
    14515       clock_gettime(CLOCK_REALTIME,&absTime2);
     14532      my_gettime(&absTime2);
    1451614533      double time2 = absTime2.tv_sec+1.0e-9*absTime2.tv_nsec;
    1451714534      // timed wait as seems to hang on max nodes at times
    1451814535      absTime2.tv_sec += 10;
    1451914536      pthread_cond_timedwait(condition,mutex,&absTime2);
    14520       clock_gettime(CLOCK_REALTIME,&stuff->absTime);
     14537      my_gettime(&stuff->absTime);
    1452114538      double time = stuff->absTime.tv_sec+1.0e-9*stuff->absTime.tv_nsec;
    1452214539      stuff->timeWaitingToStart+=time-time2;;
     
    1471114728    if(!stuff->locked) {
    1471214729      struct timespec absTime2;
    14713       clock_gettime(CLOCK_REALTIME,&absTime2);
     14730      my_gettime(&absTime2);
    1471414731      double time2 = absTime2.tv_sec+1.0e-9*absTime2.tv_nsec;
    1471514732      pthread_mutex_lock (stuff->mutex);
    1471614733      stuff->locked=true;
    14717       clock_gettime(CLOCK_REALTIME,&stuff->absTime);
     14734      my_gettime(&stuff->absTime);
    1471814735      double time = stuff->absTime.tv_sec+1.0e-9*stuff->absTime.tv_nsec;
    1471914736      stuff->timeWaitingToLock+=time-time2;;
     
    1478714804      pthread_mutex_unlock (stuff->mutex);
    1478814805      struct timespec absTime2;
    14789       clock_gettime(CLOCK_REALTIME,&absTime2);
     14806      my_gettime(&absTime2);
    1479014807      double time2 = absTime2.tv_sec+1.0e-9*absTime2.tv_nsec;
    1479114808      double time = stuff->absTime.tv_sec+1.0e-9*stuff->absTime.tv_nsec;
Note: See TracChangeset for help on using the changeset viewer.