Reduce copies involved in Jet operations

- Avoid copies in compound assignment operators (+=, -=, *=, /=)
- Add r-value overloads to +,-,*./ operators

Addition<3>/1000                                  +0.0382         +0.0382          2798          2905          2798          2905
Addition<10>/1000                                 -0.0009         -0.0009          4831          4827          4831          4827
Addition<15>/1000                                 -0.0011         -0.0010          8005          7996          8005          7996
Addition<25>/1000                                 +0.0014         +0.0014         13951         13970         13951         13970
Addition<32>/1000                                 +0.0010         +0.0009         13638         13651         13638         13651
Addition<200>/160                                 -0.1732         -0.1732         40301         33321         40300         33320
AdditionScalar<3>/1000                            +0.0016         +0.0016          2493          2497          2493          2497
AdditionScalar<10>/1000                           +0.0060         +0.0060          2701          2718          2701          2717
AdditionScalar<15>/1000                           -0.0024         -0.0024          2598          2592          2598          2592
AdditionScalar<25>/1000                           -0.0038         -0.0038          3730          3716          3730          3716
AdditionScalar<32>/1000                           +0.0062         +0.0062          4137          4162          4137          4162
AdditionScalar<200>/160                           -0.5626         -0.5626         19355          8466         19355          8466
Subtraction<3>/1000                               -0.0011         -0.0012          3162          3158          3162          3158
Subtraction<10>/1000                              -0.0027         -0.0026          4982          4969          4982          4969
Subtraction<15>/1000                              -0.0112         -0.0112          7820          7733          7820          7733
Subtraction<25>/1000                              +0.0181         +0.0181         13088         13325         13088         13325
Subtraction<32>/1000                              -0.0007         -0.0007         14514         14505         14514         14504
Subtraction<200>/160                              -0.1668         -0.1668         44586         37148         44586         37147
SubtractionScalar<3>/1000                         -0.0028         -0.0028          2540          2533          2540          2533
SubtractionScalar<10>/1000                        -0.0024         -0.0024          2682          2676          2682          2676
SubtractionScalar<15>/1000                        -0.0023         -0.0023          2603          2597          2603          2597
SubtractionScalar<25>/1000                        -0.0018         -0.0018          3570          3563          3570          3563
SubtractionScalar<32>/1000                        -0.0012         -0.0012          4223          4218          4223          4218
SubtractionScalar<200>/160                        -0.5070         -0.5070         20375         10044         20375         10044
Multiplication<3>/1000                            -0.0543         -0.0544          6171          5836          6172          5836
Multiplication<10>/1000                           -0.0617         -0.0617         11860         11128         11860         11128
Multiplication<15>/1000                           -0.0106         -0.0106         17456         17271         17456         17271
Multiplication<25>/1000                           -0.0114         -0.0114         27204         26893         27204         26893
Multiplication<32>/1000                           -0.0125         -0.0125         32704         32293         32703         32293
Multiplication<200>/160                           -0.3849         -0.3849         60557         37246         60557         37246
MultiplicationLeftScalar<3>/1000                  +0.0005         +0.0005          3086          3088          3086          3088
MultiplicationLeftScalar<10>/1000                 -0.0008         -0.0008          4486          4483          4486          4483
MultiplicationLeftScalar<15>/1000                 -0.0010         -0.0010          5840          5834          5840          5834
MultiplicationLeftScalar<25>/1000                 -0.0047         -0.0047         11350         11297         11350         11298
MultiplicationLeftScalar<32>/1000                 -0.0014         -0.0014         13892         13873         13892         13873
MultiplicationLeftScalar<200>/160                 -0.2646         -0.2646         28124         20682         28124         20682
MultiplicationRightScalar<3>/1000                 +0.0024         +0.0025          3090          3098          3090          3098
MultiplicationRightScalar<10>/1000                +0.0008         +0.0009          4596          4600          4596          4600
MultiplicationRightScalar<15>/1000                -0.0033         -0.0033          5832          5812          5832          5812
MultiplicationRightScalar<25>/1000                -0.0005         -0.0005         11353         11347         11353         11347
MultiplicationRightScalar<32>/1000                +0.0043         +0.0043         14041         14102         14041         14102
MultiplicationRightScalar<200>/160                -0.2600         -0.2600         28104         20796         28104         20796
Division<3>/1000                                  -0.0006         -0.0006          8977          8972          8977          8972
Division<10>/1000                                 -0.0095         -0.0095         14613         14474         14613         14473
Division<15>/1000                                 -0.0081         -0.0081         23109         22922         23108         22922
Division<25>/1000                                 -0.0081         -0.0081         37292         36992         37292         36992
Division<32>/1000                                 -0.0234         -0.0234         41693         40718         41692         40717
Division<200>/160                                 -0.1306         -0.1306         44486         38677         44486         38677
DivisionLeftScalar<3>/1000                        -0.0080         -0.0080          6683          6630          6683          6630
DivisionLeftScalar<10>/1000                       -0.0018         -0.0018          9255          9239          9255          9238
DivisionLeftScalar<15>/1000                       -0.0011         -0.0011         12180         12166         12180         12166
DivisionLeftScalar<25>/1000                       +0.0060         +0.0060         22381         22515         22381         22516
DivisionLeftScalar<32>/1000                       -0.0016         -0.0016         20159         20126         20159         20126
DivisionLeftScalar<200>/160                       -0.2528         -0.2528         28773         21499         28772         21499
DivisionRightScalar<3>/1000                       -0.0006         -0.0006          3784          3782          3784          3782
DivisionRightScalar<10>/1000                      -0.0014         -0.0014          5699          5691          5699          5691
DivisionRightScalar<15>/1000                      -0.0009         -0.0009          7490          7484          7490          7484
DivisionRightScalar<25>/1000                      +0.0031         +0.0031         13751         13793         13751         13793
DivisionRightScalar<32>/1000                      -0.0006         -0.0006         16712         16702         16712         16702
DivisionRightScalar<200>/160                      -0.2532         -0.2532         28412         21217         28411         21217
MultiplyAndAdd<3>/1000                            -0.0191         -0.0191          4382          4299          4382          4299
MultiplyAndAdd<10>/1000                           -0.0060         -0.0060         10238         10176         10238         10176
MultiplyAndAdd<15>/1000                           -0.0053         -0.0053         11696         11634         11696         11634
MultiplyAndAdd<25>/1000                           -0.0171         -0.0171         19185         18858         19185         18858
MultiplyAndAdd<32>/1000                           +0.0070         +0.0070         23783         23951         23783         23951
MultiplyAndAdd<200>/160                           -0.1252         -0.1252         61470         53776         61469         53776

Change-Id: Ib366d5753ed4f398667766384e05389d45e0d444
2 files changed
tree: 68f9c8afe4a3c734b7ce8e103ef5a78a7e6fa11a
  1. bazel/
  2. cmake/
  3. config/
  4. data/
  5. docs/
  6. examples/
  7. include/
  8. internal/
  9. scripts/
  10. travis/
  11. .clang-format
  12. .gitignore
  13. .travis.yml
  14. BUILD
  15. CMakeLists.txt
  16. CONTRIBUTING.md
  17. LICENSE
  18. package.xml
  19. README.md
  20. WORKSPACE
README.md

Build Status

Ceres Solver

Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. It is a feature rich, mature and performant library which has been used in production at Google since 2010. Ceres Solver can solve two kinds of problems.

  1. Non-linear Least Squares problems with bounds constraints.
  2. General unconstrained optimization problems.

Please see ceres-solver.org for more information.