Skip to content

Conversation

dabrahams
Copy link
Contributor

In local testing, these benchmark results change as follows due to f212fac:

Regression (20)
TEST OLD NEW DELTA SPEEDUP
CharIteration_utf16_unicodeScalars 33074 79510 +140.4% 0.42x
CharIteration_utf16_unicodeScalars_Backwards 73826 115515 +56.5% 0.64x
Improvement (43)
TEST OLD NEW DELTA SPEEDUP
CharIndexing_korean_unicodeScalars 118425 10360 -91.3% 11.43x
CharIndexing_tweet_unicodeScalars_Backwards 226366 19850 -91.2% 11.40x
CharIndexing_tweet_unicodeScalars 240596 21178 -91.2% 11.36x
CharIndexing_japanese_unicodeScalars_Backwards 136265 12032 -91.2% 11.33x
CharIndexing_chinese_unicodeScalars 92226 8146 -91.2% 11.32x
CharIndexing_russian_unicodeScalars 100908 8948 -91.1% 11.28x
CharIndexing_japanese_unicodeScalars 145414 12895 -91.1% 11.28x
CharIndexing_ascii_unicodeScalars 121438 10779 -91.1% 11.27x
CharIndexing_russian_unicodeScalars_Backwards 94190 8367 -91.1% 11.26x
CharIndexing_korean_unicodeScalars_Backwards 110175 9803 -91.1% 11.24x
CharIndexing_chinese_unicodeScalars_Backwards 86479 7715 -91.1% 11.21x
CharIndexing_ascii_unicodeScalars_Backwards 113255 10132 -91.1% 11.18x
CharIteration_ascii_unicodeScalars_Backwards 114873 13701 -88.1% 8.38x
CharIteration_chinese_unicodeScalars_Backwards 85778 10411 -87.9% 8.24x
CharIteration_russian_unicodeScalars_Backwards 94504 11471 -87.9% 8.24x
CharIteration_japanese_unicodeScalars_Backwards 136231 16569 -87.8% 8.22x
CharIteration_tweet_unicodeScalars_Backwards 222907 27165 -87.8% 8.21x
CharIteration_korean_unicodeScalars_Backwards 110132 13443 -87.8% 8.19x
CharIteration_korean_unicodeScalars 79540 11859 -85.1% 6.71x
CharIteration_russian_unicodeScalars 68209 10211 -85.0% 6.68x
CharIteration_japanese_unicodeScalars 98016 14690 -85.0% 6.67x
CharIteration_tweet_unicodeScalars 161177 24227 -85.0% 6.65x
CharIteration_chinese_unicodeScalars 61702 9278 -85.0% 6.65x
CharIteration_ascii_unicodeScalars 81049 12218 -84.9% 6.63x

In local testing, these benchmark results change as follows due to f212fac:

<details open>
  <summary>Regression (20)</summary>

TEST                                              | OLD    | NEW    | DELTA   | SPEEDUP
---                                               | ---    | ---    | ---     | ---
CharIteration_utf16_unicodeScalars                | 33074  | 79510  | +140.4% | **0.42x**
CharIteration_utf16_unicodeScalars_Backwards      | 73826  | 115515 | +56.5%  | **0.64x**

</details>

<details open>
  <summary>Improvement (43)</summary>

TEST                                              | OLD    | NEW    | DELTA   | SPEEDUP
---                                               | ---    | ---    | ---     | ---
CharIndexing_korean_unicodeScalars                | 118425 | 10360  | -91.3%  | **11.43x**
CharIndexing_tweet_unicodeScalars_Backwards       | 226366 | 19850  | -91.2%  | **11.40x**
CharIndexing_tweet_unicodeScalars                 | 240596 | 21178  | -91.2%  | **11.36x**
CharIndexing_japanese_unicodeScalars_Backwards    | 136265 | 12032  | -91.2%  | **11.33x**
CharIndexing_chinese_unicodeScalars               | 92226  | 8146   | -91.2%  | **11.32x**
CharIndexing_russian_unicodeScalars               | 100908 | 8948   | -91.1%  | **11.28x**
CharIndexing_japanese_unicodeScalars              | 145414 | 12895  | -91.1%  | **11.28x**
CharIndexing_ascii_unicodeScalars                 | 121438 | 10779  | -91.1%  | **11.27x**
CharIndexing_russian_unicodeScalars_Backwards     | 94190  | 8367   | -91.1%  | **11.26x**
CharIndexing_korean_unicodeScalars_Backwards      | 110175 | 9803   | -91.1%  | **11.24x**
CharIndexing_chinese_unicodeScalars_Backwards     | 86479  | 7715   | -91.1%  | **11.21x**
CharIndexing_ascii_unicodeScalars_Backwards       | 113255 | 10132  | -91.1%  | **11.18x**
CharIteration_ascii_unicodeScalars_Backwards      | 114873 | 13701  | -88.1%  | **8.38x**
CharIteration_chinese_unicodeScalars_Backwards    | 85778  | 10411  | -87.9%  | **8.24x**
CharIteration_russian_unicodeScalars_Backwards    | 94504  | 11471  | -87.9%  | **8.24x**
CharIteration_japanese_unicodeScalars_Backwards   | 136231 | 16569  | -87.8%  | **8.22x**
CharIteration_tweet_unicodeScalars_Backwards      | 222907 | 27165  | -87.8%  | **8.21x**
CharIteration_korean_unicodeScalars_Backwards     | 110132 | 13443  | -87.8%  | **8.19x**
CharIteration_korean_unicodeScalars               | 79540  | 11859  | -85.1%  | **6.71x**
CharIteration_russian_unicodeScalars              | 68209  | 10211  | -85.0%  | **6.68x**
CharIteration_japanese_unicodeScalars             | 98016  | 14690  | -85.0%  | **6.67x**
CharIteration_tweet_unicodeScalars                | 161177 | 24227  | -85.0%  | **6.65x**
CharIteration_chinese_unicodeScalars              | 61702  | 9278   | -85.0%  | **6.65x**
CharIteration_ascii_unicodeScalars                | 81049  | 12218  | -84.9%  | **6.63x**

</details>
@dabrahams
Copy link
Contributor Author

@swift-ci Please smoke benchmark

@dabrahams
Copy link
Contributor Author

@swift-ci Please smoke test and merge

@swift-ci swift-ci merged commit 3643e00 into master Jun 28, 2017
@swift-ci
Copy link
Contributor

Build comment file:

Optimized (O)

