Re: PATCH: Next 5291 speedup

From: Johnny Lee (typo_pl@hotmail.com)
Date: Wed Oct 01 2003 - 07:17:14 EDT

  • Next message: Dom Lachowicz: "Re: PATCH: Next 5291 speedup"

    Nice find. Your patch knocked import time from ~22 seconds to ~15 seconds on
    my box.

    I've got 2 patches which drop import time by another ~4 seconds altogether.

    Import time for the RTF spec is ~11 seconds now, followed by many seconds
    doing "Building document...".

    First patch, bug5291a.txt, knocks ~2 seconds from the import time.

    Changes:

    - Building upon Robert's changes, I changed the code from doing a linear
    search to do a binary search in UT_Vector::addItemSorted. The binary search
    will return the spot where the new item should be inserted.

    - The original linear search had a bug which would not insert an item after
    the only item in the vector (the vector always has a default empty AP with
    checlsum 0).

    - Made a common private method for doing binary searches in UT_Vector since
    the binarySearch method uses almost the same code.

    - Changed the createAP methods in pp_TableAttrProp from sorting the vector
    after each add to using the addItemSorted method. Ditched the sortTable
    method since code doesn't use it anymore.

    Second patch, bug5291b.txt, comes from looking at the profile output. I
    noticed the following:

    Module Statistics for abiword.exe
    ---------------------------------
        Time in module: 15302.935 millisecond
        Percent of time in module: 100.0%
        Functions in module: 11530
        Hits in module: 39325065
        Module function coverage: 7.1%

            Func Func+Child Hit
            Time % Time % Count Function
    ---------------------------------------------------------
           0.018 0.0 15302.866 100.0 1 PD_Document::readFromFile
           0.200 0.0 15251.752 99.7 1 IE_Imp_RTF::importFile
           0.011 0.0 15217.363 99.4 4 IE_Imp_RTF::_parseFile
         141.625 0.9 15216.265 99.4 105 IE_Imp_RTF::_parseText
          35.198 0.2 13122.018 85.7 90402 IE_Imp_RTF::ParseRTFKeyword
         105.277 0.7 12748.765 83.3 90403 IE_Imp_RTF::TranslateKeyword
    VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
           2.502 0.0 5296.926 34.6 1
    IE_Imp_RTF::HandleStyleDefinition
           1.599 0.0 5276.492 34.5 101 PD_Document::appendStyle
           4.997 0.0 5250.106 34.3 8282 pt_PieceTable::enumStyles
         766.147 5.0 4826.000 31.5 11406 UT_Vector::qsort
        1468.353 9.6 4059.150 26.5 5816405 compareStyleNames
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          31.705 0.2 3860.252 25.2 53563 IE_Imp_RTF::FlushStoredChars

    compareStyleNames is getting called a lot, along with several other
    style-related functions, including pt_PieceTable::enumStyles.

    Tracking down the code revealed the source as
    abi\src\text\ptbl\xp\pt_PT_Styles.cpp:

    //
    // Diagonostic on Append...
    //
                    const PD_Style * pdStyle = NULL;
                    const char * psdName =NULL;
                    UT_uint32 i = 0;
                    for(i=0; i<getStyleCount(); i++)
                    {
                            enumStyles(i,&psdName,&pdStyle);
                            xxx_UT_DEBUGMSG(("SEVIOR: Found %d style name %s \n",i,psdName));
                    }

    I wrapped this code in a #ifdef DEBUG and import time dropped by another 2
    seconds.

    J

    >From: Robert Wilhelm <robert.wilhelm@gmx.net>
    >To: AbiWord <abiword-dev@abisource.com>
    >Subject: PATCH: Next 5291 speedup
    >Date: Tue, 30 Sep 2003 20:42:38 +0200
    >
    >After Johnny Lees cool checksum and binary search patch, I profiled
    >abiword again and we spent lot of time in qsort. See following call
    >tree:
    >
    >percent num
    >cumulative calls
    >28.15 21952 addIfUniqueAP
    >27.46 5120 addAP
    > qsort
    >12.80 72M compareAP
    >4.34 149M ppAttrProp:GetCheckSum
    >
    >As m_vecTableSorted is already sorted I changed addAP to
    >just use a linear search and insert the new AP at the right place.
    >Now addIfUniqueAP does no longer show up on the profile radar,
    >and the time for importing the RTF spec decreased from 55s to 49s on my
    >machine.
    >
    >Robert
    ><< AP.patch >>

    _________________________________________________________________
    Instant message with integrated webcam using MSN Messenger 6.0. Try it now
    FREE! http://msnmessenger-download.com







    This archive was generated by hypermail 2.1.4 : Wed Oct 01 2003 - 07:32:37 EDT