Vectorize basic_string::rfind (the single character overload) by AlexGuteniev · Pull Request #5087 · microsoft/STL (original) (raw)

bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>/8021/3056

37.2 ns

45.8 ns

random variation

bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>/63/62

3.86 ns

3.30 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>/31/30

6.91 ns

8.26 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>/15/14

6.05 ns

6.15 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>/7/6

2.76 ns

3.05 ns

bm<uint8_t, highly_aligned_allocator, Op::FindSized>/8021/3056

44.8 ns

46.6 ns

bm<uint8_t, highly_aligned_allocator, Op::FindSized>/63/62

3.14 ns

3.27 ns

bm<uint8_t, highly_aligned_allocator, Op::FindSized>/31/30

7.56 ns

7.86 ns

bm<uint8_t, highly_aligned_allocator, Op::FindSized>/15/14

5.96 ns

6.39 ns

bm<uint8_t, highly_aligned_allocator, Op::FindSized>/7/6

3.04 ns

2.85 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>/8021/3056

80.5 ns

80.5 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>/63/62

3.90 ns

3.90 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>/31/30

3.31 ns

3.27 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>/15/14

3.04 ns

3.14 ns

bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>/7/6

2.29 ns

2.42 ns

bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>/8021/3056

77.3 ns

69.6 ns

random variation

bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>/63/62

2.11 ns

2.13 ns

bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>/31/30

1.53 ns

1.54 ns

bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>/15/14

1.29 ns

1.30 ns

bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>/7/6

1.29 ns

1.29 ns

bm<uint8_t, not_highly_aligned_allocator, Op::Count>/8021/3056

87.7 ns

90.4 ns

bm<uint8_t, not_highly_aligned_allocator, Op::Count>/63/62

4.50 ns

4.52 ns

bm<uint8_t, not_highly_aligned_allocator, Op::Count>/31/30

7.49 ns

7.98 ns

bm<uint8_t, not_highly_aligned_allocator, Op::Count>/15/14

6.20 ns

5.20 ns

bm<uint8_t, not_highly_aligned_allocator, Op::Count>/7/6

3.57 ns

3.29 ns

bm<uint8_t, highly_aligned_allocator, Op::Count>/8021/3056

75.1 ns

75.4 ns

bm<uint8_t, highly_aligned_allocator, Op::Count>/63/62

4.48 ns

4.49 ns

bm<uint8_t, highly_aligned_allocator, Op::Count>/31/30

7.60 ns

7.90 ns

bm<uint8_t, highly_aligned_allocator, Op::Count>/15/14

5.89 ns

5.17 ns

bm<uint8_t, highly_aligned_allocator, Op::Count>/7/6

4.01 ns

3.31 ns

bm<char, not_highly_aligned_allocator, Op::StringFind>/8021/3056

81.0 ns

79.8 ns

bm<char, not_highly_aligned_allocator, Op::StringFind>/63/62

14.1 ns

15.2 ns

bm<char, not_highly_aligned_allocator, Op::StringFind>/31/30

13.3 ns

12.7 ns

bm<char, not_highly_aligned_allocator, Op::StringFind>/15/14

4.95 ns

5.03 ns

bm<char, not_highly_aligned_allocator, Op::StringFind>/7/6

2.71 ns

2.71 ns

bm<char, highly_aligned_allocator, Op::StringFind>/8021/3056

71.6 ns

70.5 ns

bm<char, highly_aligned_allocator, Op::StringFind>/63/62

13.0 ns

12.9 ns

bm<char, highly_aligned_allocator, Op::StringFind>/31/30

12.5 ns

12.1 ns

bm<char, highly_aligned_allocator, Op::StringFind>/15/14

4.85 ns

4.86 ns

bm<char, highly_aligned_allocator, Op::StringFind>/7/6

2.72 ns

2.72 ns

bm<char, not_highly_aligned_allocator, Op::StringRFind>/8021/3056

733 ns

43.4 ns

vectorized

bm<char, not_highly_aligned_allocator, Op::StringRFind>/63/62

17.1 ns

3.77 ns

vectorized

bm<char, not_highly_aligned_allocator, Op::StringRFind>/31/30

9.13 ns

5.81 ns

vectorized

bm<char, not_highly_aligned_allocator, Op::StringRFind>/15/14

6.18 ns

5.07 ns

vectorized

bm<char, not_highly_aligned_allocator, Op::StringRFind>/7/6

