Opened 14 years ago

#2718 new Bugs

local_date_time noticeably faster than ptime

Reported by: oneill1979 Owned by: az_sw_dude
Milestone: To Be Determined Component: date_time
Version: Boost 1.37.0 Severity: Optimization
Keywords: Cc:

Description

We noticed recently that using a local_date_time in tight loops was several times faster than using a ptime object. As these are both based largerly on the same template code this was a surprise. It appears this is caused by the implementation of the operater+=/-= and was wondering if there was any justification for the difference or if this was just an oversight.

    //.\boost\date_time\local_time\local_date_time.hpp
    local_date_time_base operator+=(const time_duration_type& td)
    {
      this->time_ = time_system_type::add_time_duration(this->time_,td);
      return *this;
    }
    //.\boost\date_time\time.hpp
    time_type operator+=(const time_duration_type& td)
    {
      time_ = (time_system::get_time_rep(date(), time_of_day() + td));
      return time_type(time_);
    }

It looks like the ptime implementation is doing extra work to split the ptime into date and time_duration components and if it is changed to follow a similar pattern to that used in the local time the performance is then indistinguishable.

    //.\boost\date_time\time.hpp
    time_type operator+=(const time_duration_type& td)
    {
      this->time_ = time_system::add_time_duration(this->time_, td);
      return time_type(time_);
    }

I can only think that maybe this was done to work around an issue and in which case should the same then be applied to the local time implementation?

email via nabble

Change History (0)

Note: See TracTickets for help on using tickets.