[Interest] Qtcontainerbench std::vector vs QVector

Constantin Makshin cmakshin at gmail.com
Fri Jul 24 08:57:19 CEST 2015


Well, after looking at the code I can say that the was you wrote this
benchmark "abuses" the QVector's copy-on-write semantic, making it
somewhat biased towards std::vector — you use only non-const versions of
QVector::begin(), QVector::end() and indexing methods. That leads to a
lot of [obviously non-free] checks for sharing and possible detachment.

A few modifications (see the attachment) made the difference in
read-only access negligible, in some tests QVector gave slightly better
results than std::vector. QVector_fwd_it became more than 2x faster.

The results, supposed to be displayed with a monospace font, are below.
I reordered them to make it easier to compare how two containers behave
in the same conditions.
g++ 4.9.2 on a Debian GNU/Linux desktop with Intel Core i5-3570 3.4 GHz

Test                 # of it.    Original        Modified
-------------------------------------------------------------
stdvector_fwd_it            5    0.0908203125    0.08984375
QVector_fwd_it              5    0.185546875     0.0888671875

stdvector_fwd_it           10    0.078125        0.0771484375
QVector_fwd_it             10    0.169921875     0.08203125

stdvector_fwd_it           20    0.06640625      0.0693359375
QVector_fwd_it             20    0.15625         0.0712890625

stdvector_fwd_it           40    0.0634765625    0.064453125
QVector_fwd_it             40    0.169921875     0.0634765625

stdvector_fwd_it           50    0.07421875      0.07421875
QVector_fwd_it             50    0.16015625      0.0771484375

stdvector_fwd_it           80    0.0712890625    0.072265625
QVector_fwd_it             80    0.15234375      0.0791015625

stdvector_fwd_it          100    0.0654296875    0.0654296875
QVector_fwd_it            100    0.1484375       0.0703125

stdvector_fwd_it         1000    0.0537109375    0.0537109375
QVector_fwd_it           1000    0.13671875      0.0537109375

stdvector_fwd_it        10000    0.052734375     0.052734375
QVector_fwd_it          10000    0.13671875      0.052734375

stdvector_fwd_it       100000    0.052734375     0.052734375
QVector_fwd_it         100000    0.13671875      0.052734375

stdvector_fwd_it      1000000    0.921875        0.921875
QVector_fwd_it        1000000    1.453125        0.921875

stdvector_fwd_idx           5    0.08984375      0.0908203125
QVector_fwd_idx             5    0.123046875     0.0888671875

stdvector_fwd_idx          10    0.083984375     0.083984375
QVector_fwd_idx            10    0.111328125     0.0888671875

stdvector_fwd_idx          20    0.0810546875    0.107421875
QVector_fwd_idx            20    0.099609375     0.0830078125

stdvector_fwd_idx          40    0.0927734375    0.0927734375
QVector_fwd_idx            40    0.111328125     0.08203125

stdvector_fwd_idx          50    0.0869140625    0.087890625
QVector_fwd_idx            50    0.103515625     0.0908203125

stdvector_fwd_idx          80    0.0791015625    0.0791015625
QVector_fwd_idx            80    0.0986328125    0.0849609375

stdvector_fwd_idx         100    0.072265625     0.0732421875
QVector_fwd_idx           100    0.0927734375    0.078125

stdvector_fwd_idx        1000    0.056640625     0.056640625
QVector_fwd_idx          1000    0.08203125      0.0595703125

stdvector_fwd_idx       10000    0.0556640625    0.0556640625
QVector_fwd_idx         10000    0.0810546875    0.060546875

stdvector_fwd_idx      100000    0.0546875       0.0546875
QVector_fwd_idx        100000    0.080078125     0.05859375

stdvector_fwd_idx     1000000    0.9375          0.9375
QVector_fwd_idx       1000000    1.03125         0.953125

stdvector_pushback          5    7               6.25
QVector_pushback            5    9               8.25

stdvector_pushback         10    6.625           5.6875
QVector_pushback           10    9.125           8.5

stdvector_pushback         20    6.3125          5.4375
QVector_pushback           20    9.25            8.5

stdvector_pushback         40    6               5.5
QVector_pushback           40    9.5             8.875

stdvector_pushback         50    5.5             5
QVector_pushback           50    9.25            8.375

stdvector_pushback         80    5.75            5.1875
QVector_pushback           80    9.625           8.75

stdvector_pushback        100    5.3125          4.75
QVector_pushback          100    9.25            8.375

stdvector_pushback       1000    4.8125          4.1875
QVector_pushback         1000    8.875           8

stdvector_pushback      10000    5.4375          4.9375
QVector_pushback        10000    9.125           8.75

