Boost logo

Boost Users :

Subject: [Boost-users] posix_time io slow
From: Hite, Christopher (Christopher.Hite_at_[hidden])
Date: 2010-06-22 09:56:23


I'm in the process of writing a logging library and I noticed that each
call to print out ptime took about ~50us. Even just printing out the
duration time_of_day cost ~20us.

I'm using boost1.43 with g++ (GCC) 4.4.3
g++ -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall
-pthread -DNDEBUG

I was able to do the same thing for <1us not using stream ops (see code
below).

Does anyone care to optimize this stuff? I'm considering specializing
my own boost::date_time::ostream_time_duration_formatter to override to
slow impl.

template<typename int_t>
void printDecimal(int_t d,int places,char* out){
        int_t rest=d;
        for(int i=0;i<places;i++){
                out[places-i-1]= '0'+(rest%10);
                rest/=10;
        }
}

void printDuration(const boost::posix_time::time_duration& d,char* out){
        int64_t ticks=d.ticks();
        int64_t us=ticks%1000000;
        int64_t r1=ticks/1000000;
        int64_t s=r1%60;
        int64_t r2=r1/60;
        int64_t m=r2%60;
        int64_t h=r2/60;
        printDecimal(h,2,out);
        out[2]=':';
        printDecimal(m,2,out+3);
        out[5]=':';
        printDecimal(s,2,out+6);
        out[8]='.';
        printDecimal(us,6,out+9);
}

..

                char buf[32];
                printDuration(pt.time_of_day(),buf);
                std::cout<< buf <<" -\n";
                // <1us

                //std::cout<< pt.time_of_day() <<" -\n"; // ~15us

Chris



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net