#ByteArrayExtensions
Hardware-accelerated Vectorized Memory Copy faster than the .NET Framework's Buffer.BlockCopy
and Array.Copy
for copies under 1024 bytes.
CoreClr Issue: "Array.Copy & Buffer.BlockCopy x2 to x3 slower < 1kB" https://github.com/dotnet/coreclr/issues/2430
##Performance
##Usage
Given
var src = byte[1024];
var dst = byte[1024];
var srcOffset = 64;
var dstOffset = 32;
var count = 64;
Rather than
Array.Copy(src, srcOffset, dst, dstOffset, count);
Or
Buffer.BlockCopy(src, srcOffset, dst, dstOffset, count);
Use
src.VectorizedCopy(srcOffset, dst, dstOffset, count);
##Benchmarking Results
8.5 hours to run
BenchmarkDotNet-Dev=v0.8.0.0+
OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz, ProcessorCount=8
HostCLR=MS.NET 4.0.30319.42000, Arch=64-bit [RyuJIT]
Type=MemCopyBench Mode=Throughput Platform=X64 Jit=RyuJit .NET=HostFramework toolchain=Classic Runtime=Clr Warmup=5 Target=10
Method | Len | AvrTime | StdDev | op/s | % Delta vs ArrayCopy |
---|---|---|---|---|---|
ArrayCopy | 0 | 4.3432 ns | 0.0825 ns | 230,324,244.88 | 0.0% |
BlockCopy | 0 | 4.8666 ns | 0.0886 ns | 205,545,857.61 | -10.8% |
VectorizedCopy | 0 | 2.0270 ns | 0.0346 ns | 493,472,059.76 | 114.3% |
ArrayCopy | 1 | 5.7284 ns | 0.0951 ns | 174,613,397.66 | 0.0% |
BlockCopy | 1 | 6.0099 ns | 0.0102 ns | 166,393,078.33 | -4.7% |
VectorizedCopy | 1 | 3.5840 ns | 0.0616 ns | 279,095,553.59 | 59.8% |
ArrayCopy | 2 | 5.8000 ns | 0.0925 ns | 172,457,750.22 | 0.0% |
BlockCopy | 2 | 5.8619 ns | 0.1000 ns | 170,641,279.28 | -1.1% |
VectorizedCopy | 2 | 3.8173 ns | 0.0027 ns | 261,962,919.83 | 51.9% |
ArrayCopy | 3 | 5.7231 ns | 0.1000 ns | 174,780,635.43 | 0.0% |
BlockCopy | 3 | 5.8703 ns | 0.1008 ns | 170,396,161.19 | -2.5% |
VectorizedCopy | 3 | 4.0668 ns | 0.0739 ns | 245,973,535.19 | 40.7% |
ArrayCopy | 4 | 5.8710 ns | 0.0208 ns | 170,332,048.11 | 0.0% |
BlockCopy | 4 | 5.9355 ns | 0.1026 ns | 168,528,148.03 | -1.1% |
VectorizedCopy | 4 | 3.5801 ns | 0.0603 ns | 279,400,369.43 | 64.0% |
ArrayCopy | 5 | 5.8673 ns | 0.0104 ns | 170,437,225.19 | 0.0% |
BlockCopy | 5 | 5.9407 ns | 0.1060 ns | 168,382,732.88 | -1.2% |
VectorizedCopy | 5 | 3.6774 ns | 0.0127 ns | 271,932,810.61 | 59.6% |
ArrayCopy | 6 | 5.9410 ns | 0.0978 ns | 168,365,533.85 | 0.0% |
BlockCopy | 6 | 6.1561 ns | 0.0152 ns | 162,442,647.10 | -3.5% |
VectorizedCopy | 6 | 4.1069 ns | 0.0139 ns | 243,496,948.01 | 44.6% |
ArrayCopy | 7 | 5.8682 ns | 0.0978 ns | 170,455,514.03 | 0.0% |
BlockCopy | 7 | 6.0837 ns | 0.1084 ns | 164,425,534.76 | -3.5% |
VectorizedCopy | 7 | 4.3471 ns | 0.0761 ns | 230,106,855.01 | 35.0% |
ArrayCopy | 8 | 5.7960 ns | 0.1014 ns | 172,584,514.72 | 0.0% |
BlockCopy | 8 | 5.9406 ns | 0.0969 ns | 168,375,832.85 | -2.4% |
VectorizedCopy | 8 | 3.6227 ns | 0.0597 ns | 276,111,777.08 | 60.0% |
ArrayCopy | 9 | 5.8628 ns | 0.0100 ns | 170,568,210.23 | 0.0% |
BlockCopy | 9 | 6.0097 ns | 0.0147 ns | 166,397,469.33 | -2.4% |
VectorizedCopy | 9 | 3.9651 ns | 0.0076 ns | 252,203,935.83 | 47.9% |
ArrayCopy | 10 | 5.8639 ns | 0.0113 ns | 170,536,867.40 | 0.0% |
BlockCopy | 10 | 5.9407 ns | 0.0975 ns | 168,374,467.10 | -1.3% |
VectorizedCopy | 10 | 4.2031 ns | 0.0708 ns | 237,984,581.70 | 39.6% |
ArrayCopy | 11 | 6.0222 ns | 0.0384 ns | 166,059,674.28 | 0.0% |
BlockCopy | 11 | 6.0856 ns | 0.1006 ns | 164,365,421.87 | -1.0% |
VectorizedCopy | 11 | 4.3980 ns | 0.0114 ns | 227,378,140.50 | 36.9% |
ArrayCopy | 12 | 5.7978 ns | 0.0968 ns | 172,525,275.05 | 0.0% |
BlockCopy | 12 | 5.9368 ns | 0.1118 ns | 168,499,595.33 | -2.3% |
VectorizedCopy | 12 | 3.8656 ns | 0.0701 ns | 258,771,249.76 | 50.0% |
ArrayCopy | 13 | 5.8599 ns | 0.0985 ns | 170,697,280.28 | 0.0% |
BlockCopy | 13 | 5.9452 ns | 0.0198 ns | 168,205,061.59 | -1.5% |
VectorizedCopy | 13 | 4.0097 ns | 0.0764 ns | 249,478,943.34 | 46.2% |
ArrayCopy | 14 | 5.8726 ns | 0.1039 ns | 170,332,872.65 | 0.0% |
BlockCopy | 14 | 6.0807 ns | 0.1034 ns | 164,500,497.80 | -3.4% |
VectorizedCopy | 14 | 4.3579 ns | 0.0741 ns | 229,535,593.28 | 34.8% |
ArrayCopy | 15 | 5.9407 ns | 0.1045 ns | 168,380,987.89 | 0.0% |
BlockCopy | 15 | 6.0864 ns | 0.1013 ns | 164,346,271.10 | -2.4% |
VectorizedCopy | 15 | 4.6881 ns | 0.0691 ns | 213,349,804.77 | 26.7% |
ArrayCopy | 16 | 5.7952 ns | 0.1034 ns | 172,611,407.93 | 0.0% |
BlockCopy | 16 | 5.9432 ns | 0.1025 ns | 168,307,450.63 | -2.5% |
VectorizedCopy | 16 | 3.8084 ns | 0.0088 ns | 262,578,647.13 | 52.1% |
ArrayCopy | 17 | 10.6954 ns | 0.0050 ns | 93,498,530.53 | 0.0% |
BlockCopy | 17 | 10.7207 ns | 0.1785 ns | 93,303,079.33 | -0.2% |
VectorizedCopy | 17 | 4.1017 ns | 0.0030 ns | 243,800,116.81 | 160.8% |
ArrayCopy | 18 | 10.5726 ns | 0.1837 ns | 94,611,697.63 | 0.0% |
BlockCopy | 18 | 10.7337 ns | 0.1975 ns | 93,195,517.60 | -1.5% |
VectorizedCopy | 18 | 4.2452 ns | 0.0136 ns | 235,559,959.02 | 149.0% |
ArrayCopy | 19 | 10.6961 ns | 0.0099 ns | 93,492,317.08 | 0.0% |
BlockCopy | 19 | 10.5863 ns | 0.1980 ns | 94,493,228.69 | 1.1% |
VectorizedCopy | 19 | 4.7175 ns | 0.2517 ns | 212,539,091.31 | 127.3% |
ArrayCopy | 20 | 10.9211 ns | 0.8896 ns | 92,124,670.55 | 0.0% |
BlockCopy | 20 | 10.8452 ns | 0.0090 ns | 92,206,820.56 | 0.1% |
VectorizedCopy | 20 | 3.9598 ns | 0.0051 ns | 252,538,656.81 | 174.1% |
ArrayCopy | 21 | 10.5724 ns | 0.1783 ns | 94,611,974.25 | 0.0% |
BlockCopy | 21 | 10.8392 ns | 0.0055 ns | 92,257,363.86 | -2.5% |
VectorizedCopy | 21 | 4.2442 ns | 0.0065 ns | 235,617,715.97 | 149.0% |
ArrayCopy | 22 | 10.6972 ns | 0.0124 ns | 93,482,939.16 | 0.0% |
BlockCopy | 22 | 10.4680 ns | 0.0311 ns | 95,530,367.23 | 2.2% |
VectorizedCopy | 22 | 4.5098 ns | 0.0951 ns | 221,833,862.72 | 137.3% |
ArrayCopy | 23 | 10.5796 ns | 0.1825 ns | 94,548,608.52 | 0.0% |
BlockCopy | 23 | 10.5863 ns | 0.1857 ns | 94,489,275.32 | -0.1% |
VectorizedCopy | 23 | 4.6925 ns | 0.0170 ns | 213,106,580.99 | 125.4% |
ArrayCopy | 24 | 10.7015 ns | 0.0256 ns | 93,445,585.62 | 0.0% |
BlockCopy | 24 | 10.8423 ns | 0.0068 ns | 92,231,634.97 | -1.3% |
VectorizedCopy | 24 | 3.8208 ns | 0.0251 ns | 261,736,065.75 | 180.1% |
ArrayCopy | 25 | 10.5770 ns | 0.1734 ns | 94,569,267.61 | 0.0% |
BlockCopy | 25 | 10.4676 ns | 0.0376 ns | 95,533,654.76 | 1.0% |
VectorizedCopy | 25 | 4.0966 ns | 0.0753 ns | 244,184,056.13 | 158.2% |
ArrayCopy | 26 | 10.8758 ns | 0.5318 ns | 92,156,372.85 | 0.0% |
BlockCopy | 26 | 10.5921 ns | 0.1797 ns | 94,436,119.76 | 2.5% |
VectorizedCopy | 26 | 4.3465 ns | 0.0769 ns | 230,139,687.68 | 149.7% |
ArrayCopy | 27 | 10.4394 ns | 0.1844 ns | 95,819,737.35 | 0.0% |
BlockCopy | 27 | 10.8496 ns | 0.0193 ns | 92,169,376.78 | -3.8% |
VectorizedCopy | 27 | 4.4507 ns | 0.0814 ns | 224,754,784.46 | 134.6% |
ArrayCopy | 28 | 10.7901 ns | 0.4255 ns | 92,815,804.65 | 0.0% |
BlockCopy | 28 | 10.8418 ns | 0.0038 ns | 92,235,904.69 | -0.6% |
VectorizedCopy | 28 | 4.1366 ns | 0.0478 ns | 241,772,377.39 | 160.5% |
ArrayCopy | 29 | 10.5736 ns | 0.1783 ns | 94,601,907.58 | 0.0% |
BlockCopy | 29 | 10.5867 ns | 0.1856 ns | 94,486,179.54 | -0.1% |
VectorizedCopy | 29 | 4.1551 ns | 0.0704 ns | 240,733,052.56 | 154.5% |
ArrayCopy | 30 | 10.6983 ns | 0.0190 ns | 93,473,071.47 | 0.0% |
BlockCopy | 30 | 10.8461 ns | 0.0249 ns | 92,199,634.98 | -1.4% |
VectorizedCopy | 30 | 4.7840 ns | 0.0932 ns | 209,105,993.58 | 123.7% |
ArrayCopy | 31 | 10.5758 ns | 0.1861 ns | 94,583,717.64 | 0.0% |
BlockCopy | 31 | 10.8505 ns | 0.0259 ns | 92,161,874.17 | -2.6% |
VectorizedCopy | 31 | 4.8411 ns | 0.0221 ns | 206,569,087.60 | 118.4% |
ArrayCopy | 32 | 10.5688 ns | 0.1852 ns | 94,646,552.93 | 0.0% |
BlockCopy | 32 | 10.4672 ns | 0.0402 ns | 95,537,677.55 | 0.9% |
VectorizedCopy | 32 | 2.7518 ns | 0.0500 ns | 363,515,306.64 | 284.1% |
ArrayCopy | 33 | 10.5647 ns | 0.1977 ns | 94,687,082.77 | 0.0% |
BlockCopy | 33 | 10.5894 ns | 0.1819 ns | 94,461,058.17 | -0.2% |
VectorizedCopy | 33 | 4.1079 ns | 0.0114 ns | 243,435,478.42 | 157.1% |
ArrayCopy | 34 | 10.6961 ns | 0.0034 ns | 93,492,194.97 | 0.0% |
BlockCopy | 34 | 10.8399 ns | 0.0041 ns | 92,252,082.38 | -1.3% |
VectorizedCopy | 34 | 4.3481 ns | 0.0730 ns | 230,046,570.17 | 146.1% |
ArrayCopy | 35 | 10.6989 ns | 0.0191 ns | 93,467,991.23 | 0.0% |
BlockCopy | 35 | 10.7163 ns | 0.1887 ns | 93,343,696.60 | -0.1% |
VectorizedCopy | 35 | 4.4708 ns | 0.0788 ns | 223,741,943.23 | 139.4% |
ArrayCopy | 36 | 10.6876 ns | 0.3019 ns | 93,639,068.50 | 0.0% |
BlockCopy | 36 | 10.8447 ns | 0.0251 ns | 92,211,290.49 | -1.5% |
VectorizedCopy | 36 | 4.0572 ns | 0.0692 ns | 246,548,152.20 | 163.3% |
ArrayCopy | 37 | 11.0047 ns | 0.7339 ns | 91,248,906.70 | 0.0% |
BlockCopy | 37 | 10.8497 ns | 0.0380 ns | 92,169,925.93 | 1.0% |
VectorizedCopy | 37 | 4.2041 ns | 0.0736 ns | 237,933,398.49 | 160.8% |
ArrayCopy | 38 | 10.5690 ns | 0.1822 ns | 94,643,529.65 | 0.0% |
BlockCopy | 38 | 10.8497 ns | 0.0273 ns | 92,168,736.47 | -2.6% |
VectorizedCopy | 38 | 4.4621 ns | 0.0773 ns | 224,173,089.50 | 136.9% |
ArrayCopy | 39 | 10.4477 ns | 0.1792 ns | 95,742,065.87 | 0.0% |
BlockCopy | 39 | 10.5826 ns | 0.1863 ns | 94,522,324.65 | -1.3% |
VectorizedCopy | 39 | 4.8572 ns | 0.0111 ns | 205,880,173.08 | 115.0% |
ArrayCopy | 40 | 10.5745 ns | 0.1778 ns | 94,593,115.63 | 0.0% |
BlockCopy | 40 | 10.7357 ns | 0.1674 ns | 93,169,449.07 | -1.5% |
VectorizedCopy | 40 | 4.0031 ns | 0.0755 ns | 249,893,099.40 | 164.2% |
ArrayCopy | 41 | 10.7052 ns | 0.0403 ns | 93,414,127.26 | 0.0% |
BlockCopy | 41 | 10.7163 ns | 0.1880 ns | 93,344,062.30 | -0.1% |
VectorizedCopy | 41 | 4.3465 ns | 0.0780 ns | 230,143,660.37 | 146.4% |
ArrayCopy | 42 | 10.4468 ns | 0.1874 ns | 95,752,896.34 | 0.0% |
BlockCopy | 42 | 10.4636 ns | 0.0292 ns | 95,570,271.75 | -0.2% |
VectorizedCopy | 42 | 4.6383 ns | 0.0817 ns | 215,662,815.73 | 125.2% |
ArrayCopy | 43 | 10.4503 ns | 0.1812 ns | 95,718,238.83 | 0.0% |
BlockCopy | 43 | 10.5768 ns | 0.1914 ns | 94,575,828.67 | -1.2% |
VectorizedCopy | 43 | 4.7315 ns | 0.0853 ns | 211,413,378.48 | 120.9% |
ArrayCopy | 44 | 10.6974 ns | 0.0251 ns | 93,480,731.60 | 0.0% |
BlockCopy | 44 | 10.8399 ns | 0.0074 ns | 92,251,738.01 | -1.3% |
VectorizedCopy | 44 | 4.4153 ns | 0.0125 ns | 226,489,223.32 | 142.3% |
ArrayCopy | 45 | 10.4417 ns | 0.1816 ns | 95,797,298.71 | 0.0% |
BlockCopy | 45 | 10.7124 ns | 0.1849 ns | 93,376,649.25 | -2.5% |
VectorizedCopy | 45 | 4.4386 ns | 0.0768 ns | 225,361,446.43 | 135.2% |
ArrayCopy | 46 | 10.5716 ns | 0.1853 ns | 94,621,194.04 | 0.0% |
BlockCopy | 46 | 10.5959 ns | 0.1766 ns | 94,400,935.04 | -0.2% |
VectorizedCopy | 46 | 4.8211 ns | 0.1021 ns | 207,513,219.66 | 119.3% |
ArrayCopy | 47 | 10.5774 ns | 0.1930 ns | 94,572,136.25 | 0.0% |
BlockCopy | 47 | 10.7115 ns | 0.1838 ns | 93,384,868.72 | -1.3% |
VectorizedCopy | 47 | 5.0163 ns | 0.0902 ns | 199,412,917.35 | 110.9% |
ArrayCopy | 48 | 10.7236 ns | 0.0447 ns | 93,254,055.87 | 0.0% |
BlockCopy | 48 | 10.5947 ns | 0.1771 ns | 94,412,237.25 | 1.2% |
VectorizedCopy | 48 | 4.1953 ns | 0.0739 ns | 238,430,563.58 | 155.7% |
ArrayCopy | 49 | 10.6932 ns | 0.0230 ns | 93,517,462.00 | 0.0% |
BlockCopy | 49 | 10.8352 ns | 0.0184 ns | 92,291,977.47 | -1.3% |
VectorizedCopy | 49 | 4.4882 ns | 0.0854 ns | 222,883,635.31 | 138.3% |
ArrayCopy | 50 | 10.5692 ns | 0.1829 ns | 94,641,893.59 | 0.0% |
BlockCopy | 50 | 10.5813 ns | 0.1775 ns | 94,531,829.34 | -0.1% |
VectorizedCopy | 50 | 4.7818 ns | 0.0843 ns | 209,190,309.78 | 121.0% |
ArrayCopy | 51 | 10.7062 ns | 0.0437 ns | 93,405,272.22 | 0.0% |
BlockCopy | 51 | 10.7144 ns | 0.1858 ns | 93,360,033.35 | 0.0% |
VectorizedCopy | 51 | 4.8948 ns | 0.0903 ns | 204,363,940.83 | 118.8% |
ArrayCopy | 52 | 10.5718 ns | 0.1752 ns | 94,616,953.99 | 0.0% |
BlockCopy | 52 | 10.7187 ns | 0.1882 ns | 93,322,595.59 | -1.4% |
VectorizedCopy | 52 | 4.4951 ns | 0.0806 ns | 222,536,108.01 | 135.2% |
ArrayCopy | 53 | 10.5780 ns | 0.1920 ns | 94,565,822.23 | 0.0% |
BlockCopy | 53 | 10.7211 ns | 0.1888 ns | 93,301,972.95 | -1.3% |
VectorizedCopy | 53 | 4.6009 ns | 0.0692 ns | 217,394,557.63 | 129.9% |
ArrayCopy | 54 | 10.5780 ns | 0.1817 ns | 94,562,802.38 | 0.0% |
BlockCopy | 54 | 10.5926 ns | 0.1811 ns | 94,432,281.42 | -0.1% |
VectorizedCopy | 54 | 5.1696 ns | 0.0218 ns | 193,440,403.83 | 104.6% |
ArrayCopy | 55 | 10.6973 ns | 0.0265 ns | 93,481,684.14 | 0.0% |
BlockCopy | 55 | 10.5832 ns | 0.1808 ns | 94,515,680.56 | 1.1% |
VectorizedCopy | 55 | 5.1892 ns | 0.0957 ns | 192,769,676.39 | 106.2% |
ArrayCopy | 56 | 10.4442 ns | 0.1845 ns | 95,775,804.66 | 0.0% |
BlockCopy | 56 | 10.5789 ns | 0.1899 ns | 94,557,038.50 | -1.3% |
VectorizedCopy | 56 | 4.2280 ns | 0.0667 ns | 236,577,786.86 | 147.0% |
ArrayCopy | 57 | 10.5703 ns | 0.1817 ns | 94,631,762.09 | 0.0% |
BlockCopy | 57 | 10.8406 ns | 0.0118 ns | 92,245,716.72 | -2.5% |
VectorizedCopy | 57 | 4.5466 ns | 0.0085 ns | 219,947,200.56 | 132.4% |
ArrayCopy | 58 | 10.4470 ns | 0.1809 ns | 95,748,944.26 | 0.0% |
BlockCopy | 58 | 10.8512 ns | 0.0346 ns | 92,156,821.13 | -3.8% |
VectorizedCopy | 58 | 4.7337 ns | 0.0838 ns | 211,314,153.63 | 120.7% |
ArrayCopy | 59 | 10.7050 ns | 0.0391 ns | 93,415,428.11 | 0.0% |
BlockCopy | 59 | 10.5863 ns | 0.1832 ns | 94,488,878.88 | 1.1% |
VectorizedCopy | 59 | 4.9437 ns | 0.0897 ns | 202,344,005.21 | 116.6% |
ArrayCopy | 60 | 10.5793 ns | 0.1928 ns | 94,554,805.56 | 0.0% |
BlockCopy | 60 | 10.7174 ns | 0.1793 ns | 93,331,749.81 | -1.3% |
VectorizedCopy | 60 | 4.4475 ns | 0.0745 ns | 224,906,136.13 | 137.9% |
ArrayCopy | 61 | 10.4488 ns | 0.1788 ns | 95,731,248.77 | 0.0% |
BlockCopy | 61 | 10.8450 ns | 0.0217 ns | 92,208,754.57 | -3.7% |
VectorizedCopy | 61 | 4.6320 ns | 0.0864 ns | 215,963,550.98 | 125.6% |
ArrayCopy | 62 | 10.5717 ns | 0.1841 ns | 94,620,595.15 | 0.0% |
BlockCopy | 62 | 10.4619 ns | 0.0358 ns | 95,585,758.60 | 1.0% |
VectorizedCopy | 62 | 5.2046 ns | 0.1126 ns | 192,222,130.27 | 103.2% |
ArrayCopy | 63 | 10.4454 ns | 0.1879 ns | 95,765,084.88 | 0.0% |
BlockCopy | 63 | 10.4667 ns | 0.0428 ns | 95,543,050.87 | -0.2% |
VectorizedCopy | 63 | 5.4780 ns | 0.1084 ns | 182,617,306.37 | 90.7% |
ArrayCopy | 64 | 10.5678 ns | 0.1831 ns | 94,655,282.22 | 0.0% |
BlockCopy | 64 | 10.5859 ns | 0.1862 ns | 94,493,147.64 | -0.2% |
VectorizedCopy | 64 | 3.0431 ns | 0.0535 ns | 328,707,328.52 | 247.3% |
ArrayCopy | 65 | 11.7228 ns | 0.0219 ns | 85,304,264.61 | 0.0% |
BlockCopy | 65 | 11.8723 ns | 0.0283 ns | 84,229,978.54 | -1.3% |
VectorizedCopy | 65 | 4.5469 ns | 0.0092 ns | 219,930,039.03 | 157.8% |
ArrayCopy | 66 | 11.9697 ns | 0.3624 ns | 83,616,982.01 | 0.0% |
BlockCopy | 66 | 11.7353 ns | 0.2108 ns | 85,239,892.37 | 1.9% |
VectorizedCopy | 66 | 4.8178 ns | 0.0909 ns | 207,635,742.42 | 148.3% |
ArrayCopy | 67 | 11.5845 ns | 0.1968 ns | 86,346,298.55 | 0.0% |
BlockCopy | 67 | 11.4568 ns | 0.0379 ns | 87,285,076.48 | 1.1% |
VectorizedCopy | 67 | 4.9234 ns | 0.0831 ns | 203,167,583.05 | 135.3% |
ArrayCopy | 68 | 11.8114 ns | 0.4577 ns | 84,785,635.03 | 0.0% |
BlockCopy | 68 | 11.5943 ns | 0.2004 ns | 86,273,706.19 | 1.8% |
VectorizedCopy | 68 | 4.4926 ns | 0.0790 ns | 222,656,588.79 | 162.6% |
ArrayCopy | 69 | 11.4554 ns | 0.2026 ns | 87,321,347.35 | 0.0% |
BlockCopy | 69 | 11.5861 ns | 0.1985 ns | 86,334,350.84 | -1.1% |
VectorizedCopy | 69 | 4.6350 ns | 0.0807 ns | 215,812,211.93 | 147.1% |
ArrayCopy | 70 | 11.8102 ns | 0.4666 ns | 84,798,959.52 | 0.0% |
BlockCopy | 70 | 11.8693 ns | 0.0065 ns | 84,250,770.18 | -0.6% |
VectorizedCopy | 70 | 4.9396 ns | 0.0953 ns | 202,520,153.89 | 138.8% |
ArrayCopy | 71 | 11.5864 ns | 0.1984 ns | 86,332,524.56 | 0.0% |
BlockCopy | 71 | 11.8671 ns | 0.0091 ns | 84,266,549.13 | -2.4% |
VectorizedCopy | 71 | 5.3640 ns | 0.2244 ns | 186,738,793.42 | 116.3% |
ArrayCopy | 72 | 11.5907 ns | 0.2111 ns | 86,303,703.63 | 0.0% |
BlockCopy | 72 | 11.7275 ns | 0.1998 ns | 85,294,205.42 | -1.2% |
VectorizedCopy | 72 | 4.4905 ns | 0.0767 ns | 222,755,376.45 | 158.1% |
ArrayCopy | 73 | 11.4483 ns | 0.2003 ns | 87,375,028.12 | 0.0% |
BlockCopy | 73 | 11.5806 ns | 0.2065 ns | 86,377,472.66 | -1.1% |
VectorizedCopy | 73 | 4.8654 ns | 0.0037 ns | 205,535,085.88 | 135.2% |
ArrayCopy | 74 | 11.3411 ns | 0.1116 ns | 88,182,845.80 | 0.0% |
BlockCopy | 74 | 11.8910 ns | 0.0604 ns | 84,099,213.47 | -4.6% |
VectorizedCopy | 74 | 5.0741 ns | 0.0861 ns | 197,135,881.15 | 123.6% |
ArrayCopy | 75 | 11.4545 ns | 0.2026 ns | 87,328,072.43 | 0.0% |
BlockCopy | 75 | 11.5902 ns | 0.2031 ns | 86,305,271.44 | -1.2% |
VectorizedCopy | 75 | 5.2956 ns | 0.0147 ns | 188,838,550.18 | 116.2% |
ArrayCopy | 76 | 11.5887 ns | 0.2026 ns | 86,316,457.54 | 0.0% |
BlockCopy | 76 | 11.5931 ns | 0.2004 ns | 86,283,200.57 | 0.0% |
VectorizedCopy | 76 | 4.8211 ns | 0.0843 ns | 207,483,796.86 | 140.4% |
ArrayCopy | 77 | 11.4720 ns | 0.2376 ns | 87,204,046.68 | 0.0% |
BlockCopy | 77 | 11.7353 ns | 0.1891 ns | 85,234,653.29 | -2.3% |
VectorizedCopy | 77 | 4.9858 ns | 0.0089 ns | 200,571,183.57 | 130.0% |
ArrayCopy | 78 | 11.7347 ns | 0.0494 ns | 85,219,009.93 | 0.0% |
BlockCopy | 78 | 11.8795 ns | 0.0483 ns | 84,180,198.21 | -1.2% |
VectorizedCopy | 78 | 5.2029 ns | 0.0920 ns | 192,257,348.72 | 125.6% |
ArrayCopy | 79 | 11.6882 ns | 0.5285 ns | 85,720,801.91 | 0.0% |
BlockCopy | 79 | 11.5858 ns | 0.2075 ns | 86,338,958.09 | 0.7% |
VectorizedCopy | 79 | 5.5101 ns | 0.0941 ns | 181,535,547.31 | 111.8% |
ArrayCopy | 80 | 11.7256 ns | 0.0269 ns | 85,284,072.64 | 0.0% |
BlockCopy | 80 | 11.8799 ns | 0.0347 ns | 84,176,734.58 | -1.3% |
VectorizedCopy | 80 | 4.7317 ns | 0.0028 ns | 211,342,207.44 | 147.8% |
ArrayCopy | 81 | 11.5829 ns | 0.2011 ns | 86,359,655.13 | 0.0% |
BlockCopy | 81 | 11.5920 ns | 0.2006 ns | 86,291,417.05 | -0.1% |
VectorizedCopy | 81 | 4.9856 ns | 0.0143 ns | 200,577,991.64 | 132.3% |
ArrayCopy | 82 | 11.3037 ns | 0.0113 ns | 88,466,615.40 | 0.0% |
BlockCopy | 82 | 11.5961 ns | 0.1988 ns | 86,260,292.05 | -2.5% |
VectorizedCopy | 82 | 5.1768 ns | 0.0903 ns | 193,224,001.89 | 118.4% |
ArrayCopy | 83 | 11.7239 ns | 0.0249 ns | 85,296,328.66 | 0.0% |
BlockCopy | 83 | 11.7252 ns | 0.1906 ns | 85,308,585.31 | 0.0% |
VectorizedCopy | 83 | 5.3646 ns | 0.0902 ns | 186,458,199.54 | 118.6% |
ArrayCopy | 84 | 12.0557 ns | 0.4690 ns | 83,066,472.97 | 0.0% |
BlockCopy | 84 | 11.7439 ns | 0.1928 ns | 85,173,036.45 | 2.5% |
VectorizedCopy | 84 | 4.9220 ns | 0.0777 ns | 203,218,805.30 | 144.6% |
ArrayCopy | 85 | 11.5402 ns | 0.1966 ns | 86,677,798.64 | 0.0% |
BlockCopy | 85 | 11.7288 ns | 0.2060 ns | 85,285,625.32 | -1.6% |
VectorizedCopy | 85 | 5.1682 ns | 0.0171 ns | 193,491,532.67 | 123.2% |
ArrayCopy | 86 | 11.5886 ns | 0.2068 ns | 86,318,315.35 | 0.0% |
BlockCopy | 86 | 11.5933 ns | 0.1974 ns | 86,280,486.51 | 0.0% |
VectorizedCopy | 86 | 5.4244 ns | 0.0042 ns | 184,351,617.69 | 113.6% |
ArrayCopy | 87 | 11.7222 ns | 0.0283 ns | 85,309,030.14 | 0.0% |
BlockCopy | 87 | 11.4522 ns | 0.0269 ns | 87,319,971.53 | 2.4% |
VectorizedCopy | 87 | 5.5766 ns | 0.0981 ns | 179,372,766.90 | 110.3% |
ArrayCopy | 88 | 11.5825 ns | 0.2005 ns | 86,362,283.55 | 0.0% |
BlockCopy | 88 | 11.5944 ns | 0.2000 ns | 86,273,090.63 | -0.1% |
VectorizedCopy | 88 | 4.6403 ns | 0.0779 ns | 215,562,830.79 | 149.6% |
ArrayCopy | 89 | 11.7236 ns | 0.0282 ns | 85,298,209.63 | 0.0% |
BlockCopy | 89 | 11.7365 ns | 0.2128 ns | 85,231,275.31 | -0.1% |
VectorizedCopy | 89 | 5.0037 ns | 0.0122 ns | 199,853,963.53 | 134.3% |
ArrayCopy | 90 | 12.2382 ns | 0.7389 ns | 81,988,480.82 | 0.0% |
BlockCopy | 90 | 11.7272 ns | 0.2040 ns | 85,296,857.13 | 4.0% |
VectorizedCopy | 90 | 5.2192 ns | 0.0945 ns | 191,659,846.71 | 133.8% |
ArrayCopy | 91 | 11.5870 ns | 0.2036 ns | 86,329,527.94 | 0.0% |
BlockCopy | 91 | 11.8701 ns | 0.0259 ns | 84,245,973.81 | -2.4% |
VectorizedCopy | 91 | 5.4400 ns | 0.0114 ns | 183,825,457.11 | 112.9% |
ArrayCopy | 92 | 11.5892 ns | 0.2083 ns | 86,314,606.59 | 0.0% |
BlockCopy | 92 | 11.5953 ns | 0.2023 ns | 86,266,592.15 | -0.1% |
VectorizedCopy | 92 | 5.0319 ns | 0.0077 ns | 198,730,867.64 | 130.2% |
ArrayCopy | 93 | 11.5892 ns | 0.1958 ns | 86,311,165.58 | 0.0% |
BlockCopy | 93 | 11.8618 ns | 0.0193 ns | 84,304,339.20 | -2.3% |
VectorizedCopy | 93 | 5.0710 ns | 0.0884 ns | 197,258,274.48 | 128.5% |
ArrayCopy | 94 | 11.7264 ns | 0.0237 ns | 85,277,766.73 | 0.0% |
BlockCopy | 94 | 11.7355 ns | 0.1975 ns | 85,235,405.64 | 0.0% |
VectorizedCopy | 94 | 5.6256 ns | 0.1023 ns | 177,817,567.19 | 108.5% |
ArrayCopy | 95 | 11.7331 ns | 0.0535 ns | 85,230,760.17 | 0.0% |
BlockCopy | 95 | 11.5949 ns | 0.2184 ns | 86,273,792.82 | 1.2% |
VectorizedCopy | 95 | 5.8273 ns | 0.0056 ns | 171,606,888.66 | 101.3% |
ArrayCopy | 96 | 11.3091 ns | 0.1958 ns | 88,449,832.87 | 0.0% |
BlockCopy | 96 | 11.7332 ns | 0.0389 ns | 85,229,336.97 | -3.6% |
VectorizedCopy | 96 | 3.6662 ns | 0.0124 ns | 272,761,616.16 | 208.4% |
ArrayCopy | 508 | 13.3261 ns | 0.2335 ns | 75,062,999.88 | 0.0% |
BlockCopy | 508 | 13.3132 ns | 0.2298 ns | 75,134,983.27 | 0.1% |
VectorizedCopy | 508 | 11.6263 ns | 0.0577 ns | 86,013,569.89 | 14.6% |
ArrayCopy | 509 | 13.3366 ns | 0.2260 ns | 75,002,805.45 | 0.0% |
BlockCopy | 509 | 13.5102 ns | 0.2664 ns | 74,046,033.00 | -1.3% |
VectorizedCopy | 509 | 11.7425 ns | 0.0397 ns | 85,161,359.30 | 13.5% |
ArrayCopy | 510 | 13.0299 ns | 0.0439 ns | 76,747,285.21 | 0.0% |
BlockCopy | 510 | 13.4774 ns | 0.2236 ns | 74,218,375.69 | -3.3% |
VectorizedCopy | 510 | 12.2528 ns | 0.0306 ns | 81,614,566.00 | 6.3% |
ArrayCopy | 511 | 14.1144 ns | 0.8999 ns | 71,116,990.45 | 0.0% |
BlockCopy | 511 | 13.6376 ns | 0.0369 ns | 73,327,102.71 | 3.1% |
VectorizedCopy | 511 | 12.0609 ns | 0.0608 ns | 82,914,377.74 | 16.6% |
ArrayCopy | 512 | 13.4078 ns | 0.2899 ns | 74,617,647.48 | 0.0% |
BlockCopy | 512 | 13.6296 ns | 0.0080 ns | 73,370,014.01 | -1.7% |
VectorizedCopy | 512 | 10.0166 ns | 0.1897 ns | 99,869,525.44 | 33.8% |
ArrayCopy | 513 | 13.6352 ns | 0.0327 ns | 73,339,879.75 | 0.0% |
BlockCopy | 513 | 13.6228 ns | 0.2450 ns | 73,429,789.82 | 0.1% |
VectorizedCopy | 513 | 11.9370 ns | 0.0212 ns | 83,773,574.83 | 14.2% |
ArrayCopy | 543 | 13.1517 ns | 0.0325 ns | 76,036,487.57 | 0.0% |
BlockCopy | 543 | 13.6717 ns | 0.1617 ns | 73,153,940.72 | -3.8% |
VectorizedCopy | 543 | 13.2079 ns | 0.0309 ns | 75,712,405.37 | -0.4% |
ArrayCopy | 544 | 13.6455 ns | 0.0555 ns | 73,285,458.30 | 0.0% |
BlockCopy | 544 | 13.5850 ns | 0.2165 ns | 73,629,017.73 | 0.5% |
VectorizedCopy | 544 | 11.0542 ns | 0.0313 ns | 90,463,832.62 | 23.4% |
ArrayCopy | 547 | 13.4514 ns | 0.2285 ns | 74,362,264.10 | 0.0% |
BlockCopy | 547 | 14.8555 ns | 0.7506 ns | 67,482,743.68 | -9.3% |
VectorizedCopy | 547 | 12.8129 ns | 0.0475 ns | 78,047,153.57 | 5.0% |
ArrayCopy | 576 | 13.9691 ns | 0.6331 ns | 71,726,838.89 | 0.0% |
BlockCopy | 576 | 13.7897 ns | 0.2525 ns | 72,541,555.67 | 1.1% |
VectorizedCopy | 576 | 11.0111 ns | 0.2011 ns | 90,846,551.92 | 26.7% |
ArrayCopy | 1024 | 17.1668 ns | 0.8558 ns | 58,387,687.56 | 0.0% |
BlockCopy | 1024 | 16.6559 ns | 0.2813 ns | 60,055,379.14 | 2.9% |
VectorizedCopy | 1024 | 17.6044 ns | 0.1651 ns | 56,808,897.59 | -2.7% |
ArrayCopy | 4096 | 45.7931 ns | 1.6124 ns | 21,863,405.86 | 0.0% |
BlockCopy | 4096 | 45.8172 ns | 1.2883 ns | 21,842,594.11 | -0.1% |
VectorizedCopy | 4096 | 47.0823 ns | 0.8151 ns | 21,245,586.44 | -2.8% |
ArrayCopy | 8512 | 86.3654 ns | 0.3260 ns | 11,578,867.96 | 0.0% |
BlockCopy | 8512 | 86.4953 ns | 0.3797 ns | 11,561,535.36 | -0.1% |
VectorizedCopy | 8512 | 92.2227 ns | 0.4168 ns | 10,843,528.27 | -6.4% |