Regression (4)
TEST OLD NEW DELTA SPEEDUP
ArrayInClass 61 73 +19.7% 0.84x
SuffixCountableRangeLazy 10 11 +10.0% 0.91x
SuffixCountableRange 10 11 +10.0% 0.91x
ObjectiveCBridgeStubNSDataAppend 2332 2475 +6.1% 0.94x (?)
Improvement (4)
TEST OLD NEW DELTA SPEEDUP
SuffixArray 11 8 -27.3% 1.37x
DictionaryRemove 2777 2388 -14.0% 1.16x
ClassArrayGetter 14 13 -7.1% 1.08x
ReversedDictionary 119 113 -5.0% 1.05x (?)
No Changes (274)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 2940 2943 +0.1% 1.00x (?)
AnyHashableWithAClass 66908 66976 +0.1% 1.00x
Array2D 2043 2060 +0.8% 0.99x (?)
ArrayAppend 776 775 -0.1% 1.00x (?)
ArrayAppendArrayOfInt 597 596 -0.2% 1.00x (?)
ArrayAppendAscii 22290 22260 -0.1% 1.00x
ArrayAppendFromGeneric 596 596 +0.0% 1.00x
ArrayAppendGenericStructs 1239 1241 +0.2% 1.00x (?)
ArrayAppendLatin1 43109 43080 -0.1% 1.00x (?)
ArrayAppendLazyMap 996 995 -0.1% 1.00x (?)
ArrayAppendOptionals 1230 1229 -0.1% 1.00x (?)
ArrayAppendRepeatCol 840 838 -0.2% 1.00x
ArrayAppendReserved 534 533 -0.2% 1.00x (?)
ArrayAppendSequence 948 953 +0.5% 0.99x
ArrayAppendStrings 13646 13650 +0.0% 1.00x (?)
ArrayAppendToFromGeneric 596 597 +0.2% 1.00x (?)
ArrayAppendToGeneric 596 596 +0.0% 1.00x
ArrayAppendUTF16 41194 41200 +0.0% 1.00x (?)
ArrayLiteral 1210 1219 +0.7% 0.99x
ArrayOfGenericPOD 219 219 +0.0% 1.00x
ArrayOfGenericRef 4026 4018 -0.2% 1.00x (?)
ArrayOfPOD 166 166 +0.0% 1.00x
ArrayOfRef 3914 3913 -0.0% 1.00x (?)
ArrayPlusEqualArrayOfInt 597 596 -0.2% 1.00x
ArrayPlusEqualFiveElementCollection 4667 4721 +1.2% 0.99x (?)
ArrayPlusEqualSingleElementCollection 776 776 +0.0% 1.00x
ArrayPlusEqualThreeElements 1592 1593 +0.1% 1.00x (?)
ArraySubscript 1482 1486 +0.3% 1.00x (?)
ArrayValueProp 6 6 +0.0% 1.00x
ArrayValueProp2 6 6 +0.0% 1.00x
ArrayValueProp3 6 6 +0.0% 1.00x
ArrayValueProp4 6 6 +0.0% 1.00x
BitCount 144 141 -2.1% 1.02x (?)
ByteSwap 115 116 +0.9% 0.99x
CStringLongAscii 5162 5183 +0.4% 1.00x (?)
CStringLongNonAscii 2303 2300 -0.1% 1.00x
CStringShortAscii 5620 5632 +0.2% 1.00x (?)
Calculator 36 36 +0.0% 1.00x
CaptureProp 4601 4771 +3.7% 0.96x
CharacterLiteralsLarge 5948 5895 -0.9% 1.01x
CharacterLiteralsSmall 404 404 +0.0% 1.00x
Chars 945 947 +0.2% 1.00x
DeadArray 186 186 +0.0% 1.00x
Dictionary 555 560 +0.9% 0.99x
Dictionary2 1819 1810 -0.5% 1.00x
Dictionary2OfObjects 3299 3298 -0.0% 1.00x (?)
Dictionary3 438 441 +0.7% 0.99x
Dictionary3OfObjects 884 885 +0.1% 1.00x (?)
DictionaryBridge 2685 2705 +0.7% 0.99x (?)
DictionaryGroup 134 131 -2.2% 1.02x (?)
DictionaryGroupOfObjects 1646 1641 -0.3% 1.00x
DictionaryLiteral 1471 1480 +0.6% 0.99x
DictionaryOfObjects 2309 2315 +0.3% 1.00x (?)
DictionaryRemoveOfObjects 23315 23414 +0.4% 1.00x
DictionarySwap 429 429 +0.0% 1.00x
DictionarySwapOfObjects 6957 6918 -0.6% 1.01x (?)
DropFirstAnyCollection 56 56 +0.0% 1.00x
DropFirstAnyCollectionLazy 45007 45077 +0.2% 1.00x (?)
DropFirstAnySeqCRangeIter 27294 27263 -0.1% 1.00x (?)
DropFirstAnySeqCRangeIterLazy 27313 27271 -0.2% 1.00x
DropFirstAnySeqCntRange 50 50 +0.0% 1.00x
DropFirstAnySeqCntRangeLazy 50 50 +0.0% 1.00x
DropFirstAnySequence 5662 5655 -0.1% 1.00x
DropFirstAnySequenceLazy 5666 5664 -0.0% 1.00x (?)
DropFirstArray 24 24 +0.0% 1.00x
DropFirstArrayLazy 24 24 +0.0% 1.00x
DropFirstCountableRange 32 32 +0.0% 1.00x
DropFirstCountableRangeLazy 32 32 +0.0% 1.00x
DropFirstSequence 2097 2093 -0.2% 1.00x
DropFirstSequenceLazy 2118 2118 +0.0% 1.00x
DropLastAnyCollection 22 22 +0.0% 1.00x
DropLastAnyCollectionLazy 15018 15045 +0.2% 1.00x
DropLastAnySeqCRangeIter 4574 4573 -0.0% 1.00x (?)
DropLastAnySeqCRangeIterLazy 4572 4576 +0.1% 1.00x (?)
DropLastAnySeqCntRange 16 16 +0.0% 1.00x
DropLastAnySeqCntRangeLazy 16 16 +0.0% 1.00x
DropLastAnySequence 6747 6651 -1.4% 1.01x (?)
DropLastAnySequenceLazy 6503 6509 +0.1% 1.00x
DropLastArray 8 8 +0.0% 1.00x
DropLastArrayLazy 8 8 +0.0% 1.00x
DropLastCountableRange 10 10 +0.0% 1.00x
DropLastCountableRangeLazy 10 10 +0.0% 1.00x
DropLastSequence 599 604 +0.8% 0.99x (?)
DropLastSequenceLazy 600 603 +0.5% 1.00x (?)
DropWhileAnyCollection 70 70 +0.0% 1.00x
DropWhileAnyCollectionLazy 103 103 +0.0% 1.00x
DropWhileAnySeqCRangeIter 21807 21804 -0.0% 1.00x (?)
DropWhileAnySeqCRangeIterLazy 103 103 +0.0% 1.00x
DropWhileAnySeqCntRange 64 64 +0.0% 1.00x
DropWhileAnySeqCntRangeLazy 103 103 +0.0% 1.00x
DropWhileAnySequence 6554 6552 -0.0% 1.00x (?)
DropWhileAnySequenceLazy 2032 2032 +0.0% 1.00x
DropWhileArray 37 37 +0.0% 1.00x
DropWhileArrayLazy 78 78 +0.0% 1.00x
DropWhileCountableRange 36 36 +0.0% 1.00x
DropWhileCountableRangeLazy 68 68 +0.0% 1.00x
DropWhileSequence 1548 1548 +0.0% 1.00x
DropWhileSequenceLazy 65 65 +0.0% 1.00x
EqualStringSubstring 384 385 +0.3% 1.00x
EqualSubstringString 383 382 -0.3% 1.00x
EqualSubstringSubstring 383 385 +0.5% 0.99x
EqualSubstringSubstringGenericEquatable 387 389 +0.5% 0.99x
ErrorHandling 2883 2824 -2.0% 1.02x (?)
Hanoi 3518 3683 +4.7% 0.96x
HashTest 1683 1676 -0.4% 1.00x (?)
Histogram 297 296 -0.3% 1.00x
Integrate 266 265 -0.4% 1.00x
IterateData 761 759 -0.3% 1.00x
Join 368 381 +3.5% 0.97x (?)
LazilyFilteredArrays 64212 64353 +0.2% 1.00x (?)
LazilyFilteredRange 3891 3888 -0.1% 1.00x (?)
LessSubstringSubstring 384 384 +0.0% 1.00x
LessSubstringSubstringGenericComparable 385 385 +0.0% 1.00x
LinkedList 7059 7096 +0.5% 0.99x
MapReduce 304 304 +0.0% 1.00x
MapReduceAnyCollection 333 332 -0.3% 1.00x
MapReduceAnyCollectionShort 2000 2012 +0.6% 0.99x
MapReduceClass 3053 3040 -0.4% 1.00x
MapReduceClassShort 4518 4535 +0.4% 1.00x
MapReduceLazyCollection 15 15 +0.0% 1.00x
MapReduceLazyCollectionShort 44 44 +0.0% 1.00x
MapReduceLazySequence 90 90 +0.0% 1.00x
MapReduceSequence 469 468 -0.2% 1.00x (?)
MapReduceShort 1899 1896 -0.2% 1.00x (?)
MapReduceShortString 20 20 +0.0% 1.00x
MapReduceString 80 81 +1.2% 0.99x
Memset 234 235 +0.4% 1.00x
MonteCarloE 10287 10261 -0.3% 1.00x
MonteCarloPi 44079 44090 +0.0% 1.00x
NSDictionaryCastToSwift 5504 5395 -2.0% 1.02x
NSError 290 290 +0.0% 1.00x
NSStringConversion 763 760 -0.4% 1.00x (?)
NopDeinit 30164 30123 -0.1% 1.00x (?)
ObjectAllocation 179 179 +0.0% 1.00x
ObjectiveCBridgeFromNSArrayAnyObject 24606 24582 -0.1% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 6155 6128 -0.4% 1.00x
ObjectiveCBridgeFromNSArrayAnyObjectToString 50718 50685 -0.1% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 45579 45829 +0.5% 0.99x (?)
ObjectiveCBridgeFromNSDictionaryAnyObject 118780 118948 +0.1% 1.00x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectForced 5124 5113 -0.2% 1.00x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectToString 106897 106040 -0.8% 1.01x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced 112818 112889 +0.1% 1.00x (?)
ObjectiveCBridgeFromNSSetAnyObject 65362 64642 -1.1% 1.01x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 4220 4195 -0.6% 1.01x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 84528 81735 -3.3% 1.03x (?)
ObjectiveCBridgeFromNSSetAnyObjectToStringForced 79364 78867 -0.6% 1.01x (?)
ObjectiveCBridgeFromNSString 2123 2122 -0.0% 1.00x (?)
ObjectiveCBridgeFromNSStringForced 2974 2972 -0.1% 1.00x (?)
ObjectiveCBridgeStubDataAppend 3697 3795 +2.7% 0.97x (?)
ObjectiveCBridgeStubDateAccess 181 181 +0.0% 1.00x
ObjectiveCBridgeStubDateMutation 272 272 +0.0% 1.00x
ObjectiveCBridgeStubFromArrayOfNSString 31627 31698 +0.2% 1.00x (?)
ObjectiveCBridgeStubFromNSDate 3613 3649 +1.0% 0.99x
ObjectiveCBridgeStubFromNSDateRef 4034 4155 +3.0% 0.97x
ObjectiveCBridgeStubFromNSString 1100 1107 +0.6% 0.99x (?)
ObjectiveCBridgeStubFromNSStringRef 140 143 +2.1% 0.98x
ObjectiveCBridgeStubNSDateMutationRef 12814 12416 -3.1% 1.03x (?)
ObjectiveCBridgeStubNSDateRefAccess 340 339 -0.3% 1.00x
ObjectiveCBridgeStubToArrayOfNSString 28940 29026 +0.3% 1.00x (?)
ObjectiveCBridgeStubToNSDate 14574 14933 +2.5% 0.98x (?)
ObjectiveCBridgeStubToNSDateRef 3296 3302 +0.2% 1.00x (?)
ObjectiveCBridgeStubToNSString 1518 1518 +0.0% 1.00x
ObjectiveCBridgeStubToNSStringRef 108 108 +0.0% 1.00x
ObjectiveCBridgeStubURLAppendPath 217731 220631 +1.3% 0.99x (?)
ObjectiveCBridgeStubURLAppendPathRef 221897 220885 -0.5% 1.00x (?)
ObjectiveCBridgeToNSArray 28369 28637 +0.9% 0.99x (?)
ObjectiveCBridgeToNSDictionary 46424 46374 -0.1% 1.00x (?)
ObjectiveCBridgeToNSSet 40109 39876 -0.6% 1.01x (?)
ObjectiveCBridgeToNSString 1273 1273 +0.0% 1.00x
ObserverClosure 2375 2389 +0.6% 0.99x
ObserverForwarderStruct 1099 1112 +1.2% 0.99x (?)
ObserverPartiallyAppliedMethod 3722 3756 +0.9% 0.99x
ObserverUnappliedMethod 2697 2701 +0.1% 1.00x (?)
OpenClose 51 51 +0.0% 1.00x
Phonebook 6340 6519 +2.8% 0.97x
PolymorphicCalls 21 22 +4.8% 0.95x
PopFrontArray 1201 1200 -0.1% 1.00x
PopFrontArrayGeneric 1201 1200 -0.1% 1.00x (?)
PopFrontUnsafePointer 9506 9530 +0.3% 1.00x
PrefixAnyCollection 56 56 +0.0% 1.00x
PrefixAnyCollectionLazy 44953 45091 +0.3% 1.00x
PrefixAnySeqCRangeIter 21478 21503 +0.1% 1.00x
PrefixAnySeqCRangeIterLazy 21458 21508 +0.2% 1.00x
PrefixAnySeqCntRange 50 50 +0.0% 1.00x
PrefixAnySeqCntRangeLazy 50 50 +0.0% 1.00x
PrefixAnySequence 5045 4999 -0.9% 1.01x
PrefixAnySequenceLazy 5060 4999 -1.2% 1.01x
PrefixArray 24 25 +4.2% 0.96x
PrefixArrayLazy 24 25 +4.2% 0.96x
PrefixCountableRange 32 32 +0.0% 1.00x
PrefixCountableRangeLazy 32 32 +0.0% 1.00x
PrefixSequence 1571 1571 +0.0% 1.00x
PrefixSequenceLazy 1515 1515 +0.0% 1.00x
PrefixWhileAnyCollection 96 96 +0.0% 1.00x
PrefixWhileAnyCollectionLazy 75 75 +0.0% 1.00x
PrefixWhileAnySeqCRangeIter 12406 12408 +0.0% 1.00x (?)
PrefixWhileAnySeqCRangeIterLazy 75 75 +0.0% 1.00x
PrefixWhileAnySeqCntRange 90 90 +0.0% 1.00x
PrefixWhileAnySeqCntRangeLazy 75 75 +0.0% 1.00x
PrefixWhileAnySequence 14069 13983 -0.6% 1.01x
PrefixWhileAnySequenceLazy 1492 1492 +0.0% 1.00x
PrefixWhileArray 62 62 +0.0% 1.00x
PrefixWhileArrayLazy 49 49 +0.0% 1.00x
PrefixWhileCountableRange 36 36 +0.0% 1.00x
PrefixWhileCountableRangeLazy 32 32 +0.0% 1.00x
PrefixWhileSequence 315 317 +0.6% 0.99x
PrefixWhileSequenceLazy 28 28 +0.0% 1.00x
Prims 806 803 -0.4% 1.00x (?)
ProtocolDispatch 3031 3031 +0.0% 1.00x
ProtocolDispatch2 171 171 +0.0% 1.00x
RC4 159 159 +0.0% 1.00x
RGBHistogram 2356 2356 +0.0% 1.00x
RGBHistogramOfObjects 24370 24431 +0.3% 1.00x (?)
RangeAssignment 312 306 -1.9% 1.02x (?)
RecursiveOwnedParameter 2326 2328 +0.1% 1.00x (?)
ReversedArray 53 52 -1.9% 1.02x
ReversedBidirectional 28927 29019 +0.3% 1.00x
SetExclusiveOr 3004 3032 +0.9% 0.99x
SetExclusiveOr_OfObjects 9508 9511 +0.0% 1.00x (?)
SetIntersect 295 295 +0.0% 1.00x
SetIntersect_OfObjects 1721 1716 -0.3% 1.00x (?)
SetIsSubsetOf 292 292 +0.0% 1.00x
SetIsSubsetOf_OfObjects 359 359 +0.0% 1.00x
SetUnion 2707 2746 +1.4% 0.99x
SetUnion_OfObjects 7955 8085 +1.6% 0.98x (?)
SevenBoom 1469 1470 +0.1% 1.00x (?)
Sim2DArray 276 276 +0.0% 1.00x
SortLargeExistentials 7918 7955 +0.5% 1.00x
SortLettersInPlace 1148 1148 +0.0% 1.00x
SortSortedStrings 878 884 +0.7% 0.99x
SortStrings 1669 1692 +1.4% 0.99x
SortStringsUnicode 7899 7901 +0.0% 1.00x (?)
StackPromo 23647 23732 +0.4% 1.00x
StaticArray 18 18 +0.0% 1.00x
StrComplexWalk 720 720 +0.0% 1.00x
StrToInt 2015 2052 +1.8% 0.98x
StringAdder 3474 3477 +0.1% 1.00x (?)
StringBuilder 1048 1033 -1.4% 1.01x
StringBuilderLong 926 926 +0.0% 1.00x
StringEdits 105435 105708 +0.3% 1.00x (?)
StringEqualPointerComparison 333 333 +0.0% 1.00x
StringFromLongWholeSubstring 10215 10235 +0.2% 1.00x (?)
StringFromLongWholeSubstringGeneric 22 22 +0.0% 1.00x
StringHasPrefix 33 33 +0.0% 1.00x
StringHasPrefixUnicode 14449 14375 -0.5% 1.01x
StringHasSuffix 33 33 +0.0% 1.00x
StringHasSuffixUnicode 61377 61318 -0.1% 1.00x
StringInterpolation 10710 10758 +0.4% 1.00x (?)
StringMatch 7269 7466 +2.7% 0.97x
StringUTF16Builder 1874 1894 +1.1% 0.99x (?)
StringWalk 1270 1274 +0.3% 1.00x
StringWithCString 68579 68572 -0.0% 1.00x (?)
SubstringComparable 1530 1536 +0.4% 1.00x (?)
SubstringEqualString 1426 1428 +0.1% 1.00x
SubstringEquatable 3359 3383 +0.7% 0.99x
SubstringFromLongString 109 111 +1.8% 0.98x
SubstringFromLongStringGeneric 176 176 +0.0% 1.00x
SuffixAnyCollection 22 22 +0.0% 1.00x
SuffixAnyCollectionLazy 14953 14952 -0.0% 1.00x (?)
SuffixAnySeqCRangeIter 4895 4900 +0.1% 1.00x
SuffixAnySeqCRangeIterLazy 4898 4901 +0.1% 1.00x (?)
SuffixAnySeqCntRange 16 16 +0.0% 1.00x
SuffixAnySeqCntRangeLazy 16 16 +0.0% 1.00x
SuffixAnySequence 6621 6694 +1.1% 0.99x
SuffixAnySequenceLazy 6557 6564 +0.1% 1.00x (?)
SuffixArrayLazy 8 8 +0.0% 1.00x
SuffixSequence 4453 4437 -0.4% 1.00x
SuffixSequenceLazy 4456 4440 -0.4% 1.00x (?)
SuperChars 81419 81091 -0.4% 1.00x
TwoSum 970 971 +0.1% 1.00x
TypeFlood 0 0 +0.0% 1.00x
UTF8Decode 257 254 -1.2% 1.01x
Walsh 355 352 -0.8% 1.01x
XorLoop 347 347 +0.0% 1.00x
Added (28)
TEST MIN MAX MEAN MAX_RSS
CharIndexing_ascii_unicodeScalars 15000 15346 15116 10641408
CharIndexing_ascii_unicodeScalars_Backwards 14046 14054 14049 10649600
CharIndexing_chinese_unicodeScalars 11363 11365 11364 10973184
CharIndexing_chinese_unicodeScalars_Backwards 10643 10649 10646 10969088
CharIndexing_japanese_unicodeScalars 17955 17964 17958 10964992
CharIndexing_japanese_unicodeScalars_Backwards 16798 16801 16799 10973184
CharIndexing_korean_unicodeScalars 14545 14557 14550 10641408
CharIndexing_korean_unicodeScalars_Backwards 13604 13604 13604 10645504
CharIndexing_russian_unicodeScalars 12500 12505 12502 10649600
CharIndexing_russian_unicodeScalars_Backwards 11694 11698 11696 10649600
CharIndexing_tweet_unicodeScalars 29577 29705 29645 10969088
CharIndexing_tweet_unicodeScalars_Backwards 27619 27710 27650 10969088
CharIndexing_utf16_unicodeScalars 81502 81531 81515 10997760
CharIndexing_utf16_unicodeScalars_Backwards 96653 96703 96678 11003221
CharIteration_ascii_unicodeScalars 16396 16402 16400 10637312
CharIteration_ascii_unicodeScalars_Backwards 18949 18961 18957 10641408
CharIteration_chinese_unicodeScalars 12416 12423 12419 10964992
CharIteration_chinese_unicodeScalars_Backwards 14363 14380 14370 10969088
CharIteration_japanese_unicodeScalars 19628 19638 19634 10956800
CharIteration_japanese_unicodeScalars_Backwards 22694 22733 22712 10960896
CharIteration_korean_unicodeScalars 15901 15912 15905 10657792
CharIteration_korean_unicodeScalars_Backwards 18372 18380 18375 10645504
CharIteration_russian_unicodeScalars 13661 13672 13668 10655061
CharIteration_russian_unicodeScalars_Backwards 15777 15783 15780 10645504
CharIteration_tweet_unicodeScalars 32285 32292 32288 10964992
CharIteration_tweet_unicodeScalars_Backwards 37500 37637 37555 10964992
CharIteration_utf16_unicodeScalars 91653 91690 91676 11001856
CharIteration_utf16_unicodeScalars_Backwards 134897 134959 134925 11003221

