)]}'
{
  "commit": "739f2a25aea83fc3db119b85779b08fae465d0dd",
  "tree": "5f5c83079a19d9676d692b925e479154f2980079",
  "parents": [
    "c0c4f93940f86e8d108e84a60104bfda4aad66b3"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Mon Aug 29 20:40:30 2022 -0700"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Tue Sep 20 08:43:19 2022 -0700"
  },
  "message": "Parallelize block_jacobi_preconditioner\n\nUse ParallelFor to parallelize both versions of the\nblock Jacobi preconditioner. Also add benchmarks for\nvarying number of threads.\n\nBenchmark on M1 Mac Pro\n\nBefore:\n-----------------------------------------------------------------------------------------\nBenchmark                                               Time             CPU   Iterations\n-----------------------------------------------------------------------------------------\nBM_BlockSparseJacobiPreconditionerBA             44847927 ns     44788313 ns           16\nBM_BlockCRSJacobiPreconditionerBA                48772330 ns     48723571 ns           14\nBM_BlockSparseJacobiPreconditionerUnstructured   62385231 ns     62306818 ns           11\nBM_BlockCRSJacobiPreconditionerUnstructured      60671473 ns     60577727 ns           11\n\nAfter:\n--------------------------------------------------------------------------------------------\nBenchmark                                                  Time             CPU   Iterations\n--------------------------------------------------------------------------------------------\nBM_BlockSparseJacobiPreconditionerBA/1              53314862 ns     53302308 ns           13\nBM_BlockSparseJacobiPreconditionerBA/2              33601214 ns     33295143 ns           21\nBM_BlockSparseJacobiPreconditionerBA/4              28162794 ns     27224167 ns           30\nBM_BlockSparseJacobiPreconditionerBA/8              31402448 ns     28038760 ns           25\nBM_BlockSparseJacobiPreconditionerBA/16             30820813 ns     22625233 ns           30\nBM_BlockCRSJacobiPreconditionerBA/1                 60348194 ns     60332167 ns           12\nBM_BlockCRSJacobiPreconditionerBA/2                 35489954 ns     34782050 ns           20\nBM_BlockCRSJacobiPreconditionerBA/4                 23636360 ns     22547032 ns           31\nBM_BlockCRSJacobiPreconditionerBA/8                 31688798 ns     27857800 ns           25\nBM_BlockCRSJacobiPreconditionerBA/16                30806695 ns     20562516 ns           31\nBM_BlockSparseJacobiPreconditionerUnstructured/1    59793396 ns     59788583 ns           12\nBM_BlockSparseJacobiPreconditionerUnstructured/2    35192900 ns     34968900 ns           20\nBM_BlockSparseJacobiPreconditionerUnstructured/4    30171145 ns     28924480 ns           25\nBM_BlockSparseJacobiPreconditionerUnstructured/8    24982583 ns     23193172 ns           29\nBM_BlockSparseJacobiPreconditionerUnstructured/16   23370546 ns     18389694 ns           36\nBM_BlockCRSJacobiPreconditionerUnstructured/1       63204538 ns     63204545 ns           11\nBM_BlockCRSJacobiPreconditionerUnstructured/2       34466060 ns     34193429 ns           21\nBM_BlockCRSJacobiPreconditionerUnstructured/4       22712230 ns     20491147 ns           34\nBM_BlockCRSJacobiPreconditionerUnstructured/8       16701833 ns     16190395 ns           43\nBM_BlockCRSJacobiPreconditionerUnstructured/16      16762565 ns     12857304 ns           56\n\nNote that single threaded performance gets worse. Performance goes up for 2 and 4 threads\nand then essentially stalls.\n\nChange-Id: I96a5d2f719545e14c03d73e71c8c0564e8c1c729\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b452e7dc69f63450947ef61da3f5c799689d1ee9",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_jacobi_preconditioner.cc",
      "new_id": "b7ee0020e53a09964825e3c2c3e27d933085e0c5",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_jacobi_preconditioner.cc"
    },
    {
      "type": "modify",
      "old_id": "265b7d65e9bf094a3cfb8263ac974c78d53170f2",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_jacobi_preconditioner.h",
      "new_id": "a39ad125be6a9d6248157bb5cc20b0613df1d2aa",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_jacobi_preconditioner.h"
    },
    {
      "type": "modify",
      "old_id": "1d8ad10e7940704051ebef974586cadacef1cd5f",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_jacobi_preconditioner_benchmark.cc",
      "new_id": "d2508c4db3f9d1ccc0602901e84ddc15db237337",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_jacobi_preconditioner_benchmark.cc"
    },
    {
      "type": "modify",
      "old_id": "fa051e4a782140046c207360c96e8ae9d3423eb4",
      "old_mode": 33188,
      "old_path": "internal/ceres/block_jacobi_preconditioner_test.cc",
      "new_id": "eb3c9d0fe7dfe0c41ed07e717506942b56d5be67",
      "new_mode": 33188,
      "new_path": "internal/ceres/block_jacobi_preconditioner_test.cc"
    },
    {
      "type": "modify",
      "old_id": "bed4ad0ca8b947e7b3db4da30944b860f9a6f87f",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.cc",
      "new_id": "2215ab9a729e1a3bcd7043b4fd20161b1f7eaf59",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.cc"
    }
  ]
}
