)]}'
{
  "commit": "b158515089a85be8425db66ed43546605f86a00e",
  "tree": "1e88ea96569aa49f06b970d0936e01daf44860d2",
  "parents": [
    "2fd81de12d619f8a32769a6775dc8cb06355aa70"
  ],
  "author": {
    "name": "Dmitriy Korchemkin",
    "email": "dmitriy.korchemkin@gmail.com",
    "time": "Sun Nov 27 21:35:44 2022 +0300"
  },
  "committer": {
    "name": "Dmitriy Korchemkin",
    "email": "dmitriy.korchemkin@gmail.com",
    "time": "Sat Dec 17 02:52:27 2022 +0300"
  },
  "message": "Parallel operations on vectors\n\nMain focus of this change is to parallelize remaining operations (most of them\nare operations on vectors) in code-path utilized with iterative Schur\ncomplement.\n\nParallelization is handled using lazy evaluation of Eigen expressions.\n\nOn linux pc with intel 8176 processor parallelization of vector operations has\nthe following effect:\n\nRunning ./bin/parallel_vector_operations_benchmark\nRun on (112 X 3200.32 MHz CPU s)\nCPU Caches:\n  L1 Data 32 KiB (x56)\n  L1 Instruction 32 KiB (x56)\n  L2 Unified 1024 KiB (x56)\n  L3 Unified 39424 KiB (x2)\nLoad Average: 3.30, 8.41, 11.82\n-----------------------------------\nBenchmark                      Time\n-----------------------------------\nSetZero                 10009532 ns\nSetZeroParallel/1       10024139 ns\n...\nSetZeroParallel/16        877606 ns\n\nNegate                   4978856 ns\nNegateParallel/1         5145413 ns\n...\nNegateParallel/16         721823 ns\n\nAssign                  10731408 ns\nAssignParallel/1        10749944 ns\n...\nAssignParallel/16        1829381 ns\n\nD2X                     15214399 ns\nD2XParallel/1           15623245 ns\n...\nD2XParallel/16           2687060 ns\n\nDivideSqrt               8220050 ns\nDivideSqrtParallel/1     9088467 ns\n...\nDivideSqrtParallel/16     905569 ns\n\nClamp                    3502010 ns\nClampParallel/1          4507897 ns\n...\nClampParallel/16          759576 ns\n\nNorm                     4426782 ns\nNormParallel/1           4442805 ns\n...\nNormParallel/16           430290 ns\n\nDot                      9023276 ns\nDotParallel/1            9031304 ns\n...\nDotParallel/16           1157267 ns\n\nAxpby                   14608289 ns\nAxpbyParallel/1         14570825 ns\n...\nAxpbyParallel/16         2672220 ns\n-----------------------------------\n\nMulti-threading of vector operations in ISC and program evaluation results into\nthe following improvement:\n\nRunning ./bin/evaluation_benchmark\n--------------------------------------------------------------------------------------\nBenchmark                                                               this   2fd81de\n--------------------------------------------------------------------------------------\nResiduals\u003cproblem-13682-4456117-pre.txt\u003e/1                           4136 ms   4292 ms\nResiduals\u003cproblem-13682-4456117-pre.txt\u003e/2                           2919 ms   2670 ms\nResiduals\u003cproblem-13682-4456117-pre.txt\u003e/4                           2065 ms   2198 ms\nResiduals\u003cproblem-13682-4456117-pre.txt\u003e/8                           1458 ms   1609 ms\nResiduals\u003cproblem-13682-4456117-pre.txt\u003e/16                          1152 ms   1227 ms\n\nResidualsAndJacobian\u003cproblem-13682-4456117-pre.txt\u003e/1               19759 ms  20084 ms\nResidualsAndJacobian\u003cproblem-13682-4456117-pre.txt\u003e/2               10921 ms  10977 ms\nResidualsAndJacobian\u003cproblem-13682-4456117-pre.txt\u003e/4                6220 ms   6941 ms\nResidualsAndJacobian\u003cproblem-13682-4456117-pre.txt\u003e/8                3490 ms   4398 ms\nResidualsAndJacobian\u003cproblem-13682-4456117-pre.txt\u003e/16               2277 ms   3172 ms\n\nPlus\u003cproblem-13682-4456117-pre.txt\u003e/1                                 339 ms    322 ms\nPlus\u003cproblem-13682-4456117-pre.txt\u003e/2                                 220 ms\nPlus\u003cproblem-13682-4456117-pre.txt\u003e/4                                 128 ms\nPlus\u003cproblem-13682-4456117-pre.txt\u003e/8                                78.0 ms\nPlus\u003cproblem-13682-4456117-pre.txt\u003e/16                               49.8 ms\n\nISCRightMultiplyAndAccumulate\u003cproblem-13682-4456117-pre.txt\u003e/1       2434 ms   2478 ms\nISCRightMultiplyAndAccumulate\u003cproblem-13682-4456117-pre.txt\u003e/2       2706 ms   2688 ms\nISCRightMultiplyAndAccumulate\u003cproblem-13682-4456117-pre.txt\u003e/4       1430 ms   1548 ms\nISCRightMultiplyAndAccumulate\u003cproblem-13682-4456117-pre.txt\u003e/8        742 ms    883 ms\nISCRightMultiplyAndAccumulate\u003cproblem-13682-4456117-pre.txt\u003e/16       438 ms    555 ms\n\nISCRightMultiplyAndAccumulateDiag\u003cproblem-13682-4456117-pre.txt\u003e/1   2438 ms   2481 ms\nISCRightMultiplyAndAccumulateDiag\u003cproblem-13682-4456117-pre.txt\u003e/2   2565 ms   2790 ms\nISCRightMultiplyAndAccumulateDiag\u003cproblem-13682-4456117-pre.txt\u003e/4   1434 ms   1551 ms\nISCRightMultiplyAndAccumulateDiag\u003cproblem-13682-4456117-pre.txt\u003e/8    765 ms    892 ms\nISCRightMultiplyAndAccumulateDiag\u003cproblem-13682-4456117-pre.txt\u003e/16   435 ms    559 ms\n\nJacobianSquaredColumnNorm\u003cproblem-13682-4456117-pre.txt\u003e/1           1278 ms\nJacobianSquaredColumnNorm\u003cproblem-13682-4456117-pre.txt\u003e/2           1555 ms\nJacobianSquaredColumnNorm\u003cproblem-13682-4456117-pre.txt\u003e/4            833 ms\nJacobianSquaredColumnNorm\u003cproblem-13682-4456117-pre.txt\u003e/8            459 ms\nJacobianSquaredColumnNorm\u003cproblem-13682-4456117-pre.txt\u003e/16           250 ms\n\nJacobianScaleColumns\u003cproblem-13682-4456117-pre.txt\u003e/1                1468 ms\nJacobianScaleColumns\u003cproblem-13682-4456117-pre.txt\u003e/2                1871 ms\nJacobianScaleColumns\u003cproblem-13682-4456117-pre.txt\u003e/4                 957 ms\nJacobianScaleColumns\u003cproblem-13682-4456117-pre.txt\u003e/8                 528 ms\nJacobianScaleColumns\u003cproblem-13682-4456117-pre.txt\u003e/16                294 ms\n\nEnd-to-end improvements with bundle_adjuster invoked with\n./bin/bundle_adjuster --num_threads 28 --num_iterations 40 \\\n                      --linear_solver iterative_schur \\\n                      --preconditioner jacobi --input\n---------------------------------------------\nProblem                         this  2fd81de\n---------------------------------------------\nproblem-13682-4456117-pre.txt  508.6    892.7\nproblem-1778-993923-pre.txt    763.8   1129.9\nproblem-1723-156502-pre.txt      6.3     14.4\nproblem-356-226730-pre.txt      76.3    116.2\nproblem-257-65132-pre.txt       38.6     52.0\n\nChange-Id: Ie31cc5015f13fa479c16ffb5ce48c9b880990d49\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1e6a699511e943c8e3e6f2b23a009eca8fa8a014",
      "old_mode": 33188,
      "old_path": "internal/ceres/CMakeLists.txt",
      "new_id": "23dbbd686be86c74ce5e9377aa3f894f93a4a806",
      "new_mode": 33188,
      "new_path": "internal/ceres/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "459d70935dc4a5c79a1ce142a6a776c53afb0dd7",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_sparse_matrix.cc",
      "new_id": "c81ea392f0c4ac2524e5e3a85d5e4452ba1d2f9d",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_sparse_matrix.cc"
    },
    {
      "type": "modify",
      "old_id": "72b1d689de48b117144640493a7474e4b1f05268",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_sparse_matrix.h",
      "new_id": "ed3146f7f03b4131da26660aa74195157ebeb23e",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "6533a803b4dba66a20cad309f49bbac0a90441a6",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_sparse_matrix_test.cc",
      "new_id": "0529a2db26f64089eb928cbda192fd28dda4ae73",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_sparse_matrix_test.cc"
    },
    {
      "type": "modify",
      "old_id": "524356af7b8033a90738d8bf72083606f4106854",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.cc",
      "new_id": "a1a3c6ee2f15545df5ea30e4aca5c2004b420efe",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "0c3581b9c4fa5ca20f13bc0fd78e9015fcf94bec",
      "old_mode": 33188,
      "old_path": "internal/ceres/conjugate_gradients_solver.h",
      "new_id": "7da63c0d896138921b6c9176acf3f511b271375e",
      "new_mode": 33188,
      "new_path": "internal/ceres/conjugate_gradients_solver.h"
    },
    {
      "type": "modify",
      "old_id": "985eac0cd8506e32a51c5ef7edfd3f1a7e4b24ea",
      "old_mode": 33188,
      "old_path": "internal/ceres/cuda_vector.h",
      "new_id": "34f39473bc99dcacdcbf51d44868236ab9be9bea",
      "new_mode": 33188,
      "new_path": "internal/ceres/cuda_vector.h"
    },
    {
      "type": "modify",
      "old_id": "5bcf49db449d5ccb3ce2baa9d3164a457e749ea7",
      "old_mode": 33188,
      "old_path": "internal/ceres/eigen_vector_ops.h",
      "new_id": "91f2946038fb7776eadddf8441a6ec30318f38ee",
      "new_mode": 33188,
      "new_path": "internal/ceres/eigen_vector_ops.h"
    },
    {
      "type": "modify",
      "old_id": "6f0591edd08d887d966e4cbff40168e794b836d2",
      "old_mode": 33188,
      "old_path": "internal/ceres/evaluation_benchmark.cc",
      "new_id": "be784c20c96ef46af687c019fcea1a1a3027b4cb",
      "new_mode": 33188,
      "new_path": "internal/ceres/evaluation_benchmark.cc"
    },
    {
      "type": "modify",
      "old_id": "4e3604881d98b3d37b69dc368e1abe24d648d4c5",
      "old_mode": 33188,
      "old_path": "internal/ceres/implicit_schur_complement.cc",
      "new_id": "dbba3a7591250c06f964a93edbec903bc68ba14e",
      "new_mode": 33188,
      "new_path": "internal/ceres/implicit_schur_complement.cc"
    },
    {
      "type": "modify",
      "old_id": "589a1d29877dea30e61a282ef08076d0cb51a483",
      "old_mode": 33188,
      "old_path": "internal/ceres/iterative_schur_complement_solver.cc",
      "new_id": "16b20a77766fc973ed300fe34081a01796e41ea3",
      "new_mode": 33188,
      "new_path": "internal/ceres/iterative_schur_complement_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "b32e13119d5b78e7cae1bcbe886afd8dea66c8f0",
      "old_mode": 33188,
      "old_path": "internal/ceres/levenberg_marquardt_strategy.cc",
      "new_id": "76e73b449488cbcb097d7a62eea8a82e68c2a794",
      "new_mode": 33188,
      "new_path": "internal/ceres/levenberg_marquardt_strategy.cc"
    },
    {
      "type": "modify",
      "old_id": "2b014a6093af4f9e9ed048380631f1e06729e592",
      "old_mode": 33188,
      "old_path": "internal/ceres/levenberg_marquardt_strategy.h",
      "new_id": "bc6aae3f30bf345b86f0855b9938e7a65f573256",
      "new_mode": 33188,
      "new_path": "internal/ceres/levenberg_marquardt_strategy.h"
    },
    {
      "type": "modify",
      "old_id": "d4ba708689c5638bae46b0d3ad52218b5974278b",
      "old_mode": 33188,
      "old_path": "internal/ceres/minimizer.h",
      "new_id": "b7a4df7035f3d8ef2c7b7bd17a4cc75602f7cff3",
      "new_mode": 33188,
      "new_path": "internal/ceres/minimizer.h"
    },
    {
      "type": "modify",
      "old_id": "d91a195a6d3ac4bfd5973566cfad7b3886d9c61e",
      "old_mode": 33188,
      "old_path": "internal/ceres/parallel_for.h",
      "new_id": "26a4a793ec4c5a2acacb032e00eb1c649b48d9b0",
      "new_mode": 33188,
      "new_path": "internal/ceres/parallel_for.h"
    },
    {
      "type": "modify",
      "old_id": "cdf9966f5e47eb83baa6015fc3279112e0938188",
      "old_mode": 33188,
      "old_path": "internal/ceres/parallel_for_cxx.cc",
      "new_id": "3f47436597a3f8a8bb9ca192126d8bd43d76ea76",
      "new_mode": 33188,
      "new_path": "internal/ceres/parallel_for_cxx.cc"
    },
    {
      "type": "modify",
      "old_id": "073160992ec631d01924c98dc44f79f25f3ba360",
      "old_mode": 33188,
      "old_path": "internal/ceres/parallel_for_cxx.h",
      "new_id": "c33ae08eab3d12c82b45aaf24ed36486ba9a0b11",
      "new_mode": 33188,
      "new_path": "internal/ceres/parallel_for_cxx.h"
    },
    {
      "type": "modify",
      "old_id": "6974ab903d1664f4beb8bac42fbeac9f6413eacb",
      "old_mode": 33188,
      "old_path": "internal/ceres/parallel_for_test.cc",
      "new_id": "058b0a37a11910dc13568ff8b1b73d8ce1ead122",
      "new_mode": 33188,
      "new_path": "internal/ceres/parallel_for_test.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7180b54b1934e6a27905b469fefebac5713d9e3e",
      "new_mode": 33188,
      "new_path": "internal/ceres/parallel_vector_operations_benchmark.cc"
    },
    {
      "type": "modify",
      "old_id": "2ff99bf2b98c7a3f4941732334a67e4763cba505",
      "old_mode": 33188,
      "old_path": "internal/ceres/partitioned_matrix_view_test.cc",
      "new_id": "f9fee84fb20b323ee4f90a7e15d7e792905cb9d8",
      "new_mode": 33188,
      "new_path": "internal/ceres/partitioned_matrix_view_test.cc"
    },
    {
      "type": "modify",
      "old_id": "33174dea5d22cc2a8191b86427ef21b794331dd4",
      "old_mode": 33188,
      "old_path": "internal/ceres/preconditioner.cc",
      "new_id": "3e2bf4145286a61c0e2c6e95e9389c8e6a66208e",
      "new_mode": 33188,
      "new_path": "internal/ceres/preconditioner.cc"
    },
    {
      "type": "modify",
      "old_id": "2d343bd43efb77a305345ad158f1f946ac713a8c",
      "old_mode": 33188,
      "old_path": "internal/ceres/preconditioner.h",
      "new_id": "654ef60d6e4340cdde453dce0595fdddce7414d6",
      "new_mode": 33188,
      "new_path": "internal/ceres/preconditioner.h"
    },
    {
      "type": "modify",
      "old_id": "9d60ef90c45f39c903b20fd638496405aad64dca",
      "old_mode": 33188,
      "old_path": "internal/ceres/preprocessor.cc",
      "new_id": "286dfda401752b24eeb8f7f9f3696165638d9172",
      "new_mode": 33188,
      "new_path": "internal/ceres/preprocessor.cc"
    },
    {
      "type": "modify",
      "old_id": "9a4ecf3d82ee196559cdf75f0c6f7231b7282588",
      "old_mode": 33188,
      "old_path": "internal/ceres/program.cc",
      "new_id": "75497442c33ef41bf3f6286775fc722ada3ab3a9",
      "new_mode": 33188,
      "new_path": "internal/ceres/program.cc"
    },
    {
      "type": "modify",
      "old_id": "cb923aeaa214ecf1ae3d5b8e022a413f83947ff3",
      "old_mode": 33188,
      "old_path": "internal/ceres/program.h",
      "new_id": "7c0ceee89f7105cdf87f427ecec3374cec00d9ca",
      "new_mode": 33188,
      "new_path": "internal/ceres/program.h"
    },
    {
      "type": "modify",
      "old_id": "251a1770404ed7c66316fee3aa289e322031aa9a",
      "old_mode": 33188,
      "old_path": "internal/ceres/program_evaluator.h",
      "new_id": "cc4da9fef812a1a51f013c72671f9426dbf849ef",
      "new_mode": 33188,
      "new_path": "internal/ceres/program_evaluator.h"
    },
    {
      "type": "modify",
      "old_id": "40899bb766712981dc7e7fb4ae5f18a1b41d3741",
      "old_mode": 33188,
      "old_path": "internal/ceres/sparse_matrix.cc",
      "new_id": "584ac1da535a2c84ef1e7cb610ebdd401a6d04fa",
      "new_mode": 33188,
      "new_path": "internal/ceres/sparse_matrix.cc"
    },
    {
      "type": "modify",
      "old_id": "deab7b189c789618ce4a00346dcfd17caf5677cf",
      "old_mode": 33188,
      "old_path": "internal/ceres/sparse_matrix.h",
      "new_id": "6cc421be769c9edb63032b4c3400161c5f58f7d2",
      "new_mode": 33188,
      "new_path": "internal/ceres/sparse_matrix.h"
    },
    {
      "type": "modify",
      "old_id": "800b6769ed5c4abc7c23a20cc4e96f778862d996",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_minimizer.cc",
      "new_id": "47f7fd503464bb7286d535971abcda853765afa7",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_minimizer.cc"
    },
    {
      "type": "modify",
      "old_id": "84e783f5bd351536ab16b187b4d933fbc3074941",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_preprocessor.cc",
      "new_id": "67f928e9183e16ed65d90db1ab4eff4bdd7b89cf",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_preprocessor.cc"
    },
    {
      "type": "modify",
      "old_id": "334f06fe3e2a3711776db6f56311d81c894dc378",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_strategy.h",
      "new_id": "2be10f330920e7864c976d7d2a0d5627ad8e3921",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_strategy.h"
    }
  ]
}