Unoptimized (Onone)

Regression (5)
TEST OLD NEW DELTA SPEEDUP
Chars 48915 52731 +7.8% 0.93x
ObjectiveCBridgeStubDateMutation 485 515 +6.2% 0.94x
TypeFlood 162 172 +6.2% 0.94x (?)
ObjectiveCBridgeFromNSSetAnyObjectToStringForced 83346 88238 +5.9% 0.94x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectForced 7277 7695 +5.7% 0.95x (?)
Improvement (4)
TEST OLD NEW DELTA SPEEDUP
Sim2DArray 34568 30015 -13.2% 1.15x
BitCount 1745 1579 -9.5% 1.11x
ObserverForwarderStruct 5163 4787 -7.3% 1.08x
ArrayInClass 7147 6683 -6.5% 1.07x
No Changes (273)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 4987 4918 -1.4% 1.01x
AnyHashableWithAClass 84482 84298 -0.2% 1.00x
Array2D 604660 606050 +0.2% 1.00x
ArrayAppend 3686 3783 +2.6% 0.97x
ArrayAppendArrayOfInt 649 650 +0.2% 1.00x (?)
ArrayAppendAscii 62107 61647 -0.7% 1.01x (?)
ArrayAppendFromGeneric 653 653 +0.0% 1.00x
ArrayAppendGenericStructs 1291 1298 +0.5% 0.99x (?)
ArrayAppendLatin1 87257 87132 -0.1% 1.00x
ArrayAppendLazyMap 209624 212221 +1.2% 0.99x
ArrayAppendOptionals 1305 1294 -0.8% 1.01x
ArrayAppendRepeatCol 213881 214151 +0.1% 1.00x (?)
ArrayAppendReserved 3430 3424 -0.2% 1.00x (?)
ArrayAppendSequence 76122 76136 +0.0% 1.00x (?)
ArrayAppendStrings 13798 13790 -0.1% 1.00x (?)
ArrayAppendToFromGeneric 650 653 +0.5% 1.00x
ArrayAppendToGeneric 655 654 -0.2% 1.00x
ArrayAppendUTF16 85187 84954 -0.3% 1.00x (?)
ArrayLiteral 1729 1738 +0.5% 0.99x
ArrayOfGenericPOD 3000 3000 +0.0% 1.00x
ArrayOfGenericRef 10218 10194 -0.2% 1.00x (?)
ArrayOfPOD 1892 1891 -0.1% 1.00x (?)
ArrayOfRef 9243 9204 -0.4% 1.00x
ArrayPlusEqualArrayOfInt 649 651 +0.3% 1.00x
ArrayPlusEqualFiveElementCollection 298748 293594 -1.7% 1.02x
ArrayPlusEqualSingleElementCollection 292645 295119 +0.8% 0.99x (?)
ArrayPlusEqualThreeElements 10321 10458 +1.3% 0.99x
ArraySubscript 4207 4292 +2.0% 0.98x
ArrayValueProp 3574 3532 -1.2% 1.01x (?)
ArrayValueProp2 18292 18326 +0.2% 1.00x (?)
ArrayValueProp3 3972 3915 -1.4% 1.01x
ArrayValueProp4 3878 3808 -1.8% 1.02x
ByteSwap 4151 4139 -0.3% 1.00x (?)
CStringLongAscii 5308 5326 +0.3% 1.00x
CStringLongNonAscii 2522 2509 -0.5% 1.01x
CStringShortAscii 9342 9324 -0.2% 1.00x (?)
Calculator 1171 1156 -1.3% 1.01x
CaptureProp 108593 109941 +1.2% 0.99x (?)
CharacterLiteralsLarge 6150 6097 -0.9% 1.01x
CharacterLiteralsSmall 667 663 -0.6% 1.01x (?)
ClassArrayGetter 1015 1015 +0.0% 1.00x
DeadArray 117015 115782 -1.1% 1.01x
Dictionary 3022 2992 -1.0% 1.01x (?)
Dictionary2 3458 3450 -0.2% 1.00x (?)
Dictionary2OfObjects 6200 6195 -0.1% 1.00x (?)
Dictionary3 1307 1312 +0.4% 1.00x
Dictionary3OfObjects 2368 2351 -0.7% 1.01x (?)
DictionaryBridge 2798 2779 -0.7% 1.01x (?)
DictionaryGroup 4963 5027 +1.3% 0.99x
DictionaryGroupOfObjects 8191 8182 -0.1% 1.00x (?)
DictionaryLiteral 8262 8270 +0.1% 1.00x (?)
DictionaryOfObjects 6705 6717 +0.2% 1.00x (?)
DictionaryRemove 20937 21021 +0.4% 1.00x
DictionaryRemoveOfObjects 60558 60097 -0.8% 1.01x (?)
DictionarySwap 5401 5487 +1.6% 0.98x
DictionarySwapOfObjects 23515 23887 +1.6% 0.98x
DropFirstAnyCollection 19635 19174 -2.3% 1.02x
DropFirstAnyCollectionLazy 136434 138165 +1.3% 0.99x (?)
DropFirstAnySeqCRangeIter 29055 29090 +0.1% 1.00x
DropFirstAnySeqCRangeIterLazy 29007 29083 +0.3% 1.00x
DropFirstAnySeqCntRange 19138 19174 +0.2% 1.00x (?)
DropFirstAnySeqCntRangeLazy 19118 19147 +0.2% 1.00x
DropFirstAnySequence 12824 12798 -0.2% 1.00x
DropFirstAnySequenceLazy 13278 13035 -1.8% 1.02x
DropFirstArray 6178 6202 +0.4% 1.00x
DropFirstArrayLazy 45453 45307 -0.3% 1.00x
DropFirstCountableRange 340 340 +0.0% 1.00x
DropFirstCountableRangeLazy 38777 38738 -0.1% 1.00x (?)
DropFirstSequence 11741 11757 +0.1% 1.00x (?)
DropFirstSequenceLazy 12163 12118 -0.4% 1.00x
DropLastAnyCollection 6477 6424 -0.8% 1.01x
DropLastAnyCollectionLazy 45552 45431 -0.3% 1.00x (?)
DropLastAnySeqCRangeIter 43816 43936 +0.3% 1.00x
DropLastAnySeqCRangeIterLazy 44374 44206 -0.4% 1.00x (?)
DropLastAnySeqCntRange 6480 6399 -1.2% 1.01x
DropLastAnySeqCntRangeLazy 6374 6398 +0.4% 1.00x (?)
DropLastAnySequence 29248 29049 -0.7% 1.01x
DropLastAnySequenceLazy 29503 29115 -1.3% 1.01x
DropLastArray 2071 2072 +0.0% 1.00x
DropLastArrayLazy 15175 15095 -0.5% 1.01x (?)
DropLastCountableRange 118 118 +0.0% 1.00x
DropLastCountableRangeLazy 12893 12896 +0.0% 1.00x (?)
DropLastSequence 29190 28746 -1.5% 1.02x
DropLastSequenceLazy 28920 29104 +0.6% 0.99x
DropWhileAnyCollection 25432 25175 -1.0% 1.01x (?)
DropWhileAnyCollectionLazy 27399 27278 -0.4% 1.00x (?)
DropWhileAnySeqCRangeIter 31329 31396 +0.2% 1.00x
DropWhileAnySeqCRangeIterLazy 27527 27651 +0.5% 1.00x (?)
DropWhileAnySeqCntRange 25112 24989 -0.5% 1.00x
DropWhileAnySeqCntRangeLazy 27699 27451 -0.9% 1.01x (?)
DropWhileAnySequence 15217 15298 +0.5% 0.99x
DropWhileAnySequenceLazy 12369 12482 +0.9% 0.99x (?)
DropWhileArray 9789 9768 -0.2% 1.00x
DropWhileArrayLazy 16857 16887 +0.2% 1.00x
DropWhileCountableRange 6198 6084 -1.8% 1.02x
DropWhileCountableRangeLazy 26050 26083 +0.1% 1.00x (?)
DropWhileSequence 14334 14267 -0.5% 1.00x (?)
DropWhileSequenceLazy 11189 11218 +0.3% 1.00x
EqualStringSubstring 657 665 +1.2% 0.99x
EqualSubstringString 654 657 +0.5% 1.00x
EqualSubstringSubstring 765 763 -0.3% 1.00x (?)
EqualSubstringSubstringGenericEquatable 416 414 -0.5% 1.00x (?)
ErrorHandling 6636 6735 +1.5% 0.99x (?)
Hanoi 18351 18688 +1.8% 0.98x
HashTest 18344 18551 +1.1% 0.99x (?)
Histogram 9277 8842 -4.7% 1.05x
Integrate 738 735 -0.4% 1.00x
IterateData 12926 12787 -1.1% 1.01x
Join 1175 1181 +0.5% 0.99x (?)
LazilyFilteredArrays 1702963 1691526 -0.7% 1.01x (?)
LazilyFilteredRange 688794 686471 -0.3% 1.00x (?)
LessSubstringSubstring 765 772 +0.9% 0.99x
LessSubstringSubstringGenericComparable 436 434 -0.5% 1.00x
LinkedList 42730 42798 +0.2% 1.00x (?)
MapReduce 37649 37589 -0.2% 1.00x (?)
MapReduceAnyCollection 37460 37531 +0.2% 1.00x
MapReduceAnyCollectionShort 50043 49995 -0.1% 1.00x (?)
MapReduceClass 42376 42751 +0.9% 0.99x
MapReduceClassShort 54062 54019 -0.1% 1.00x (?)
MapReduceLazyCollection 32390 32511 +0.4% 1.00x (?)
MapReduceLazyCollectionShort 43542 43430 -0.3% 1.00x (?)
MapReduceLazySequence 25276 26009 +2.9% 0.97x
MapReduceSequence 40854 41440 +1.4% 0.99x
MapReduceShort 49672 49601 -0.1% 1.00x (?)
MapReduceShortString 271 273 +0.7% 0.99x (?)
MapReduceString 2548 2560 +0.5% 1.00x
Memset 43998 45713 +3.9% 0.96x
MonteCarloE 142125 135987 -4.3% 1.05x
MonteCarloPi 52518 52507 -0.0% 1.00x (?)
NSDictionaryCastToSwift 6640 6622 -0.3% 1.00x (?)
NSError 710 704 -0.8% 1.01x (?)
NSStringConversion 805 799 -0.7% 1.01x
NopDeinit 190065 193085 +1.6% 0.98x
ObjectAllocation 1462 1464 +0.1% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObject 27037 27077 +0.1% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 9416 9350 -0.7% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 52053 51611 -0.8% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 46642 46228 -0.9% 1.01x (?)
ObjectiveCBridgeFromNSDictionaryAnyObject 121342 122581 +1.0% 0.99x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectToString 111424 112223 +0.7% 0.99x (?)
ObjectiveCBridgeFromNSDictionaryAnyObjectToStringForced 118036 114416 -3.1% 1.03x (?)
ObjectiveCBridgeFromNSSetAnyObject 68517 68493 -0.0% 1.00x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 7406 7343 -0.9% 1.01x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 84728 83907 -1.0% 1.01x (?)
ObjectiveCBridgeFromNSString 5234 5171 -1.2% 1.01x
ObjectiveCBridgeFromNSStringForced 3305 3321 +0.5% 1.00x (?)
ObjectiveCBridgeStubDataAppend 3774 3839 +1.7% 0.98x
ObjectiveCBridgeStubDateAccess 1031 1061 +2.9% 0.97x
ObjectiveCBridgeStubFromArrayOfNSString 31642 31623 -0.1% 1.00x (?)
ObjectiveCBridgeStubFromNSDate 3778 3801 +0.6% 0.99x
ObjectiveCBridgeStubFromNSDateRef 4422 4317 -2.4% 1.02x (?)
ObjectiveCBridgeStubFromNSString 1128 1134 +0.5% 0.99x
ObjectiveCBridgeStubFromNSStringRef 184 176 -4.3% 1.05x
ObjectiveCBridgeStubNSDataAppend 2754 2691 -2.3% 1.02x (?)
ObjectiveCBridgeStubNSDateMutationRef 16267 15882 -2.4% 1.02x
ObjectiveCBridgeStubNSDateRefAccess 1213 1215 +0.2% 1.00x (?)
ObjectiveCBridgeStubToArrayOfNSString 28824 28988 +0.6% 0.99x (?)
ObjectiveCBridgeStubToNSDate 15358 15159 -1.3% 1.01x (?)
ObjectiveCBridgeStubToNSDateRef 3414 3320 -2.8% 1.03x
ObjectiveCBridgeStubToNSString 1563 1563 +0.0% 1.00x
ObjectiveCBridgeStubToNSStringRef 148 148 +0.0% 1.00x
ObjectiveCBridgeStubURLAppendPath 222946 218665 -1.9% 1.02x (?)
ObjectiveCBridgeStubURLAppendPathRef 222253 225316 +1.4% 0.99x (?)
ObjectiveCBridgeToNSArray 29516 30035 +1.8% 0.98x
ObjectiveCBridgeToNSDictionary 46971 46940 -0.1% 1.00x (?)
ObjectiveCBridgeToNSSet 40895 40348 -1.3% 1.01x (?)
ObjectiveCBridgeToNSString 1311 1298 -1.0% 1.01x
ObserverClosure 6803 6784 -0.3% 1.00x (?)
ObserverPartiallyAppliedMethod 8281 8199 -1.0% 1.01x
ObserverUnappliedMethod 8723 8610 -1.3% 1.01x
OpenClose 398 395 -0.8% 1.01x
Phonebook 21656 21674 +0.1% 1.00x
PolymorphicCalls 5465 5496 +0.6% 0.99x
PopFrontArray 7570 7532 -0.5% 1.01x
PopFrontArrayGeneric 6488 6536 +0.7% 0.99x (?)
PopFrontUnsafePointer 98864 98697 -0.2% 1.00x (?)
PrefixAnyCollection 19498 19173 -1.7% 1.02x
PrefixAnyCollectionLazy 137771 136231 -1.1% 1.01x
PrefixAnySeqCRangeIter 23133 23222 +0.4% 1.00x
PrefixAnySeqCRangeIterLazy 23161 23242 +0.3% 1.00x
PrefixAnySeqCntRange 19130 19197 +0.4% 1.00x (?)
PrefixAnySeqCntRangeLazy 19118 19182 +0.3% 1.00x
PrefixAnySequence 10721 10751 +0.3% 1.00x
PrefixAnySequenceLazy 10898 11099 +1.8% 0.98x
PrefixArray 6194 6198 +0.1% 1.00x
PrefixArrayLazy 45463 44943 -1.1% 1.01x (?)
PrefixCountableRange 339 339 +0.0% 1.00x
PrefixCountableRangeLazy 38770 38951 +0.5% 1.00x (?)
PrefixSequence 9615 9632 +0.2% 1.00x
PrefixSequenceLazy 9791 9647 -1.5% 1.01x (?)
PrefixWhileAnyCollection 36650 36544 -0.3% 1.00x
PrefixWhileAnyCollectionLazy 22457 22563 +0.5% 1.00x (?)
PrefixWhileAnySeqCRangeIter 40672 40835 +0.4% 1.00x
PrefixWhileAnySeqCRangeIterLazy 22620 22652 +0.1% 1.00x (?)
PrefixWhileAnySeqCntRange 36720 36803 +0.2% 1.00x (?)
PrefixWhileAnySeqCntRangeLazy 22442 22568 +0.6% 0.99x
PrefixWhileAnySequence 29892 29627 -0.9% 1.01x
PrefixWhileAnySequenceLazy 11311 11268 -0.4% 1.00x
PrefixWhileArray 16774 16821 +0.3% 1.00x
PrefixWhileArrayLazy 14640 14606 -0.2% 1.00x
PrefixWhileCountableRange 17893 17485 -2.3% 1.02x
PrefixWhileCountableRangeLazy 21593 21642 +0.2% 1.00x
PrefixWhileSequence 28480 28443 -0.1% 1.00x
PrefixWhileSequenceLazy 10474 10496 +0.2% 1.00x (?)
Prims 10172 10164 -0.1% 1.00x (?)
ProtocolDispatch 7156 6960 -2.7% 1.03x
ProtocolDispatch2 491 491 +0.0% 1.00x
RC4 19116 19016 -0.5% 1.01x
RGBHistogram 34044 34205 +0.5% 1.00x (?)
RGBHistogramOfObjects 110480 109838 -0.6% 1.01x (?)
RangeAssignment 5684 5713 +0.5% 0.99x
RecursiveOwnedParameter 11790 11792 +0.0% 1.00x (?)
ReversedArray 44781 44293 -1.1% 1.01x
ReversedBidirectional 75775 76517 +1.0% 0.99x (?)
ReversedDictionary 28573 28906 +1.2% 0.99x
SetExclusiveOr 20725 20714 -0.1% 1.00x (?)
SetExclusiveOr_OfObjects 48992 48890 -0.2% 1.00x
SetIntersect 10260 10342 +0.8% 0.99x
SetIntersect_OfObjects 12353 12401 +0.4% 1.00x
SetIsSubsetOf 1583 1580 -0.2% 1.00x (?)
SetIsSubsetOf_OfObjects 1517 1514 -0.2% 1.00x
SetUnion 11711 11788 +0.7% 0.99x
SetUnion_OfObjects 34022 34104 +0.2% 1.00x
SevenBoom 1588 1607 +1.2% 0.99x
SortLargeExistentials 17903 17775 -0.7% 1.01x (?)
SortLettersInPlace 3239 3251 +0.4% 1.00x (?)
SortSortedStrings 1423 1428 +0.4% 1.00x (?)
SortStrings 2467 2456 -0.4% 1.00x
SortStringsUnicode 8995 8944 -0.6% 1.01x
StackPromo 102325 99875 -2.4% 1.02x
StaticArray 4564 4563 -0.0% 1.00x (?)
StrComplexWalk 6775 6763 -0.2% 1.00x (?)
StrToInt 102025 101112 -0.9% 1.01x (?)
StringAdder 3806 3718 -2.3% 1.02x (?)
StringBuilder 6971 6980 +0.1% 1.00x (?)
StringBuilderLong 1101 1107 +0.5% 0.99x
StringEdits 371458 374670 +0.9% 0.99x (?)
StringEqualPointerComparison 2423 2550 +5.2% 0.95x
StringFromLongWholeSubstring 10052 10045 -0.1% 1.00x (?)
StringFromLongWholeSubstringGeneric 199 199 +0.0% 1.00x
StringHasPrefix 1752 1777 +1.4% 0.99x
StringHasPrefixUnicode 16038 16164 +0.8% 0.99x
StringHasSuffix 1810 1881 +3.9% 0.96x
StringHasSuffixUnicode 63406 63636 +0.4% 1.00x
StringInterpolation 13645 13815 +1.2% 0.99x (?)
StringMatch 29333 29126 -0.7% 1.01x (?)
StringUTF16Builder 7880 7737 -1.8% 1.02x (?)
StringWalk 13128 12927 -1.5% 1.02x
StringWithCString 68689 68583 -0.2% 1.00x (?)
SubstringComparable 4104 4094 -0.2% 1.00x (?)
SubstringEqualString 6213 6202 -0.2% 1.00x (?)
SubstringEquatable 8032 8021 -0.1% 1.00x (?)
SubstringFromLongString 119 115 -3.4% 1.03x
SubstringFromLongStringGeneric 207 208 +0.5% 1.00x
SuffixAnyCollection 6495 6410 -1.3% 1.01x
SuffixAnyCollectionLazy 46400 46001 -0.9% 1.01x (?)
SuffixAnySeqCRangeIter 42536 41983 -1.3% 1.01x
SuffixAnySeqCRangeIterLazy 41384 41678 +0.7% 0.99x
SuffixAnySeqCntRange 6508 6395 -1.7% 1.02x
SuffixAnySeqCntRangeLazy 6378 6401 +0.4% 1.00x
SuffixAnySequence 26794 26867 +0.3% 1.00x
SuffixAnySequenceLazy 26884 26820 -0.2% 1.00x
SuffixArray 2068 2074 +0.3% 1.00x
SuffixArrayLazy 15170 15066 -0.7% 1.01x (?)
SuffixCountableRange 118 118 +0.0% 1.00x
SuffixCountableRangeLazy 12880 12855 -0.2% 1.00x (?)
SuffixSequence 26600 26642 +0.2% 1.00x
SuffixSequenceLazy 26840 26643 -0.7% 1.01x (?)
SuperChars 189248 190077 +0.4% 1.00x (?)
TwoSum 4298 4301 +0.1% 1.00x (?)
UTF8Decode 37071 38025 +2.6% 0.97x
Walsh 11882 11939 +0.5% 1.00x
XorLoop 23707 23705 -0.0% 1.00x (?)
Added (28)
TEST MIN MAX MEAN MAX_RSS
CharIndexing_ascii_unicodeScalars 475692 550029 502581 11027797
CharIndexing_ascii_unicodeScalars_Backwards 529587 570326 544036 11071488
CharIndexing_chinese_unicodeScalars 357478 379201 365548 11370496
CharIndexing_chinese_unicodeScalars_Backwards 397656 403614 401002 11399168
CharIndexing_japanese_unicodeScalars 575805 583297 580728 11366400
CharIndexing_japanese_unicodeScalars_Backwards 636240 641254 638730 11415552
CharIndexing_korean_unicodeScalars 467507 468038 467832 11041451
CharIndexing_korean_unicodeScalars_Backwards 513694 599940 544107 11083776
CharIndexing_russian_unicodeScalars 396828 401667 399374 11044181
CharIndexing_russian_unicodeScalars_Backwards 433074 457537 444151 11090603
CharIndexing_tweet_unicodeScalars 939532 1015363 966991 11366400
CharIndexing_tweet_unicodeScalars_Backwards 1057780 1085661 1069761 11407360
CharIndexing_utf16_unicodeScalars 530971 550105 537483 11433301
CharIndexing_utf16_unicodeScalars_Backwards 589824 625189 602583 11472896
CharIteration_ascii_unicodeScalars 191174 199389 193936 10947243
CharIteration_ascii_unicodeScalars_Backwards 351480 357696 355204 11025067
CharIteration_chinese_unicodeScalars 137319 139683 138109 11280384
CharIteration_chinese_unicodeScalars_Backwards 248382 260875 254397 11358208
CharIteration_japanese_unicodeScalars 217427 217582 217512 11280384
CharIteration_japanese_unicodeScalars_Backwards 394409 416036 404179 11358208
CharIteration_korean_unicodeScalars 184560 185627 184921 10971819
CharIteration_korean_unicodeScalars_Backwards 333043 359658 344052 11045547
CharIteration_russian_unicodeScalars 163184 164968 163943 10966357
CharIteration_russian_unicodeScalars_Backwards 286515 291552 289312 11041451
CharIteration_tweet_unicodeScalars 358549 360117 359142 11280384
CharIteration_tweet_unicodeScalars_Backwards 654676 664684 659117 11358208
CharIteration_utf16_unicodeScalars 216110 217418 216685 11345920
CharIteration_utf16_unicodeScalars_Backwards 429601 434740 431397 11414187
Hardware Overview
  Model Name: Mac mini
  Model Identifier: Macmini7,1
  Processor Name: Intel Core i5
  Processor Speed: 2.8 GHz
  Number of Processors: 1
  Total Number of Cores: 2
  L2 Cache (per Core): 256 KB
  L3 Cache: 3 MB
  Memory: 16 GB