3.00 ns

3.10 ns

vectorized

bm<char, highly_aligned_allocator, Op::StringRFind>/8021/3056

731 ns

45.1 ns

vectorized

bm<char, highly_aligned_allocator, Op::StringRFind>/63/62

16.7 ns

3.78 ns

vectorized

bm<char, highly_aligned_allocator, Op::StringRFind>/31/30

9.15 ns

7.25 ns

vectorized

bm<char, highly_aligned_allocator, Op::StringRFind>/15/14

6.15 ns

6.53 ns

vectorized

bm<char, highly_aligned_allocator, Op::StringRFind>/7/6

3.11 ns

3.14 ns

vectorized

bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>/8021/3056

81.5 ns

82.5 ns

bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>/63/62

3.19 ns

3.28 ns

bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>/31/30

2.67 ns

2.70 ns

bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>/15/14

3.05 ns

3.09 ns

bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>/7/6

2.58 ns

2.59 ns

bm<uint16_t, not_highly_aligned_allocator, Op::Count>/8021/3056

164 ns

164 ns

bm<uint16_t, not_highly_aligned_allocator, Op::Count>/63/62

4.71 ns

4.72 ns

bm<uint16_t, not_highly_aligned_allocator, Op::Count>/31/30

4.48 ns

4.49 ns

bm<uint16_t, not_highly_aligned_allocator, Op::Count>/15/14

4.69 ns

4.69 ns

bm<uint16_t, not_highly_aligned_allocator, Op::Count>/7/6

3.52 ns

3.54 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>/8021/3056

731 ns

734 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>/63/62

17.3 ns

17.4 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>/31/30

9.35 ns

9.32 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>/15/14

6.69 ns

5.86 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>/7/6

2.69 ns

2.75 ns

bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>/8021/3056

732 ns

82.6 ns

vectorized

bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>/63/62

16.7 ns

4.01 ns

vectorized

bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>/31/30

8.73 ns

3.42 ns

vectorized

bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>/15/14

4.41 ns

3.76 ns

vectorized

bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>/7/6

2.47 ns

3.05 ns

vectorized

bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>/8021/3056

154 ns

152 ns

bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>/63/62

3.99 ns

3.97 ns

bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>/31/30

2.85 ns

3.00 ns

bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>/15/14

2.63 ns

2.59 ns

bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>/7/6

2.56 ns

2.38 ns

bm<uint32_t, not_highly_aligned_allocator, Op::Count>/8021/3056

324 ns

321 ns

bm<uint32_t, not_highly_aligned_allocator, Op::Count>/63/62

4.79 ns

4.70 ns

bm<uint32_t, not_highly_aligned_allocator, Op::Count>/31/30

4.23 ns

4.22 ns

bm<uint32_t, not_highly_aligned_allocator, Op::Count>/15/14

3.85 ns

3.83 ns

bm<uint32_t, not_highly_aligned_allocator, Op::Count>/7/6

3.75 ns

3.77 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringFind>/8021/3056

729 ns

733 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringFind>/63/62

16.9 ns

30.2 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringFind>/31/30

9.46 ns

15.7 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringFind>/15/14

6.76 ns

4.46 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringFind>/7/6

2.88 ns

2.37 ns

bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>/8021/3056

731 ns

155 ns

vectorized

bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>/63/62

16.6 ns

5.46 ns

vectorized

bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>/31/30

8.93 ns

3.89 ns

vectorized

bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>/15/14

5.07 ns

3.51 ns

vectorized

bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>/7/6

2.58 ns

3.05 ns

vectorized

bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>/8021/3056

288 ns

287 ns

bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>/63/62

6.73 ns

6.80 ns

bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>/31/30

3.97 ns

3.99 ns

bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>/15/14

2.84 ns

2.82 ns

bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>/7/6

2.65 ns

2.64 ns

bm<uint64_t, not_highly_aligned_allocator, Op::Count>/8021/3056

922 ns

930 ns

bm<uint64_t, not_highly_aligned_allocator, Op::Count>/63/62

6.41 ns

9.30 ns

bm<uint64_t, not_highly_aligned_allocator, Op::Count>/31/30

4.19 ns

4.17 ns

bm<uint64_t, not_highly_aligned_allocator, Op::Count>/15/14

3.51 ns

3.54 ns

bm<uint64_t, not_highly_aligned_allocator, Op::Count>/7/6

3.16 ns

3.20 ns