stdvector_pushback     100000    6.875           6.125
QVector_pushback       100000    10              9.75

stdvector_pushback    1000000    63              58
QVector_pushback      1000000    97              96
-------------------------------------------------------------


On 07/23/2015 08:51 AM, Gunnar Roth wrote:
> 
>> Am 23.07.2015 um 07:00 schrieb Constantin Makshin <cmakshin at gmail.com>:
>>
>> "vector" branch is identical to "master“.
> Not anymore ;-) 
> Thanks for the information.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: qtcontainerbench.diff
Type: text/x-patch
Size: 3304 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150724/3bf2aef1/attachment.bin>
-------------- next part --------------
Test                 # of it.    Original        Modified
-------------------------------------------------------------
stdvector_fwd_it            5    0.0908203125    0.08984375
QVector_fwd_it              5    0.185546875     0.0888671875

stdvector_fwd_it           10    0.078125        0.0771484375
QVector_fwd_it             10    0.169921875     0.08203125

stdvector_fwd_it           20    0.06640625      0.0693359375
QVector_fwd_it             20    0.15625         0.0712890625

stdvector_fwd_it           40    0.0634765625    0.064453125
QVector_fwd_it             40    0.169921875     0.0634765625

stdvector_fwd_it           50    0.07421875      0.07421875
QVector_fwd_it             50    0.16015625      0.0771484375

stdvector_fwd_it           80    0.0712890625    0.072265625
QVector_fwd_it             80    0.15234375      0.0791015625

stdvector_fwd_it          100    0.0654296875    0.0654296875
QVector_fwd_it            100    0.1484375       0.0703125

stdvector_fwd_it         1000    0.0537109375    0.0537109375
QVector_fwd_it           1000    0.13671875      0.0537109375

stdvector_fwd_it        10000    0.052734375     0.052734375
QVector_fwd_it          10000    0.13671875      0.052734375

stdvector_fwd_it       100000    0.052734375     0.052734375
QVector_fwd_it         100000    0.13671875      0.052734375

stdvector_fwd_it      1000000    0.921875        0.921875
QVector_fwd_it        1000000    1.453125        0.921875

stdvector_fwd_idx           5    0.08984375      0.0908203125
QVector_fwd_idx             5    0.123046875     0.0888671875

stdvector_fwd_idx          10    0.083984375     0.083984375
QVector_fwd_idx            10    0.111328125     0.0888671875

stdvector_fwd_idx          20    0.0810546875    0.107421875
QVector_fwd_idx            20    0.099609375     0.0830078125

stdvector_fwd_idx          40    0.0927734375    0.0927734375
QVector_fwd_idx            40    0.111328125     0.08203125

stdvector_fwd_idx          50    0.0869140625    0.087890625
QVector_fwd_idx            50    0.103515625     0.0908203125

stdvector_fwd_idx          80    0.0791015625    0.0791015625
QVector_fwd_idx            80    0.0986328125    0.0849609375

stdvector_fwd_idx         100    0.072265625     0.0732421875
QVector_fwd_idx           100    0.0927734375    0.078125

stdvector_fwd_idx        1000    0.056640625     0.056640625
QVector_fwd_idx          1000    0.08203125      0.0595703125

stdvector_fwd_idx       10000    0.0556640625    0.0556640625
QVector_fwd_idx         10000    0.0810546875    0.060546875

stdvector_fwd_idx      100000    0.0546875       0.0546875
QVector_fwd_idx        100000    0.080078125     0.05859375

stdvector_fwd_idx     1000000    0.9375          0.9375
QVector_fwd_idx       1000000    1.03125         0.953125

stdvector_pushback          5    7               6.25
QVector_pushback            5    9               8.25

stdvector_pushback         10    6.625           5.6875
QVector_pushback           10    9.125           8.5

stdvector_pushback         20    6.3125          5.4375
QVector_pushback           20    9.25            8.5

stdvector_pushback         40    6               5.5
QVector_pushback           40    9.5             8.875

stdvector_pushback         50    5.5             5
QVector_pushback           50    9.25            8.375

stdvector_pushback         80    5.75            5.1875
QVector_pushback           80    9.625           8.75

stdvector_pushback        100    5.3125          4.75
QVector_pushback          100    9.25            8.375

stdvector_pushback       1000    4.8125          4.1875
QVector_pushback         1000    8.875           8

stdvector_pushback      10000    5.4375          4.9375
QVector_pushback        10000    9.125           8.75

stdvector_pushback     100000    6.875           6.125
QVector_pushback       100000    10              9.75

stdvector_pushback    1000000    63              58
QVector_pushback      1000000    97              96
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150724/3bf2aef1/attachment.sig>


More information about the Interest mailing list