@palimondo
Copy link
Contributor

Can we do something to the naming of these tests? They don't follow the convention established so far… and also are horribly long.

@palimondo
Copy link
Contributor

I suggest:

  • drop underscores
  • use abbreviated country codes and proper capitalization of abbreviations
  • drop unicodeScalars suffix - they all have it…
  • shorten Backwards to Back

E.g.: CharIterationRU, CharIterationBackRU, CharIterationUTF16, etc.

@palimondo
Copy link
Contributor

Or CharIterationRevCN, as in reverse (instead of Back)

@jrose-apple jrose-apple deleted the character-unicodescalars-benchmark branch November 29, 2017 22:36
@palimondo
Copy link
Contributor

@dabrahams I'm looking over these benchmarks and wonder about the motivation for testing .reversed iteration and indexing. I can see this might be important in character iteration for Boyer–Moore string-search algorithm. But why is this applicable on the unicodeScalar level?

@dabrahams
Copy link
Contributor Author

I'm sorry, I don't think I can offer any real insight. I think the idea was to make sure all the new components were performant and didn't regress.

@palimondo
Copy link
Contributor

palimondo commented Dec 12, 2018

Also, I have tried to test locally a modified versions without first copying the Characters to Array, thinking String is fully materialized collection, there shouldn't be much difference, only to find 3-6x slowdown (30-60 on "utf16" variant), both for imperative for-each approach and functional map.reduce. I was hoping to recover some performance by going .lazy, but it didn't help much.

