)]}'
{
  "commit": "ae7b6a3b779c4d6de96f59efbfed0b899c3ff6df",
  "tree": "6c1195a807d207f75bcf5b201fde66e785af127e",
  "parents": [
    "55cf84b0778c382967b46f3f2ffd402fba005a26"
  ],
  "author": {
    "name": "Xiangdong Ji",
    "email": "xiangdong.ji@arm.com",
    "time": "Sat Feb 22 08:12:54 2020 +0000"
  },
  "committer": {
    "name": "Cherry Zhang",
    "email": "cherryyz@google.com",
    "time": "Fri Aug 28 16:40:41 2020 +0000"
  },
  "message": "math/big: tune addVW/subVW performance on arm64\n\nAdd an optimization for addVW and subVW over large-sized vectors, it switches\nfrom add/sub with carry to copy the rest of the vector when we are done with\ncarries. Consistent performance improvement are observed on various arm64\nmachines.\n\nAdd additional tests and benchmarks to increase the test coverage.\nTestFunVWExt:\n  Testing with various types of input vector, using the result from go-version\n  addVW/subVW as golden reference.\nBenchmarkAddVWext and BenchmarkSubVWext:\n  Benchmarking using input vector having all 1s or all 0s, for evaluating the\n  overhead of worst case.\n\n1. Perf. comparison over randomly generated input vectors:\n\nServer 1:\nname             old time/op    new time/op    delta\nAddVW/1            12.3ns ± 3%    12.0ns ± 0%    -2.60%  (p\u003d0.001 n\u003d10+8)\nAddVW/2            12.5ns ± 2%    12.3ns ± 0%    -1.84%  (p\u003d0.001 n\u003d10+8)\nAddVW/3            12.6ns ± 2%    12.3ns ± 0%    -1.91%  (p\u003d0.009 n\u003d10+10)\nAddVW/4            13.1ns ± 3%    12.7ns ± 0%    -2.98%  (p\u003d0.006 n\u003d10+8)\nAddVW/5            14.4ns ± 1%    13.9ns ± 0%    -3.81%  (p\u003d0.000 n\u003d10+10)\nAddVW/10           11.7ns ± 0%    11.7ns ± 0%      ~     (all equal)\nAddVW/100          47.8ns ± 0%    29.9ns ± 2%   -37.38%  (p\u003d0.000 n\u003d10+9)\nAddVW/1000          446ns ± 0%     207ns ± 0%   -53.59%  (p\u003d0.000 n\u003d10+10)\nAddVW/10000        4.35µs ± 1%    2.92µs ± 0%   -32.85%  (p\u003d0.000 n\u003d10+10)\nAddVW/100000       43.6µs ± 0%    29.7µs ± 0%   -31.92%  (p\u003d0.000 n\u003d8+10)\nSubVW/1            12.6ns ± 0%    12.3ns ± 2%    -2.22%  (p\u003d0.000 n\u003d7+10)\nSubVW/2            12.7ns ± 0%    12.6ns ± 1%    -0.39%  (p\u003d0.046 n\u003d8+10)\nSubVW/3            12.7ns ± 1%    12.6ns ± 1%      ~     (p\u003d0.410 n\u003d10+10)\nSubVW/4            13.3ns ± 3%    13.1ns ± 3%      ~     (p\u003d0.072 n\u003d10+10)\nSubVW/5            14.2ns ± 0%    14.1ns ± 1%    -0.63%  (p\u003d0.046 n\u003d8+10)\nSubVW/10           11.7ns ± 0%    11.7ns ± 0%      ~     (all equal)\nSubVW/100          47.8ns ± 0%    33.1ns ±19%   -30.71%  (p\u003d0.000 n\u003d10+10)\nSubVW/1000          446ns ± 0%     207ns ± 0%   -53.59%  (p\u003d0.000 n\u003d10+10)\nSubVW/10000        4.33µs ± 1%    2.92µs ± 0%   -32.66%  (p\u003d0.000 n\u003d10+6)\nSubVW/100000       43.4µs ± 0%    29.6µs ± 0%   -31.90%  (p\u003d0.000 n\u003d10+9)\n\nServer 2:\nname             old time/op    new time/op    delta\nAddVW/1            5.49ns ± 0%    5.53ns ± 2%     ~     (p\u003d1.000 n\u003d9+10)\nAddVW/2            5.96ns ± 2%    5.92ns ± 1%   -0.69%  (p\u003d0.039 n\u003d10+10)\nAddVW/3            6.72ns ± 0%    6.73ns ± 0%     ~     (p\u003d0.078 n\u003d10+10)\nAddVW/4            7.07ns ± 0%    6.75ns ± 2%   -4.55%  (p\u003d0.000 n\u003d10+10)\nAddVW/5            8.14ns ± 0%    8.17ns ± 0%   +0.46%  (p\u003d0.003 n\u003d8+8)\nAddVW/10           10.0ns ± 0%    10.1ns ± 1%   +0.70%  (p\u003d0.003 n\u003d10+10)\nAddVW/100          43.0ns ± 0%    33.5ns ± 0%  -22.09%  (p\u003d0.000 n\u003d9+9)\nAddVW/1000          394ns ± 0%     278ns ± 0%  -29.44%  (p\u003d0.000 n\u003d10+10)\nAddVW/10000        4.18µs ± 0%    3.14µs ± 0%  -24.81%  (p\u003d0.000 n\u003d8+8)\nAddVW/100000       68.3µs ± 3%    62.1µs ± 5%   -9.13%  (p\u003d0.000 n\u003d10+10)\nSubVW/1            5.37ns ± 2%    5.42ns ± 1%     ~     (p\u003d0.990 n\u003d10+10)\nSubVW/2            5.89ns ± 0%    5.92ns ± 1%   +0.58%  (p\u003d0.000 n\u003d8+10)\nSubVW/3            6.64ns ± 1%    6.82ns ± 3%   +2.63%  (p\u003d0.000 n\u003d9+10)\nSubVW/4            7.17ns ± 0%    6.69ns ± 2%   -6.74%  (p\u003d0.000 n\u003d10+9)\nSubVW/5            8.22ns ± 0%    8.18ns ± 0%   -0.46%  (p\u003d0.001 n\u003d8+9)\nSubVW/10           10.0ns ± 1%    10.1ns ± 1%     ~     (p\u003d0.341 n\u003d10+10)\nSubVW/100          43.0ns ± 0%    33.5ns ± 0%  -22.09%  (p\u003d0.000 n\u003d7+10)\nSubVW/1000          394ns ± 0%     278ns ± 0%  -29.44%  (p\u003d0.000 n\u003d10+10)\nSubVW/10000        4.18µs ± 0%    3.15µs ± 0%  -24.62%  (p\u003d0.000 n\u003d9+9)\nSubVW/100000       67.7µs ± 4%    62.4µs ± 2%   -7.92%  (p\u003d0.000 n\u003d10+10)\n\n2. Perf. comparison over input vectors of all 1s or all 0s\n\nServer 1:\nname             old time/op    new time/op    delta\nAddVWext/1         12.6ns ± 0%    12.0ns ± 0%    -4.76%  (p\u003d0.000 n\u003d6+10)\nAddVWext/2         12.7ns ± 0%    12.4ns ± 1%    -2.52%  (p\u003d0.000 n\u003d10+10)\nAddVWext/3         12.7ns ± 0%    12.4ns ± 0%    -2.36%  (p\u003d0.000 n\u003d9+7)\nAddVWext/4         13.2ns ± 4%    12.7ns ± 0%    -3.71%  (p\u003d0.001 n\u003d10+9)\nAddVWext/5         14.6ns ± 0%    13.9ns ± 0%    -4.79%  (p\u003d0.000 n\u003d10+8)\nAddVWext/10        11.7ns ± 0%    11.7ns ± 0%      ~     (all equal)\nAddVWext/100       47.8ns ± 0%    47.4ns ± 0%    -0.84%  (p\u003d0.000 n\u003d10+10)\nAddVWext/1000       446ns ± 0%     399ns ± 0%   -10.54%  (p\u003d0.000 n\u003d10+10)\nAddVWext/10000     4.34µs ± 1%    3.90µs ± 0%   -10.12%  (p\u003d0.000 n\u003d10+10)\nAddVWext/100000    43.9µs ± 1%    39.4µs ± 0%   -10.18%  (p\u003d0.000 n\u003d10+10)\nSubVWext/1         12.6ns ± 0%    12.3ns ± 2%    -2.70%  (p\u003d0.000 n\u003d7+10)\nSubVWext/2         12.6ns ± 1%    12.6ns ± 2%      ~     (p\u003d0.234 n\u003d10+10)\nSubVWext/3         12.7ns ± 0%    12.6ns ± 2%    -0.71%  (p\u003d0.033 n\u003d10+10)\nSubVWext/4         13.4ns ± 0%    13.1ns ± 3%    -2.01%  (p\u003d0.006 n\u003d8+10)\nSubVWext/5         14.2ns ± 0%    14.1ns ± 1%    -0.85%  (p\u003d0.003 n\u003d10+10)\nSubVWext/10        11.7ns ± 0%    11.7ns ± 0%      ~     (all equal)\nSubVWext/100       47.8ns ± 0%    47.4ns ± 0%    -0.84%  (p\u003d0.000 n\u003d10+10)\nSubVWext/1000       446ns ± 0%     399ns ± 0%   -10.54%  (p\u003d0.000 n\u003d10+10)\nSubVWext/10000     4.33µs ± 1%    3.90µs ± 0%   -10.02%  (p\u003d0.000 n\u003d10+10)\nSubVWext/100000    43.5µs ± 0%    39.5µs ± 1%    -9.16%  (p\u003d0.000 n\u003d7+10)\n\nServer 2:\nname             old time/op    new time/op    delta\nAddVWext/1         5.48ns ± 0%    5.43ns ± 1%   -0.97%  (p\u003d0.000 n\u003d9+9)\nAddVWext/2         5.99ns ± 2%    5.93ns ± 1%     ~     (p\u003d0.054 n\u003d10+10)\nAddVWext/3         6.74ns ± 0%    6.79ns ± 1%   +0.80%  (p\u003d0.000 n\u003d9+10)\nAddVWext/4         7.18ns ± 0%    7.21ns ± 1%   +0.36%  (p\u003d0.034 n\u003d9+10)\nAddVWext/5         7.93ns ± 3%    8.18ns ± 0%   +3.18%  (p\u003d0.000 n\u003d10+8)\nAddVWext/10        10.0ns ± 0%    10.1ns ± 1%   +0.60%  (p\u003d0.011 n\u003d10+10)\nAddVWext/100       43.0ns ± 0%    47.7ns ± 0%  +10.93%  (p\u003d0.000 n\u003d9+10)\nAddVWext/1000       394ns ± 0%     399ns ± 0%   +1.27%  (p\u003d0.000 n\u003d10+10)\nAddVWext/10000     4.18µs ± 0%    4.50µs ± 0%   +7.73%  (p\u003d0.000 n\u003d9+10)\nAddVWext/100000    67.6µs ± 2%    68.4µs ± 3%     ~     (p\u003d0.139 n\u003d9+8)\nSubVWext/1         5.46ns ± 1%    5.43ns ± 0%   -0.55%  (p\u003d0.002 n\u003d9+9)\nSubVWext/2         5.89ns ± 0%    5.93ns ± 1%   +0.68%  (p\u003d0.000 n\u003d8+10)\nSubVWext/3         6.72ns ± 1%    6.79ns ± 1%   +1.07%  (p\u003d0.000 n\u003d10+10)\nSubVWext/4         6.98ns ± 1%    7.21ns ± 0%   +3.25%  (p\u003d0.000 n\u003d10+10)\nSubVWext/5         8.22ns ± 0%    7.99ns ± 3%   -2.83%  (p\u003d0.000 n\u003d8+10)\nSubVWext/10        10.0ns ± 1%    10.1ns ± 1%     ~     (p\u003d0.239 n\u003d10+10)\nSubVWext/100       43.0ns ± 0%    47.7ns ± 0%  +10.93%  (p\u003d0.000 n\u003d8+10)\nSubVWext/1000       394ns ± 0%     399ns ± 0%   +1.27%  (p\u003d0.000 n\u003d10+10)\nSubVWext/10000     4.18µs ± 0%    4.51µs ± 0%   +7.86%  (p\u003d0.000 n\u003d8+8)\nSubVWext/100000    68.3µs ± 2%    68.0µs ± 3%     ~     (p\u003d0.515 n\u003d10+8)\n\nChange-Id: I134a5194b8a2deaaebbaa2b771baf72846971d58\nReviewed-on: https://go-review.googlesource.com/c/go/+/229739\nReviewed-by: Cherry Zhang \u003ccherryyz@google.com\u003e\nReviewed-by: Robert Griesemer \u003cgri@golang.org\u003e\nRun-TryBot: Cherry Zhang \u003ccherryyz@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "18e513e2c38d5c7fa542be5355a35b777699a84e",
      "old_mode": 33188,
      "old_path": "src/math/big/arith_arm64.s",
      "new_id": "da6e408e19f726c76d3a27eb804849fcb2034947",
      "new_mode": 33188,
      "new_path": "src/math/big/arith_arm64.s"
    },
    {
      "type": "modify",
      "old_id": "e2b982c89c256be3c57c9acb6350dae938868de0",
      "old_mode": 33188,
      "old_path": "src/math/big/arith_test.go",
      "new_id": "fc205934c5ca92f568c60a1f2a347e3746efaa33",
      "new_mode": 33188,
      "new_path": "src/math/big/arith_test.go"
    }
  ]
}