@palimondo
Copy link
Contributor

How realistic is testing iteration over Character's unicodeScalar view from Array, and not directly from String?

@palimondo
Copy link
Contributor

@milseman Do you have opinion about this?

@milseman
Copy link
Member

But why is this applicable on the unicodeScalar level?

Reversed decoding can be more expensive, and is not optimizable by using a customized iterator.

How realistic is testing iteration over Character's unicodeScalar view from Array, and not directly from String?

Sorry, could you re-phrase this? BTW, I introduced a custom iterator for String.UnicodeScalarView, which makes pure iteration much faster than the indexing approach.

@palimondo
Copy link
Contributor

palimondo commented Dec 17, 2018

I was questioning the practical applicability (or realism) of how this benchmark is currently built. I can understand the importance of reverse iteration on the character view as that's used for example in the Boyer–Moore string-search algorithm. I guess this is also applicable to the String's .unicodeScalar view… I see "backwards iteration" mentioned in the TR on Unicode text segmentation boundary detection and such.

But the CharIteration and CharIndexing benchmarks seem too synthetic to me, because they focus only on testing Character's .unicodeScalar view. Of all the workloads, only the utf16 contains different number of characters vs. unicodeScalars. Which means we are mostly testing forward and .reverse iteration on a single element collections retrieved from Character. Moreover, these Characters are not accessed from aString, as I guess would be typical in string processing, but are precomputed into Array<Character>. So I think we end up redundantly measuring a really thin aspect here.

Shouldn't these benchmarks be changed to measure forward and reverse iteration and indexing on the characters and unicodeScalar views from the String? As mentioned above, that results in runtimes that are 3-6x slower (30-60 on "utf16" variant) than the synthetic-once we currently have. It looks like there is quite significant overhead in creating the individual Character's from the strings?

@milseman
Copy link
Member

milseman commented Dec 17, 2018

I was questioning the practical applicability (or realism) of how this benchmark is currently built. I can understand the importance of reverse iteration on the character view as that's used for example in the Boyer–Moore string-search algorithm. I guess this is also applicable to the String's .unicodeScalar view… I see "backwards iteration" mentioned in the TR on Unicode text segmentation boundary detection and such.

I think the main problem with how this is built is poor workload selection. We're taking strings whose shapes were meant to be used as perf-regression tests for grapheme-breaking fast-paths, and using them for scalar decoding. Instead, we want these shaped by the properties that can affect scalar decoding.

Realistic scalar shapes for UTF-8 encoded storage include: ASCII, <U+0080, <U+0800, and non-BMP scalars.

Realistic string shapes include realistic mixtures of scalar shapes, often times with runs of ASCII in the middle.

String-search concerns should apply to all views (though UTF-16 may not be important in practice). The UTF8View is useful for parsing, where you're looking for specific ASCII tags in otherwise ignored bytes. The UnicodeScalarView is useful for conformance checking, as no serious specification would be defined post-grapheme-segmentation, but rather on raw scalars. However, the USV may differ in that it might want to match modulo-canonical-equlivaence, that is TBD.

But the CharIteration and CharIndexing benchmarks seem too synthetic to me, because they focus only on testing Character's .unicodeScalar view. Of all the workloads, only the utf16 contains different number of characters vs. unicodeScalars. Which means we are mostly testing forward and .reverse iteration on a single element collections retrieved from Character. Moreover, these Characters are not accessed from aString, as I guess would be typical in string processing, but are precomputed into Array. So I think we end up redundantly measuring a really thin aspect here.

Yes, these workloads are bogus/highly-redundant for profiling views post-grapheme-segmentation.

Shouldn't these benchmarks be changed to measure forward and reverse iteration on the characters and unicodeScalar views from the String? As mentioned above, that results in runtimes that are 3-6x slower (30-60 on "utf16" variant) than the synthetic-once we currently have. It looks like there is quite significant overhead in creating the individual Character's from the strings?

I think it makes way more sense to measure them on String, yes. BTW, where is that overhead you're seeing coming from? We may have to guarantee-or-trap on a single-grapheme check (and I know there's a bug regarding asserts builds here).

edit: grammar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants