Skip to content

benchmarks: make benchmarks more stable #18096

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 25, 2018

Conversation

eeckstein
Copy link
Contributor

@eeckstein eeckstein commented Jul 20, 2018

The time per iteration should roughly stay constant and not depend on the number of iterations.

*) for benchmarks with a significant setup time, move the setup to the setUpFunction
*) some benchmarks wrongly executed the loop N+1 times ("0...N" instead of "0..<N")
*) added some blackHole calls to prevent the optimizer removing important parts of a benchmark
*) lowered the workload for the CSVParsing benchmarks because 1 single iteration took too long
*) moved the setup and teardown function calls outside the sample loop

For a few benchmarks this changed the benchmark score. I renamed those benchmarks so that they are now treated as "new" benchmarks.

@eeckstein
Copy link
Contributor Author

@swift-ci smoke test

@eeckstein
Copy link
Contributor Author

@swift-ci smoke benchmark

@eeckstein
Copy link
Contributor Author

@palimondo I went ahead and fixed some of the benchmark issues.

@swift-ci
Copy link
Contributor

Build comment file:

Optimized (O)

Regression (16)
TEST OLD NEW DELTA SPEEDUP
Sim2DArray 417 599 +43.6% 0.70x
Chars 1018 1332 +30.8% 0.76x
SuperChars 20102 26254 +30.6% 0.77x
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 43533 50968 +17.1% 0.85x
RangeIterationSigned 171 200 +17.0% 0.86x
DropFirstSequenceLazy 2773 3098 +11.7% 0.90x
ObjectiveCBridgeFromNSSetAnyObject 49680 55398 +11.5% 0.90x (?)
UTF8Decode_InitFromBytes_ascii 478 531 +11.1% 0.90x (?)
StringEqualPointerComparison 286 314 +9.8% 0.91x
PopFrontUnsafePointer 8734 9541 +9.2% 0.92x (?)
PointerArithmetics 31507 34361 +9.1% 0.92x
CharIndexing_utf16_unicodeScalars_Backwards 23822 25631 +7.6% 0.93x (?)
RemoveWhereMoveInts 14 15 +7.1% 0.93x
DropLastCountableRangeLazy 15 16 +6.7% 0.94x
Dictionary4OfObjects 434 460 +6.0% 0.94x
BinaryFloatingPointPropertiesUlp 35 37 +5.7% 0.95x
Improvement (34)
TEST OLD NEW DELTA SPEEDUP
BinaryFloatingPointPropertiesBinade 31 25 -19.4% 1.24x
ReversedBidirectional 16817 13935 -17.1% 1.21x
DataAppendDataSmallToLarge 45764 37994 -17.0% 1.20x (?)
SevenBoom 1004 843 -16.0% 1.19x (?)
MapReduce 427 372 -12.9% 1.15x
DictionaryBridgeToObjC_Access 1072 965 -10.0% 1.11x (?)
DropFirstSequence 2968 2680 -9.7% 1.11x (?)
StringBuilderLong 1793 1622 -9.5% 1.11x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 75455 68638 -9.0% 1.10x (?)
CharIndexing_russian_unicodeScalars 15058 13703 -9.0% 1.10x (?)
CharIteration_utf16_unicodeScalars_Backwards 19447 17814 -8.4% 1.09x
RC4 161 149 -7.5% 1.08x
RandomDoubleLCG 2262 2107 -6.9% 1.07x
CharIndexing_japanese_unicodeScalars 20896 19491 -6.7% 1.07x (?)
NopDeinit 32253 30160 -6.5% 1.07x
DictionaryKeysContainsNative 34 32 -5.9% 1.06x (?)
MapReduceLazyCollectionShort 36 34 -5.6% 1.06x
CharIteration_tweet_unicodeScalars_Backwards 30798 29096 -5.5% 1.06x
ByteSwap 110 104 -5.5% 1.06x
CharIteration_chinese_unicodeScalars_Backwards 11805 11170 -5.4% 1.06x
CharIteration_ascii_unicodeScalars_Backwards 15598 14760 -5.4% 1.06x
CharIteration_japanese_unicodeScalars_Backwards 18665 17664 -5.4% 1.06x
CharIteration_korean_unicodeScalars_Backwards 15110 14306 -5.3% 1.06x
CharIteration_russian_unicodeScalars_Backwards 12989 12298 -5.3% 1.06x
CharIndexing_russian_unicodeScalars_Backwards 14184 13441 -5.2% 1.06x (?)
PrefixWhileSequence 382 362 -5.2% 1.06x
CharIteration_punctuated_unicodeScalars_Backwards 3534 3349 -5.2% 1.06x
ObjectiveCBridgeToNSArray 15887 15067 -5.2% 1.05x
DictionaryBridge 1358 1288 -5.2% 1.05x (?)
CharIndexing_ascii_unicodeScalars 17163 16283 -5.1% 1.05x (?)
CharIteration_punctuatedJapanese_unicodeScalars_Backwards 2823 2680 -5.1% 1.05x
CharIndexing_chinese_unicodeScalars 12993 12339 -5.0% 1.05x (?)
CharIndexing_punctuatedJapanese_unicodeScalars 3101 2948 -4.9% 1.05x
SumUsingReduceInto 102 97 -4.9% 1.05x
No Changes (402)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 3575 3574 -0.0% 1.00x (?)
AnyHashableWithAClass 92106 92109 +0.0% 1.00x (?)
Array2D 2859 2729 -4.5% 1.05x
ArrayAppend 1078 1076 -0.2% 1.00x
ArrayAppendArrayOfInt 797 795 -0.3% 1.00x (?)
ArrayAppendAscii 4001 4048 +1.2% 0.99x (?)
ArrayAppendAsciiSubstring 25087 25314 +0.9% 0.99x
ArrayAppendFromGeneric 799 801 +0.3% 1.00x (?)
ArrayAppendGenericStructs 1430 1433 +0.2% 1.00x
ArrayAppendLatin1 41784 41356 -1.0% 1.01x
ArrayAppendLatin1Substring 142536 145961 +2.4% 0.98x
ArrayAppendLazyMap 1339 1341 +0.1% 1.00x (?)
ArrayAppendOptionals 1429 1428 -0.1% 1.00x (?)
ArrayAppendRepeatCol 1341 1338 -0.2% 1.00x (?)
ArrayAppendReserved 808 805 -0.4% 1.00x (?)
ArrayAppendSequence 1123 1125 +0.2% 1.00x (?)
ArrayAppendStrings 6338 6330 -0.1% 1.00x (?)
ArrayAppendToFromGeneric 802 796 -0.7% 1.01x (?)
ArrayAppendToGeneric 796 796 +0.0% 1.00x
ArrayAppendUTF16 41430 40675 -1.8% 1.02x
ArrayAppendUTF16Substring 140015 143870 +2.8% 0.97x
ArrayInClass 86 85 -1.2% 1.01x
ArrayLiteral 0 0 +0.0% 1.00x
ArrayOfGenericPOD2 152 152 +0.0% 1.00x
ArrayOfGenericRef 4373 4341 -0.7% 1.01x (?)
ArrayOfPOD 188 185 -1.6% 1.02x
ArrayOfRef 4426 4353 -1.6% 1.02x
ArrayPlusEqualArrayOfInt 796 799 +0.4% 1.00x (?)
ArrayPlusEqualFiveElementCollection 5424 5427 +0.1% 1.00x (?)
ArrayPlusEqualSingleElementCollection 1075 1076 +0.1% 1.00x (?)
ArrayPlusEqualThreeElements 1661 1664 +0.2% 1.00x
ArraySubscript 1564 1559 -0.3% 1.00x (?)
ArrayValueProp 8 8 +0.0% 1.00x
ArrayValueProp2 8 8 +0.0% 1.00x
ArrayValueProp3 8 8 +0.0% 1.00x
ArrayValueProp4 8 8 +0.0% 1.00x
BinaryFloatingPointPropertiesNextUp 28 28 +0.0% 1.00x
BitCount 211 202 -4.3% 1.04x
COWArrayGuaranteedParameterOverhead 9998 10092 +0.9% 0.99x (?)
COWTree 3619 3776 +4.3% 0.96x (?)
CStringLongAscii 4193 4203 +0.2% 1.00x (?)
CStringLongNonAscii 2446 2435 -0.4% 1.00x (?)
CStringShortAscii 3319 3352 +1.0% 0.99x (?)
Calculator 204 204 +0.0% 1.00x
CaptureProp 4067 4093 +0.6% 0.99x (?)
ChainedFilterMap 1246 1245 -0.1% 1.00x (?)
CharIndexing_ascii_unicodeScalars_Backwards 16496 16143 -2.1% 1.02x (?)
CharIndexing_chinese_unicodeScalars_Backwards 12566 12230 -2.7% 1.03x (?)
CharIndexing_japanese_unicodeScalars_Backwards 19715 19509 -1.0% 1.01x (?)
CharIndexing_korean_unicodeScalars 16802 16020 -4.7% 1.05x (?)
CharIndexing_korean_unicodeScalars_Backwards 16067 15891 -1.1% 1.01x (?)
CharIndexing_punctuatedJapanese_unicodeScalars_Backwards 3011 2938 -2.4% 1.02x (?)
CharIndexing_punctuated_unicodeScalars 3878 3830 -1.2% 1.01x (?)
CharIndexing_punctuated_unicodeScalars_Backwards 3766 3735 -0.8% 1.01x (?)
CharIndexing_tweet_unicodeScalars 33576 32059 -4.5% 1.05x (?)
CharIndexing_tweet_unicodeScalars_Backwards 32311 31906 -1.3% 1.01x (?)
CharIndexing_utf16_unicodeScalars 23463 23762 +1.3% 0.99x (?)
CharIteration_ascii_unicodeScalars 21501 22209 +3.3% 0.97x
CharIteration_chinese_unicodeScalars 16282 16796 +3.2% 0.97x
CharIteration_japanese_unicodeScalars 25764 26572 +3.1% 0.97x
CharIteration_korean_unicodeScalars 20848 21529 +3.3% 0.97x
CharIteration_punctuatedJapanese_unicodeScalars 3854 3963 +2.8% 0.97x
CharIteration_punctuated_unicodeScalars 4835 4961 +2.6% 0.97x
CharIteration_russian_unicodeScalars 17892 18469 +3.2% 0.97x
CharIteration_tweet_unicodeScalars 42425 44031 +3.8% 0.96x
CharIteration_utf16_unicodeScalars 28021 28315 +1.0% 0.99x
CharacterLiteralsLarge 5855 5859 +0.1% 1.00x (?)
CharacterLiteralsSmall 217 217 +0.0% 1.00x
CharacterPropertiesFetch 4622 4617 -0.1% 1.00x (?)
CharacterPropertiesPrecomputed 1004 999 -0.5% 1.01x (?)
CharacterPropertiesStashed 1512 1540 +1.9% 0.98x
CharacterPropertiesStashedMemo 1569 1587 +1.1% 0.99x (?)
Combos 493 495 +0.4% 1.00x (?)
DataAccessBytes 1143 1142 -0.1% 1.00x (?)
DataAppendArray 5158 5108 -1.0% 1.01x (?)
DataAppendBytes 4835 4934 +2.0% 0.98x (?)
DataAppendDataLargeToLarge 68812 69504 +1.0% 0.99x (?)
DataAppendDataLargeToMedium 35474 36054 +1.6% 0.98x (?)
DataAppendDataLargeToSmall 34439 34399 -0.1% 1.00x (?)
DataAppendDataMediumToLarge 22178 22491 +1.4% 0.99x (?)
DataAppendDataMediumToMedium 6714 6579 -2.0% 1.02x (?)
DataAppendDataMediumToSmall 6016 5921 -1.6% 1.02x
DataAppendDataSmallToMedium 6402 6333 -1.1% 1.01x (?)
DataAppendDataSmallToSmall 5897 5719 -3.0% 1.03x (?)
DataAppendSequence 20821 20068 -3.6% 1.04x (?)
DataCopyBytes 461 465 +0.9% 0.99x (?)
DataCount 34 34 +0.0% 1.00x
DataMutateBytes 3870 3930 +1.6% 0.98x (?)
DataReplaceLarge 36934 36708 -0.6% 1.01x (?)
DataReplaceLargeBuffer 58568 58612 +0.1% 1.00x (?)
DataReplaceMedium 7612 7991 +5.0% 0.95x
DataReplaceMediumBuffer 11531 11467 -0.6% 1.01x (?)
DataReplaceSmall 5692 5628 -1.1% 1.01x (?)
DataReplaceSmallBuffer 9326 9375 +0.5% 0.99x (?)
DataReset 2822 2822 +0.0% 1.00x
DataSetCount 557 548 -1.6% 1.02x (?)
DataSubscript 220 220 +0.0% 1.00x
DictOfArraysToArrayOfDicts 781 784 +0.4% 1.00x (?)
Dictionary 505 505 +0.0% 1.00x
Dictionary2 634 637 +0.5% 1.00x (?)
Dictionary2OfObjects 2087 2086 -0.0% 1.00x (?)
Dictionary3 221 222 +0.5% 1.00x
Dictionary3OfObjects 735 737 +0.3% 1.00x (?)
Dictionary4 316 317 +0.3% 1.00x
Dictionary4Legacy 717 714 -0.4% 1.00x (?)
Dictionary4OfObjectsLegacy 960 955 -0.5% 1.01x (?)
DictionaryBridgeToObjC_Bridge 19 19 +0.0% 1.00x
DictionaryBridgeToObjC_BulkAccess 164 168 +2.4% 0.98x (?)
DictionaryCompactMapValuesOfCastValue 14343 14278 -0.5% 1.00x (?)
DictionaryCompactMapValuesOfNilValue 7320 7274 -0.6% 1.01x (?)
DictionaryCopy 106972 108286 +1.2% 0.99x
DictionaryFilter 106892 107811 +0.9% 0.99x
DictionaryGroup 218 217 -0.5% 1.00x
DictionaryGroupOfObjects 2111 2124 +0.6% 0.99x (?)
DictionaryKeysContainsCocoa 40 39 -2.5% 1.03x (?)
DictionaryLiteral 1928 1926 -0.1% 1.00x (?)
DictionaryOfObjects 2372 2391 +0.8% 0.99x
DictionaryRemove 4215 4195 -0.5% 1.00x
DictionaryRemoveOfObjects 25937 25920 -0.1% 1.00x (?)
DictionarySubscriptDefaultMutation 268 266 -0.7% 1.01x
DictionarySubscriptDefaultMutationArray 623 621 -0.3% 1.00x (?)
DictionarySubscriptDefaultMutationArrayOfObjects 4057 4023 -0.8% 1.01x
DictionarySubscriptDefaultMutationOfObjects 1683 1702 +1.1% 0.99x (?)
DictionarySwap 1036 1036 +0.0% 1.00x
DictionarySwapAt 6731 6690 -0.6% 1.01x (?)
DictionarySwapAtOfObjects 52447 52833 +0.7% 0.99x (?)
DictionarySwapOfObjects 8838 8827 -0.1% 1.00x (?)
DoubleWidthDivision 0 0 +0.0% 1.00x
DropFirstAnyCollection 76 76 +0.0% 1.00x
DropFirstAnyCollectionLazy 65217 66052 +1.3% 0.99x (?)
DropFirstAnySeqCRangeIter 93 93 +0.0% 1.00x
DropFirstAnySeqCRangeIterLazy 93 93 +0.0% 1.00x
DropFirstAnySeqCntRange 71 71 +0.0% 1.00x
DropFirstAnySeqCntRangeLazy 71 71 +0.0% 1.00x
DropFirstAnySequence 1842 1843 +0.1% 1.00x (?)
DropFirstAnySequenceLazy 1843 1841 -0.1% 1.00x (?)
DropFirstArray 35 35 +0.0% 1.00x
DropFirstArrayLazy 35 35 +0.0% 1.00x
DropFirstCountableRange 35 35 +0.0% 1.00x
DropFirstCountableRangeLazy 35 35 +0.0% 1.00x
DropLastAnyCollection 98 98 +0.0% 1.00x
DropLastAnyCollectionLazy 21767 21730 -0.2% 1.00x (?)
DropLastAnySeqCRangeIter 3315 3318 +0.1% 1.00x
DropLastAnySeqCRangeIterLazy 3315 3309 -0.2% 1.00x (?)
DropLastAnySeqCntRange 20 21 +5.0% 0.95x
DropLastAnySeqCntRangeLazy 20 21 +5.0% 0.95x
DropLastAnySequence 4970 4968 -0.0% 1.00x (?)
DropLastAnySequenceLazy 5060 5053 -0.1% 1.00x (?)
DropLastCountableRange 15 15 +0.0% 1.00x
DropLastSequence 668 674 +0.9% 0.99x
DropLastSequenceLazy 667 673 +0.9% 0.99x (?)
DropWhileAnyCollection 99 100 +1.0% 0.99x
DropWhileAnyCollectionLazy 130 130 +0.0% 1.00x
DropWhileAnySeqCRangeIter 76 76 +0.0% 1.00x
DropWhileAnySeqCRangeIterLazy 130 130 +0.0% 1.00x
DropWhileAnySeqCntRange 95 95 +0.0% 1.00x
DropWhileAnySeqCntRangeLazy 130 130 +0.0% 1.00x
DropWhileAnySequence 1860 1861 +0.1% 1.00x (?)
DropWhileAnySequenceLazy 1857 1856 -0.1% 1.00x (?)
DropWhileArrayLazy 88 88 +0.0% 1.00x
DropWhileCountableRange 36 36 +0.0% 1.00x
DropWhileCountableRangeLazy 105 105 +0.0% 1.00x
DropWhileSequence 2204 2219 +0.7% 0.99x
DropWhileSequenceLazy 88 88 +0.0% 1.00x
EqualStringSubstring 49 49 +0.0% 1.00x
EqualSubstringString 49 49 +0.0% 1.00x
EqualSubstringSubstring 49 49 +0.0% 1.00x
EqualSubstringSubstringGenericEquatable 49 49 +0.0% 1.00x
ErrorHandling 1209 1206 -0.2% 1.00x
ExclusivityGlobal 5 5 +0.0% 1.00x
ExclusivityIndependent 2 2 +0.0% 1.00x
FatCompactMap 1246 1248 +0.2% 1.00x (?)
FilterEvenUsingReduce 1326 1327 +0.1% 1.00x (?)
FilterEvenUsingReduceInto 162 161 -0.6% 1.01x (?)
FloatingPointPrinting_Double_description_small 21555 21598 +0.2% 1.00x (?)
FloatingPointPrinting_Double_description_uniform 20877 21031 +0.7% 0.99x
FloatingPointPrinting_Double_interpolated 61954 62087 +0.2% 1.00x (?)
FloatingPointPrinting_Float80_description_small 28422 28356 -0.2% 1.00x (?)
FloatingPointPrinting_Float80_description_uniform 27587 27476 -0.4% 1.00x (?)
FloatingPointPrinting_Float80_interpolated 66084 65969 -0.2% 1.00x (?)
FloatingPointPrinting_Float_description_small 5410 5484 +1.4% 0.99x (?)
FloatingPointPrinting_Float_description_uniform 5352 5388 +0.7% 0.99x (?)
FloatingPointPrinting_Float_interpolated 38775 38734 -0.1% 1.00x (?)
FrequenciesUsingReduce 4987 5037 +1.0% 0.99x (?)
FrequenciesUsingReduceInto 1544 1549 +0.3% 1.00x (?)
Hanoi 2194 2099 -4.3% 1.05x
HashTest 971 971 +0.0% 1.00x
Histogram 664 657 -1.1% 1.01x
Integrate 354 353 -0.3% 1.00x
IterateData 1567 1591 +1.5% 0.98x
Join 171 171 +0.0% 1.00x
LazilyFilteredArrayContains 38659 37448 -3.1% 1.03x
LazilyFilteredRange 3856 3862 +0.2% 1.00x
LessSubstringSubstring 49 49 +0.0% 1.00x
LessSubstringSubstringGenericComparable 49 50 +2.0% 0.98x
LinkedList 7551 7554 +0.0% 1.00x (?)
LuhnAlgoEager 454 451 -0.7% 1.01x (?)
LuhnAlgoLazy 449 450 +0.2% 1.00x (?)
MapReduceAnyCollection 399 399 +0.0% 1.00x
MapReduceAnyCollectionShort 2052 2008 -2.1% 1.02x
MapReduceClass 3005 3005 +0.0% 1.00x
MapReduceClassShort 4585 4597 +0.3% 1.00x (?)
MapReduceLazyCollection 13 13 +0.0% 1.00x
MapReduceLazySequence 86 86 +0.0% 1.00x
MapReduceSequence 468 467 -0.2% 1.00x (?)
MapReduceShort 2026 2024 -0.1% 1.00x (?)
MapReduceShortString 21 21 +0.0% 1.00x
MapReduceString 49 50 +2.0% 0.98x (?)
Memset 215 219 +1.9% 0.98x (?)
MonteCarloE 10253 10262 +0.1% 1.00x
MonteCarloPi 42720 42674 -0.1% 1.00x (?)
NSDictionaryCastToSwift 7072 7224 +2.1% 0.98x (?)
NSError 165 163 -1.2% 1.01x
NSStringConversion 685 687 +0.3% 1.00x (?)
NibbleSort 3469 3467 -0.1% 1.00x (?)
ObjectAllocation 132 133 +0.8% 0.99x (?)
ObjectiveCBridgeFromNSArrayAnyObject 26145 26519 +1.4% 0.99x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 4987 4959 -0.6% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 48168 47485 -1.4% 1.01x (?)
ObjectiveCBridgeFromNSDictionaryAnyObject 112352 114502 +1.9% 0.98x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 5251 5253 +0.0% 1.00x (?)
ObjectiveCBridgeFromNSString 1214 1232 +1.5% 0.99x (?)
ObjectiveCBridgeFromNSStringForced 2722 2713 -0.3% 1.00x (?)
ObjectiveCBridgeStubDataAppend 6134 6149 +0.2% 1.00x (?)
ObjectiveCBridgeStubDateMutation 401 400 -0.2% 1.00x
ObjectiveCBridgeStubFromArrayOfNSString 33329 34360 +3.1% 0.97x (?)
ObjectiveCBridgeStubFromNSDate 6514 6508 -0.1% 1.00x (?)
ObjectiveCBridgeStubFromNSString 1029 1015 -1.4% 1.01x (?)
ObjectiveCBridgeStubFromNSStringRef 156 162 +3.8% 0.96x
ObjectiveCBridgeStubNSDataAppend 2586 2647 +2.4% 0.98x (?)
ObjectiveCBridgeStubNSDateMutationRef 13453 13037 -3.1% 1.03x (?)
ObjectiveCBridgeStubToArrayOfNSString 39299 39499 +0.5% 0.99x (?)
ObjectiveCBridgeStubToNSDate 15405 15299 -0.7% 1.01x
ObjectiveCBridgeStubToNSDateRef 3443 3451 +0.2% 1.00x (?)
ObjectiveCBridgeStubToNSString 2347 2346 -0.0% 1.00x (?)
ObjectiveCBridgeStubToNSStringRef 115 113 -1.7% 1.02x (?)
ObjectiveCBridgeStubURLAppendPath 288388 289283 +0.3% 1.00x (?)
ObjectiveCBridgeStubURLAppendPathRef 291366 284773 -2.3% 1.02x (?)
ObjectiveCBridgeToNSDictionary 28424 27990 -1.5% 1.02x (?)
ObjectiveCBridgeToNSSet 18564 17779 -4.2% 1.04x (?)
ObjectiveCBridgeToNSString 470 460 -2.1% 1.02x
ObserverClosure 2168 2170 +0.1% 1.00x (?)
ObserverForwarderStruct 1219 1210 -0.7% 1.01x (?)
ObserverPartiallyAppliedMethod 3753 3788 +0.9% 0.99x
ObserverUnappliedMethod 2466 2479 +0.5% 0.99x (?)
OpaqueConsumingUsers 4180 4179 -0.0% 1.00x (?)
OpenClose 63 62 -1.6% 1.02x
PartialApplyDynamicType 0 0 +0.0% 1.00x
Phonebook 7157 7068 -1.2% 1.01x
PolymorphicCalls 25 25 +0.0% 1.00x
PopFrontArray 1971 1960 -0.6% 1.01x (?)
PopFrontArrayGeneric 1977 1970 -0.4% 1.00x (?)
PrefixAnyCollection 76 76 +0.0% 1.00x
PrefixAnyCollectionLazy 65209 65356 +0.2% 1.00x (?)
PrefixAnySeqCRangeIter 40 40 +0.0% 1.00x
PrefixAnySeqCRangeIterLazy 40 40 +0.0% 1.00x
PrefixAnySeqCntRange 71 71 +0.0% 1.00x
PrefixAnySeqCntRangeLazy 71 71 +0.0% 1.00x
PrefixAnySequence 1378 1378 +0.0% 1.00x
PrefixAnySequenceLazy 1379 1379 +0.0% 1.00x
PrefixArray 35 35 +0.0% 1.00x
PrefixArrayLazy 35 35 +0.0% 1.00x
PrefixCountableRange 35 35 +0.0% 1.00x
PrefixCountableRangeLazy 35 35 +0.0% 1.00x
PrefixSequence 2806 2804 -0.1% 1.00x (?)
PrefixSequenceLazy 2277 2277 +0.0% 1.00x
PrefixWhileAnyCollection 146 147 +0.7% 0.99x
PrefixWhileAnyCollectionLazy 71 71 +0.0% 1.00x
PrefixWhileAnySeqCRangeIter 402 386 -4.0% 1.04x
PrefixWhileAnySeqCRangeIterLazy 89 89 +0.0% 1.00x
PrefixWhileAnySeqCntRange 142 142 +0.0% 1.00x
PrefixWhileAnySeqCntRangeLazy 71 71 +0.0% 1.00x
PrefixWhileAnySequence 1539 1542 +0.2% 1.00x (?)
PrefixWhileAnySequenceLazy 1392 1392 +0.0% 1.00x
PrefixWhileArray 88 88 +0.0% 1.00x
PrefixWhileArrayLazy 70 70 +0.0% 1.00x
PrefixWhileCountableRange 36 36 +0.0% 1.00x
PrefixWhileCountableRangeLazy 35 35 +0.0% 1.00x
PrefixWhileSequenceLazy 52 52 +0.0% 1.00x
Prims 918 923 +0.5% 0.99x (?)
PrimsSplit 928 924 -0.4% 1.00x (?)
QueueConcrete 1152 1153 +0.1% 1.00x (?)
QueueGeneric 1137 1136 -0.1% 1.00x (?)
RGBHistogram 2611 2594 -0.7% 1.01x
RGBHistogramOfObjects 20251 20213 -0.2% 1.00x (?)
Radix2CooleyTukey 12551 12421 -1.0% 1.01x (?)
Radix2CooleyTukeyf 9103 9069 -0.4% 1.00x (?)
RandomDoubleDef 27086 26718 -1.4% 1.01x
RandomIntegersDef 24364 24494 +0.5% 0.99x
RandomIntegersLCG 173 173 +0.0% 1.00x
RandomShuffleDef 813264 808775 -0.6% 1.01x
RandomShuffleLCG 57688 56852 -1.4% 1.01x
RangeAssignment 352 356 +1.1% 0.99x (?)
RangeReplaceableCollectionPlusDefault 1066 1063 -0.3% 1.00x (?)
RecursiveOwnedParameter 115 115 +0.0% 1.00x
RemoveWhereFilterInts 49 47 -4.1% 1.04x
RemoveWhereFilterString 240 244 +1.7% 0.98x
RemoveWhereFilterStrings 438 439 +0.2% 1.00x
RemoveWhereMoveStrings 708 709 +0.1% 1.00x (?)
RemoveWhereQuadraticInts 1296 1294 -0.2% 1.00x (?)
RemoveWhereQuadraticString 375 379 +1.1% 0.99x (?)
RemoveWhereQuadraticStrings 2763 2765 +0.1% 1.00x (?)
RemoveWhereSwapInts 19 20 +5.3% 0.95x
RemoveWhereSwapStrings 859 859 +0.0% 1.00x
RomanNumbers 85006 82537 -2.9% 1.03x
SequenceAlgosAnySequence 12071 12121 +0.4% 1.00x (?)
SequenceAlgosArray 1585 1572 -0.8% 1.01x
SequenceAlgosContiguousArray 1579 1582 +0.2% 1.00x (?)
SequenceAlgosList 1352 1352 +0.0% 1.00x
SequenceAlgosRange 2576 2577 +0.0% 1.00x (?)
SequenceAlgosUnfoldSequence 1102 1102 +0.0% 1.00x
SetExclusiveOr 5284 5213 -1.3% 1.01x (?)
SetExclusiveOr_OfObjects 12176 11905 -2.2% 1.02x
SetIntersect 699 698 -0.1% 1.00x (?)
SetIntersect_OfObjects 1773 1742 -1.7% 1.02x (?)
SetIsSubsetOf 342 345 +0.9% 0.99x
SetIsSubsetOf_OfObjects 441 441 +0.0% 1.00x
SetUnion 4464 4382 -1.8% 1.02x (?)
SetUnion_OfObjects 10102 9999 -1.0% 1.01x
SortLargeExistentials 5568 5619 +0.9% 0.99x
SortLettersInPlace 961 959 -0.2% 1.00x (?)
SortSortedStrings 700 689 -1.6% 1.02x
SortStrings 1501 1494 -0.5% 1.00x
SortStringsUnicode 2084 2084 +0.0% 1.00x
StackPromo 24890 24869 -0.1% 1.00x (?)
StaticArray 10 10 +0.0% 1.00x
StrComplexWalk 1777 1780 +0.2% 1.00x (?)
StrToInt 3154 3145 -0.3% 1.00x
StringAdder 555 559 +0.7% 0.99x
StringBuilder 497 498 +0.2% 1.00x
StringBuilderSmallReservingCapacity 507 508 +0.2% 1.00x
StringBuilderWithLongSubstring 1467 1436 -2.1% 1.02x
StringComparison_abnormal 807 828 +2.6% 0.97x
StringComparison_ascii 1013 1002 -1.1% 1.01x
StringComparison_emoji 844 843 -0.1% 1.00x (?)
StringComparison_fastPrenormal 830 826 -0.5% 1.00x
StringComparison_latin1 651 648 -0.5% 1.00x
StringComparison_longSharedPrefix 951 949 -0.2% 1.00x
StringComparison_nonBMPSlowestPrenormal 1652 1661 +0.5% 0.99x
StringComparison_slowerPrenormal 1800 1798 -0.1% 1.00x
StringComparison_zalgo 111706 112002 +0.3% 1.00x (?)
StringEdits 168954 168081 -0.5% 1.01x (?)
StringEnumRawValueInitialization 851 854 +0.4% 1.00x
StringFromLongWholeSubstring 21 21 +0.0% 1.00x
StringFromLongWholeSubstringGeneric 21 21 +0.0% 1.00x
StringHasPrefixAscii 2205 2205 +0.0% 1.00x
StringHasPrefixUnicode 100146 99358 -0.8% 1.01x (?)
StringHasSuffixAscii 2291 2319 +1.2% 0.99x
StringHasSuffixUnicode 100211 102544 +2.3% 0.98x (?)
StringHashing_abnormal 1362 1355 -0.5% 1.01x
StringHashing_ascii 34 33 -2.9% 1.03x
StringHashing_emoji 1898 1903 +0.3% 1.00x (?)
StringHashing_fastPrenormal 8395 8394 -0.0% 1.00x (?)
StringHashing_latin1 2568 2567 -0.0% 1.00x (?)
StringHashing_longSharedPrefix 7947 7963 +0.2% 1.00x (?)
StringHashing_nonBMPSlowestPrenormal 2120 2064 -2.6% 1.03x (?)
StringHashing_slowerPrenormal 2732 2742 +0.4% 1.00x (?)
StringHashing_zalgo 3472 3468 -0.1% 1.00x (?)
StringInterpolation 9177 9185 +0.1% 1.00x (?)
StringInterpolationManySmallSegments 18490 18744 +1.4% 0.99x (?)
StringInterpolationSmall 4277 4265 -0.3% 1.00x (?)
StringMatch 12300 12189 -0.9% 1.01x
StringRemoveDupes 497 482 -3.0% 1.03x
StringUTF16Builder 2672 2657 -0.6% 1.01x (?)
StringUTF16SubstringBuilder 5753 5644 -1.9% 1.02x (?)
StringWalk 1554 1557 +0.2% 1.00x
StringWordBuilder 2369 2380 +0.5% 1.00x
StringWordBuilderReservingCapacity 1957 1970 +0.7% 0.99x
SubstringComparable 13 13 +0.0% 1.00x
SubstringEqualString 612 605 -1.1% 1.01x (?)
SubstringEquatable 1423 1420 -0.2% 1.00x
SubstringFromLongString 10 10 +0.0% 1.00x
SubstringFromLongStringGeneric 74 74 +0.0% 1.00x
SuffixAnyCollection 52 52 +0.0% 1.00x
SuffixAnyCollectionLazy 21941 21936 -0.0% 1.00x (?)
SuffixAnySeqCRangeIter 3606 3605 -0.0% 1.00x (?)
SuffixAnySeqCRangeIterLazy 3607 3606 -0.0% 1.00x (?)
SuffixAnySeqCntRange 24 24 +0.0% 1.00x
SuffixAnySeqCntRangeLazy 24 24 +0.0% 1.00x
SuffixAnySequence 4921 4921 +0.0% 1.00x
SuffixAnySequenceLazy 5010 5037 +0.5% 0.99x
SuffixCountableRange 13 13 +0.0% 1.00x
SuffixCountableRangeLazy 18 18 +0.0% 1.00x
SuffixSequence 3654 3691 +1.0% 0.99x (?)
SuffixSequenceLazy 3637 3669 +0.9% 0.99x
SumUsingReduce 97 102 +5.2% 0.95x
TwoSum 1472 1472 +0.0% 1.00x
TypeFlood 0 0 +0.0% 1.00x
UTF8Decode 312 298 -4.5% 1.05x
UTF8Decode_InitDecoding 1348 1351 +0.2% 1.00x
UTF8Decode_InitDecoding_ascii 655 656 +0.2% 1.00x (?)
UTF8Decode_InitFromBytes 1175 1187 +1.0% 0.99x
UTF8Decode_InitFromData 1259 1245 -1.1% 1.01x (?)
UTF8Decode_InitFromData_ascii 692 702 +1.4% 0.99x (?)
Walsh 444 436 -1.8% 1.02x
WordCountHistogramASCII 6786 6815 +0.4% 1.00x (?)
WordCountHistogramUTF16 10210 10189 -0.2% 1.00x (?)
WordCountUniqueASCII 2110 2098 -0.6% 1.01x
WordCountUniqueUTF16 4554 4587 +0.7% 0.99x (?)
WordSplitASCII 9307 9419 +1.2% 0.99x (?)
WordSplitUTF16 10729 10926 +1.8% 0.98x (?)
XorLoop 396 403 +1.8% 0.98x
Added (8)
TEST MIN MAX MEAN MAX_RSS
CSVParsing2 32924 33129 32996 23666688
CSVParsingAlt2 40781 40896 40847 24472235
CSVParsingAltIndices2 16714 16745 16729 24481792
ClassArrayGetter2 123 123 123 12289365
LazilyFilteredArrays2 15400 15767 15549 68014080
ReversedArray2 200 200 200 9031680
ReversedDictionary2 1611 1612 1612 16678912
StringWithCString2 41314 41362 41338 21405696
Removed (8)
TEST MIN MAX MEAN MAX_RSS
CSVParsing 656261 658587 657658 310106795
CSVParsingAlt 814791 826506 819492 310119083
CSVParsingAltIndices 339442 340862 339946 310121813
ClassArrayGetter 15 15 15 8642560
LazilyFilteredArrays 66804 66989 66904 68541099
ReversedArray 57 57 57 9048064
ReversedDictionary 269 450 335 16784043
StringWithCString 124622 124909 124723 21433003
Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: 12-Core Intel Xeon E5
  Processor Speed: 2.7 GHz
  Number of Processors: 1
  Total Number of Cores: 12
  L2 Cache (per Core): 256 KB
  L3 Cache: 30 MB
  Memory: 64 GB

@palimondo
Copy link
Contributor

palimondo commented Jul 20, 2018

@eeckstein Good to see! Let me have a look at these today, but I need to review the changes in more detail.

On a cursory glance, I'd lower the workload in CVSParsing much lower still.

Note: Getting the runtime under 2500 μs is very important for reducing noise. It gives you 1:4 chance the measurement will be interrupted by system scheduler (we can deal with that using the filtering I'm proposing). Any measurement of a single sample with runtime above 10ms (10 000 μs) is guaranteed to be interrupted by scheduler on Mac OS with a random delay, an error that's accumulated into the sample.

But since that is the single modification to that benchmark, I'd delay changing it until we land the BenchmarkDoctor which will give us precise guidance. There will be a ton of these workload adjustments.

@eeckstein eeckstein force-pushed the fix-benchmark-iteration-times branch from 0ac8dae to bf9256b Compare July 20, 2018 17:06
@eeckstein
Copy link
Contributor Author

@swift-ci smoke test

@palimondo
Copy link
Contributor

I think I can get to look at this in detail only over the weekend, but I had a slightly different pattern for taking the setup overhead out of the main loop in my mind…

I’m also a bit confused by the use of blackHole in some of the setUp functions here. What was the intention there?

@eeckstein
Copy link
Contributor Author

@palimondo Makes sense, I changed the iteration time of the renamed benchmarks (like CSVParsing) to be < 2.5ms. In this PR I addressed all the benchmarks where I saw a problem for reducing the iteration count (and increasing the sample count). So this PR should give us a good starting point.
(Whether to change a majority of other benchmarks is a separate discussion).

@eeckstein
Copy link
Contributor Author

I’m also a bit confused by the use of blackHole in some of the setUp functions here.

Global variables are initialized lazily. The blackHole in the setup functions make sure the initialization is done before the run-functions are called.

@palimondo
Copy link
Contributor

I see. The pattern I was thinking to use was to have optional global, initialize in setUp but also set it to nil in tearDown, so that we don’t bloat memory as we progress through the Suite. Does that make sense?

@eeckstein
Copy link
Contributor Author

That's a good point. But I think in most cases the data overhead is not that big and it does not really matter. Therefore I prefer the simpler method (of just referencing the global instead of an optional).

Actually I have an idea to simplify this setup/teardown procedure at all, which would solve this problem. I'll prepare a PR for this.

Copy link
Contributor

@palimondo palimondo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of these changes LGTM, but I'd like to see the Array2D initialization with reserved capacity.

I don't think its necessary to rename tests where the change in runtime is due to fixing bugs by adding blackhole in the right places. Before this, most of these tests were reporting just the timing of the setup overhead anyway. This is really mostly a bugfix PR.

Can you do one more smoke benchmark, please?

}
return A
}()

Copy link
Contributor

@palimondo palimondo Jul 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't sure what was the main point of this benchmark before, when I've noticed it has unstable memory consumption. From the robust-microbench report:

The Array2D benchmark has significant memory use range of 7MB (3292 — 5101 pages or 12.9 MB — 19.9 MB)! It creates a 1K by 1K [[Int]], without reserving a capacity. The pure Int storage is at least 8 MB, plus there is some constant overhead per Array. I guess the variation depends on how big contiguous memory regions the allocator gets, while the arrays are growing when append is called and they sometimes need to be copied to new region. Though I’m not sure this is the point of the test and it maybe should be rewritten with reserved capacity for stable memory use.

Seeing you've taken the array initialization out into the setUpFunction… would you mind fixing it to use reserved capacity? How about something like this:

return Array(repeating: Array(0 ..< 1024), count: 1024)

(I'm assuming that initializing from range does pre-reserve the capacity, but not sure...)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I simplified it. But note that your elegant single-liner is not equivalent to the original construction - performance wise, because it reuses the same inner array. This then triggers copies-on-write in the main benchmark loop.

@@ -15,10 +15,11 @@ import TestsUtils
public let Array2D = BenchmarkInfo(
name: "Array2D",
runFunction: run_Array2D,
tags: [.validation, .api, .Array])
tags: [.validation, .api, .Array],
setUpFunction: { blackHole(Arr) })
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should store these workload data structures in Optionals, so that we can release them in the tearDownFunction. Otherwise we're effectively leaking memory, as we go through the pre-commit benchmark suite. This single array here is 8MB.

@@ -13,58 +13,61 @@
import TestsUtils

public let ReversedCollections = [
BenchmarkInfo(name: "ReversedArray", runFunction: run_ReversedArray, tags: [.validation, .api, .Array]),
BenchmarkInfo(name: "ReversedArray2", runFunction: run_ReversedArray, tags: [.validation, .api, .Array],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think renaming ReversedCollections is necessary. You are not changing the workload, just fixing a bug in test. (Unless it was meant as a technique to highlight them for review in the benchmark report...)

@@ -13,9 +13,10 @@
import TestsUtils

public let ClassArrayGetter = BenchmarkInfo(
name: "ClassArrayGetter",
name: "ClassArrayGetter2",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does bug fix warrant a name change?

@@ -59,7 +59,7 @@ func genStructArray() {

@inline(never)
public func run_ArrayOfGenericPOD(_ N: Int) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one is 50% overhead according to my measurements. I guess some blackholes are needed in there, too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't see any problems here, but it's a good idea to add blackHoles here.

@eeckstein eeckstein force-pushed the fix-benchmark-iteration-times branch from bf9256b to 128c66f Compare July 21, 2018 00:51
@eeckstein eeckstein changed the title benchmarks: make benchmarks more stable for changing the iteration count. benchmarks: make benchmarks more stable and introduce a new setup/teardown mechanism Jul 21, 2018
@eeckstein
Copy link
Contributor Author

@palimondo Thanks for reviewing. I solved the problem of leaking memory through the global workloads with a new (and much simpler) mechanism for separating setup time from core benchmark time.

About renaming benchmarks: the purpose of renaming a benchmark is to not introduce false changes in the benchmark history. It has nothing to do if it's a bug fix or not. If the benchmark time changes (significantly) by changing the benchmark itself (and not the compiler) then it should be renamed.

@eeckstein
Copy link
Contributor Author

@swift-ci smoke benchmark

@swift-ci
Copy link
Contributor

Build comment file:

Optimized (O)

Regression (21)
TEST OLD NEW DELTA SPEEDUP
DataAppendDataMediumToLarge 20149 34457 +71.0% 0.58x (?)
Chars 917 1518 +65.5% 0.60x
Sim2DArray 374 599 +60.2% 0.62x
CharacterLiteralsSmall 195 280 +43.6% 0.70x
SetExclusiveOr 4667 6478 +38.8% 0.72x
DataCount 33 43 +30.3% 0.77x
ObjectiveCBridgeStubFromArrayOfNSString 30253 37342 +23.4% 0.81x
BinaryFloatingPointPropertiesBinade 23 28 +21.7% 0.82x
DictionarySwapAt 6354 7682 +20.9% 0.83x
ObjectiveCBridgeFromNSArrayAnyObjectForced 4193 5045 +20.3% 0.83x
Calculator 184 211 +14.7% 0.87x
FatCompactMap 1119 1263 +12.9% 0.89x
ChainedFilterMap 1120 1263 +12.8% 0.89x
StaticArray 8 9 +12.5% 0.89x
StringEqualPointerComparison 256 282 +10.2% 0.91x
SubstringFromLongStringGeneric 66 72 +9.1% 0.92x
SubstringComparable 12 13 +8.3% 0.92x
DataReplaceMediumBuffer 10746 11508 +7.1% 0.93x (?)
StringComparison_ascii 909 960 +5.6% 0.95x
DataAppendArray 4541 4789 +5.5% 0.95x
StringUTF16SubstringBuilder 5062 5330 +5.3% 0.95x
Improvement (24)
TEST OLD NEW DELTA SPEEDUP
DictionaryKeysContainsCocoa 42 34 -19.0% 1.24x
DataAppendDataSmallToLarge 39809 33187 -16.6% 1.20x
ReversedBidirectional 14822 12458 -15.9% 1.19x
MapReduceLazyCollectionShort 35 30 -14.3% 1.17x
MapReduce 384 338 -12.0% 1.14x
RangeAssignment 338 302 -10.7% 1.12x
DropFirstSequenceLazy 2781 2490 -10.5% 1.12x
PrefixSequenceLazy 2265 2041 -9.9% 1.11x
MapReduceString 47 43 -8.5% 1.09x
DropLastSequence 625 577 -7.7% 1.08x
DropLastSequenceLazy 625 578 -7.5% 1.08x
UTF8Decode_InitFromBytes_ascii 478 443 -7.3% 1.08x (?)
DropLastCountableRange 14 13 -7.1% 1.08x
NopDeinit 28949 27061 -6.5% 1.07x
BinaryFloatingPointPropertiesUlp 33 31 -6.1% 1.06x
ObjectiveCBridgeStubToNSDate 14326 13518 -5.6% 1.06x
RemoveWhereSwapInts 18 17 -5.6% 1.06x
DropLastAnySeqCntRange 19 18 -5.3% 1.06x
DropLastAnySeqCntRangeLazy 19 18 -5.3% 1.06x
MapReduceShortString 19 18 -5.3% 1.06x
ObjectiveCBridgeStubFromNSDate 5845 5539 -5.2% 1.06x
OpenClose 59 56 -5.1% 1.05x
Dictionary4OfObjectsLegacy 875 831 -5.0% 1.05x
PrefixSequence 2096 1995 -4.8% 1.05x
No Changes (405)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 3381 3337 -1.3% 1.01x (?)
AnyHashableWithAClass 83633 81708 -2.3% 1.02x (?)
Array2D 2557 2443 -4.5% 1.05x
ArrayAppend 951 955 +0.4% 1.00x
ArrayAppendArrayOfInt 674 673 -0.1% 1.00x (?)
ArrayAppendAscii 3453 3394 -1.7% 1.02x (?)
ArrayAppendAsciiSubstring 22552 22239 -1.4% 1.01x
ArrayAppendFromGeneric 676 674 -0.3% 1.00x
ArrayAppendGenericStructs 1212 1214 +0.2% 1.00x (?)
ArrayAppendLatin1 36978 37166 +0.5% 0.99x (?)
ArrayAppendLatin1Substring 127954 127340 -0.5% 1.00x
ArrayAppendLazyMap 1180 1178 -0.2% 1.00x (?)
ArrayAppendOptionals 1212 1213 +0.1% 1.00x (?)
ArrayAppendRepeatCol 1176 1175 -0.1% 1.00x (?)
ArrayAppendReserved 716 717 +0.1% 1.00x (?)
ArrayAppendSequence 981 982 +0.1% 1.00x (?)
ArrayAppendStrings 5661 5663 +0.0% 1.00x (?)
ArrayAppendToFromGeneric 674 674 +0.0% 1.00x
ArrayAppendToGeneric 678 674 -0.6% 1.01x (?)
ArrayAppendUTF16 36572 36740 +0.5% 1.00x
ArrayAppendUTF16Substring 125901 126065 +0.1% 1.00x (?)
ArrayInClass 77 77 +0.0% 1.00x
ArrayLiteral 0 0 +0.0% 1.00x
ArrayOfGenericPOD2 130 130 +0.0% 1.00x
ArrayOfGenericRef 3941 3888 -1.3% 1.01x
ArrayOfPOD 157 158 +0.6% 0.99x
ArrayOfRef 3918 3900 -0.5% 1.00x
ArrayPlusEqualArrayOfInt 672 674 +0.3% 1.00x (?)
ArrayPlusEqualFiveElementCollection 4783 4853 +1.5% 0.99x
ArrayPlusEqualSingleElementCollection 949 948 -0.1% 1.00x (?)
ArrayPlusEqualThreeElements 1480 1477 -0.2% 1.00x (?)
ArraySubscript 1410 1410 +0.0% 1.00x
ArrayValueProp 7 7 +0.0% 1.00x
ArrayValueProp2 7 7 +0.0% 1.00x
ArrayValueProp3 7 7 +0.0% 1.00x
ArrayValueProp4 7 7 +0.0% 1.00x
BinaryFloatingPointPropertiesNextUp 25 25 +0.0% 1.00x
BitCount 181 181 +0.0% 1.00x
ByteSwap 96 98 +2.1% 0.98x
COWArrayGuaranteedParameterOverhead 8964 9204 +2.7% 0.97x (?)
COWTree 3276 3369 +2.8% 0.97x
CStringLongAscii 3761 3764 +0.1% 1.00x (?)
CStringLongNonAscii 2189 2191 +0.1% 1.00x (?)
CStringShortAscii 3027 2985 -1.4% 1.01x
CaptureProp 3633 3662 +0.8% 0.99x
CharIndexing_ascii_unicodeScalars 15548 15603 +0.4% 1.00x (?)
CharIndexing_ascii_unicodeScalars_Backwards 14355 14372 +0.1% 1.00x (?)
CharIndexing_chinese_unicodeScalars 11771 11828 +0.5% 1.00x
CharIndexing_chinese_unicodeScalars_Backwards 10865 10964 +0.9% 0.99x
CharIndexing_japanese_unicodeScalars 18605 18687 +0.4% 1.00x
CharIndexing_japanese_unicodeScalars_Backwards 17173 17316 +0.8% 0.99x
CharIndexing_korean_unicodeScalars 15067 15141 +0.5% 1.00x
CharIndexing_korean_unicodeScalars_Backwards 13894 13996 +0.7% 0.99x
CharIndexing_punctuatedJapanese_unicodeScalars 2811 2814 +0.1% 1.00x (?)
CharIndexing_punctuatedJapanese_unicodeScalars_Backwards 2608 2625 +0.7% 0.99x
CharIndexing_punctuated_unicodeScalars 3518 3524 +0.2% 1.00x (?)
CharIndexing_punctuated_unicodeScalars_Backwards 3259 3285 +0.8% 0.99x
CharIndexing_russian_unicodeScalars 12955 12975 +0.2% 1.00x
CharIndexing_russian_unicodeScalars_Backwards 11950 12063 +0.9% 0.99x
CharIndexing_tweet_unicodeScalars 30357 30491 +0.4% 1.00x
CharIndexing_tweet_unicodeScalars_Backwards 28401 28552 +0.5% 0.99x
CharIndexing_utf16_unicodeScalars 20709 20782 +0.4% 1.00x
CharIndexing_utf16_unicodeScalars_Backwards 20875 20936 +0.3% 1.00x (?)
CharIteration_ascii_unicodeScalars 19271 19074 -1.0% 1.01x
CharIteration_ascii_unicodeScalars_Backwards 13242 13230 -0.1% 1.00x
CharIteration_chinese_unicodeScalars 14566 14437 -0.9% 1.01x
CharIteration_chinese_unicodeScalars_Backwards 10026 10029 +0.0% 1.00x (?)
CharIteration_japanese_unicodeScalars 23072 22902 -0.7% 1.01x
CharIteration_japanese_unicodeScalars_Backwards 15842 15834 -0.1% 1.00x (?)
CharIteration_korean_unicodeScalars 18667 18506 -0.9% 1.01x
CharIteration_korean_unicodeScalars_Backwards 12838 12830 -0.1% 1.00x (?)
CharIteration_punctuatedJapanese_unicodeScalars 3430 3396 -1.0% 1.01x
CharIteration_punctuatedJapanese_unicodeScalars_Backwards 2406 2408 +0.1% 1.00x (?)
CharIteration_punctuated_unicodeScalars 4313 4276 -0.9% 1.01x
CharIteration_punctuated_unicodeScalars_Backwards 3011 3009 -0.1% 1.00x (?)
CharIteration_russian_unicodeScalars 16033 15889 -0.9% 1.01x
CharIteration_russian_unicodeScalars_Backwards 11019 11038 +0.2% 1.00x (?)
CharIteration_tweet_unicodeScalars 38035 37649 -1.0% 1.01x
CharIteration_tweet_unicodeScalars_Backwards 26144 26124 -0.1% 1.00x
CharIteration_utf16_unicodeScalars 25033 25212 +0.7% 0.99x
CharIteration_utf16_unicodeScalars_Backwards 15913 15945 +0.2% 1.00x
CharacterLiteralsLarge 5236 5236 +0.0% 1.00x
CharacterPropertiesFetch 4105 4166 +1.5% 0.99x
CharacterPropertiesPrecomputed 899 907 +0.9% 0.99x (?)
CharacterPropertiesStashed 1617 1628 +0.7% 0.99x (?)
CharacterPropertiesStashedMemo 1396 1399 +0.2% 1.00x
Combos 444 443 -0.2% 1.00x (?)
DataAccessBytes 1023 1029 +0.6% 0.99x (?)
DataAppendBytes 4396 4511 +2.6% 0.97x
DataAppendDataLargeToLarge 61107 60213 -1.5% 1.01x (?)
DataAppendDataLargeToMedium 31951 31644 -1.0% 1.01x (?)
DataAppendDataLargeToSmall 31002 30552 -1.5% 1.01x (?)
DataAppendDataMediumToMedium 5892 5881 -0.2% 1.00x (?)
DataAppendDataMediumToSmall 5444 5285 -2.9% 1.03x
DataAppendDataSmallToMedium 5665 5637 -0.5% 1.00x (?)
DataAppendDataSmallToSmall 5454 5397 -1.0% 1.01x (?)
DataAppendSequence 18762 19009 +1.3% 0.99x (?)
DataCopyBytes 407 421 +3.4% 0.97x (?)
DataMutateBytes 3476 3483 +0.2% 1.00x (?)
DataReplaceLarge 32871 32849 -0.1% 1.00x (?)
DataReplaceLargeBuffer 53170 52175 -1.9% 1.02x (?)
DataReplaceMedium 6743 6655 -1.3% 1.01x (?)
DataReplaceSmall 5123 5110 -0.3% 1.00x (?)
DataReplaceSmallBuffer 8793 8780 -0.1% 1.00x (?)
DataReset 2502 2518 +0.6% 0.99x (?)
DataSetCount 488 496 +1.6% 0.98x (?)
DataSubscript 197 200 +1.5% 0.99x
DictOfArraysToArrayOfDicts 706 716 +1.4% 0.99x (?)
Dictionary 462 456 -1.3% 1.01x
Dictionary2 566 562 -0.7% 1.01x
Dictionary2OfObjects 1873 1878 +0.3% 1.00x (?)
Dictionary3 201 199 -1.0% 1.01x
Dictionary3OfObjects 659 665 +0.9% 0.99x
Dictionary4 289 285 -1.4% 1.01x
Dictionary4Legacy 642 652 +1.6% 0.98x (?)
Dictionary4OfObjects 399 389 -2.5% 1.03x
DictionaryBridge 1161 1208 +4.0% 0.96x (?)
DictionaryBridgeToObjC_Access 852 851 -0.1% 1.00x (?)
DictionaryBridgeToObjC_Bridge 17 17 +0.0% 1.00x
DictionaryBridgeToObjC_BulkAccess 146 144 -1.4% 1.01x (?)
DictionaryCompactMapValuesOfCastValue 12891 12794 -0.8% 1.01x (?)
DictionaryCompactMapValuesOfNilValue 6515 6522 +0.1% 1.00x (?)
DictionaryCopy 95235 94679 -0.6% 1.01x
DictionaryFilter 94912 94756 -0.2% 1.00x
DictionaryGroup 194 196 +1.0% 0.99x
DictionaryGroupOfObjects 1914 1875 -2.0% 1.02x
DictionaryKeysContainsNative 28 28 +0.0% 1.00x
DictionaryLiteral 1733 1734 +0.1% 1.00x (?)
DictionaryOfObjects 2166 2142 -1.1% 1.01x (?)
DictionaryRemove 3788 3944 +4.1% 0.96x
DictionaryRemoveOfObjects 23070 23217 +0.6% 0.99x (?)
DictionarySubscriptDefaultMutation 239 238 -0.4% 1.00x
DictionarySubscriptDefaultMutationArray 558 559 +0.2% 1.00x (?)
DictionarySubscriptDefaultMutationArrayOfObjects 3568 3594 +0.7% 0.99x (?)
DictionarySubscriptDefaultMutationOfObjects 1525 1538 +0.9% 0.99x (?)
DictionarySwap 928 927 -0.1% 1.00x
DictionarySwapAtOfObjects 47378 47006 -0.8% 1.01x (?)
DictionarySwapOfObjects 7978 7936 -0.5% 1.01x (?)
DoubleWidthDivision 0 0 +0.0% 1.00x
DropFirstAnyCollection 68 68 +0.0% 1.00x
DropFirstAnyCollectionLazy 58273 57978 -0.5% 1.01x (?)
DropFirstAnySeqCRangeIter 83 83 +0.0% 1.00x
DropFirstAnySeqCRangeIterLazy 83 83 +0.0% 1.00x
DropFirstAnySeqCntRange 64 64 +0.0% 1.00x
DropFirstAnySeqCntRangeLazy 64 64 +0.0% 1.00x
DropFirstAnySequence 1652 1652 +0.0% 1.00x
DropFirstAnySequenceLazy 1653 1653 +0.0% 1.00x
DropFirstArray 31 31 +0.0% 1.00x
DropFirstArrayLazy 31 31 +0.0% 1.00x
DropFirstCountableRange 31 31 +0.0% 1.00x
DropFirstCountableRangeLazy 31 31 +0.0% 1.00x
DropFirstSequence 2405 2409 +0.2% 1.00x (?)
DropLastAnyCollection 88 88 +0.0% 1.00x
DropLastAnyCollectionLazy 19544 19413 -0.7% 1.01x (?)
DropLastAnySeqCRangeIter 2975 3012 +1.2% 0.99x
DropLastAnySeqCRangeIterLazy 2951 3014 +2.1% 0.98x
DropLastAnySequence 4462 4447 -0.3% 1.00x
DropLastAnySequenceLazy 4546 4533 -0.3% 1.00x (?)
DropLastCountableRangeLazy 14 14 +0.0% 1.00x
DropWhileAnyCollection 89 89 +0.0% 1.00x
DropWhileAnyCollectionLazy 116 116 +0.0% 1.00x
DropWhileAnySeqCRangeIter 68 68 +0.0% 1.00x
DropWhileAnySeqCRangeIterLazy 116 116 +0.0% 1.00x
DropWhileAnySeqCntRange 85 85 +0.0% 1.00x
DropWhileAnySeqCntRangeLazy 116 116 +0.0% 1.00x
DropWhileAnySequence 1695 1669 -1.5% 1.02x
DropWhileAnySequenceLazy 1663 1664 +0.1% 1.00x (?)
DropWhileArrayLazy 79 79 +0.0% 1.00x
DropWhileCountableRange 32 32 +0.0% 1.00x
DropWhileCountableRangeLazy 94 94 +0.0% 1.00x
DropWhileSequence 1976 1992 +0.8% 0.99x
DropWhileSequenceLazy 79 79 +0.0% 1.00x
EqualStringSubstring 44 45 +2.3% 0.98x
EqualSubstringString 44 45 +2.3% 0.98x
EqualSubstringSubstring 44 45 +2.3% 0.98x
EqualSubstringSubstringGenericEquatable 45 44 -2.2% 1.02x
ErrorHandling 1093 1095 +0.2% 1.00x (?)
ExclusivityGlobal 5 5 +0.0% 1.00x
ExclusivityIndependent 2 2 +0.0% 1.00x
FilterEvenUsingReduce 1194 1180 -1.2% 1.01x
FilterEvenUsingReduceInto 144 146 +1.4% 0.99x
FloatingPointPrinting_Double_description_small 19422 19308 -0.6% 1.01x (?)
FloatingPointPrinting_Double_description_uniform 18869 18961 +0.5% 1.00x (?)
FloatingPointPrinting_Double_interpolated 56154 56035 -0.2% 1.00x (?)
FloatingPointPrinting_Float80_description_small 25507 25542 +0.1% 1.00x (?)
FloatingPointPrinting_Float80_description_uniform 24695 24819 +0.5% 1.00x (?)
FloatingPointPrinting_Float80_interpolated 58750 59810 +1.8% 0.98x (?)
FloatingPointPrinting_Float_description_small 4872 5010 +2.8% 0.97x
FloatingPointPrinting_Float_description_uniform 4819 4942 +2.6% 0.98x
FloatingPointPrinting_Float_interpolated 34840 35012 +0.5% 1.00x
FrequenciesUsingReduce 4509 4462 -1.0% 1.01x
FrequenciesUsingReduceInto 1373 1366 -0.5% 1.01x (?)
Hanoi 1920 1938 +0.9% 0.99x
HashTest 857 850 -0.8% 1.01x
Histogram 599 589 -1.7% 1.02x
Integrate 307 306 -0.3% 1.00x
IterateData 1257 1256 -0.1% 1.00x (?)
Join 157 156 -0.6% 1.01x
LazilyFilteredArrayContains 34681 33622 -3.1% 1.03x
LazilyFilteredRange 3458 3454 -0.1% 1.00x
LessSubstringSubstring 44 45 +2.3% 0.98x
LessSubstringSubstringGenericComparable 45 44 -2.2% 1.02x
LinkedList 6781 6779 -0.0% 1.00x (?)
LuhnAlgoEager 404 400 -1.0% 1.01x (?)
LuhnAlgoLazy 410 408 -0.5% 1.00x
MapReduceAnyCollection 358 357 -0.3% 1.00x
MapReduceAnyCollectionShort 1861 1841 -1.1% 1.01x
MapReduceClass 2702 2691 -0.4% 1.00x
MapReduceClassShort 4110 4088 -0.5% 1.01x
MapReduceLazyCollection 12 12 +0.0% 1.00x
MapReduceLazySequence 77 77 +0.0% 1.00x
MapReduceSequence 419 425 +1.4% 0.99x
MapReduceShort 1820 1811 -0.5% 1.00x (?)
Memset 192 197 +2.6% 0.97x (?)
MonteCarloE 9321 9272 -0.5% 1.01x
MonteCarloPi 38499 38342 -0.4% 1.00x
NSDictionaryCastToSwift 6295 6154 -2.2% 1.02x (?)
NSError 147 148 +0.7% 0.99x (?)
NSStringConversion 614 616 +0.3% 1.00x
NibbleSort 3112 3113 +0.0% 1.00x (?)
ObjectAllocation 119 120 +0.8% 0.99x
ObjectiveCBridgeFromNSArrayAnyObject 24033 23712 -1.3% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 42337 42335 -0.0% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 40184 41452 +3.2% 0.97x (?)
ObjectiveCBridgeFromNSDictionaryAnyObject 98612 102000 +3.4% 0.97x (?)
ObjectiveCBridgeFromNSSetAnyObject 46247 44435 -3.9% 1.04x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 4422 4448 +0.6% 0.99x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 62227 62950 +1.2% 0.99x (?)
ObjectiveCBridgeFromNSString 1134 1134 +0.0% 1.00x
ObjectiveCBridgeFromNSStringForced 2440 2441 +0.0% 1.00x (?)
ObjectiveCBridgeStubDataAppend 5907 5631 -4.7% 1.05x
ObjectiveCBridgeStubDateMutation 359 359 +0.0% 1.00x
ObjectiveCBridgeStubFromNSString 919 920 +0.1% 1.00x (?)
ObjectiveCBridgeStubFromNSStringRef 139 139 +0.0% 1.00x
ObjectiveCBridgeStubNSDataAppend 2376 2440 +2.7% 0.97x (?)
ObjectiveCBridgeStubNSDateMutationRef 11799 11965 +1.4% 0.99x (?)
ObjectiveCBridgeStubToArrayOfNSString 35665 35924 +0.7% 0.99x (?)
ObjectiveCBridgeStubToNSDateRef 3111 3086 -0.8% 1.01x (?)
ObjectiveCBridgeStubToNSString 2109 2096 -0.6% 1.01x (?)
ObjectiveCBridgeStubToNSStringRef 104 103 -1.0% 1.01x (?)
ObjectiveCBridgeStubURLAppendPath 250059 245261 -1.9% 1.02x (?)
ObjectiveCBridgeStubURLAppendPathRef 254036 246540 -3.0% 1.03x (?)
ObjectiveCBridgeToNSArray 13321 13059 -2.0% 1.02x (?)
ObjectiveCBridgeToNSDictionary 24197 23800 -1.6% 1.02x (?)
ObjectiveCBridgeToNSSet 16390 16491 +0.6% 0.99x (?)
ObjectiveCBridgeToNSString 409 408 -0.2% 1.00x
ObserverClosure 1937 1920 -0.9% 1.01x
ObserverForwarderStruct 1050 1046 -0.4% 1.00x (?)
ObserverPartiallyAppliedMethod 3356 3330 -0.8% 1.01x (?)
ObserverUnappliedMethod 2172 2159 -0.6% 1.01x
OpaqueConsumingUsers 3753 3852 +2.6% 0.97x
PartialApplyDynamicType 0 0 +0.0% 1.00x
Phonebook 6395 6389 -0.1% 1.00x (?)
PointerArithmetics 28269 28253 -0.1% 1.00x
PolymorphicCalls 22 22 +0.0% 1.00x
PopFrontArray 1761 1717 -2.5% 1.03x
PopFrontArrayGeneric 1777 1735 -2.4% 1.02x
PopFrontUnsafePointer 8526 8323 -2.4% 1.02x
PrefixAnyCollection 68 68 +0.0% 1.00x
PrefixAnyCollectionLazy 57970 57937 -0.1% 1.00x (?)
PrefixAnySeqCRangeIter 36 35 -2.8% 1.03x
PrefixAnySeqCRangeIterLazy 36 36 +0.0% 1.00x
PrefixAnySeqCntRange 64 64 +0.0% 1.00x
PrefixAnySeqCntRangeLazy 64 64 +0.0% 1.00x
PrefixAnySequence 1237 1238 +0.1% 1.00x (?)
PrefixAnySequenceLazy 1238 1237 -0.1% 1.00x
PrefixArray 31 31 +0.0% 1.00x
PrefixArrayLazy 31 31 +0.0% 1.00x
PrefixCountableRange 31 31 +0.0% 1.00x
PrefixCountableRangeLazy 31 31 +0.0% 1.00x
PrefixWhileAnyCollection 132 131 -0.8% 1.01x
PrefixWhileAnyCollectionLazy 64 64 +0.0% 1.00x
PrefixWhileAnySeqCRangeIter 362 348 -3.9% 1.04x (?)
PrefixWhileAnySeqCRangeIterLazy 80 80 +0.0% 1.00x
PrefixWhileAnySeqCntRange 127 127 +0.0% 1.00x
PrefixWhileAnySeqCntRangeLazy 64 64 +0.0% 1.00x
PrefixWhileAnySequence 1444 1380 -4.4% 1.05x
PrefixWhileAnySequenceLazy 1249 1248 -0.1% 1.00x (?)
PrefixWhileArray 79 79 +0.0% 1.00x
PrefixWhileArrayLazy 63 63 +0.0% 1.00x
PrefixWhileCountableRange 33 32 -3.0% 1.03x
PrefixWhileCountableRangeLazy 31 31 +0.0% 1.00x
PrefixWhileSequence 341 325 -4.7% 1.05x
PrefixWhileSequenceLazy 47 47 +0.0% 1.00x
Prims 847 827 -2.4% 1.02x
PrimsSplit 826 830 +0.5% 1.00x (?)
QueueConcrete 1026 1027 +0.1% 1.00x (?)
QueueGeneric 1013 1014 +0.1% 1.00x (?)
RC4 134 134 +0.0% 1.00x
RGBHistogram 2319 2332 +0.6% 0.99x
RGBHistogramOfObjects 18210 18197 -0.1% 1.00x (?)
Radix2CooleyTukey 11102 11057 -0.4% 1.00x
Radix2CooleyTukeyf 7991 7913 -1.0% 1.01x (?)
RandomDoubleDef 23850 23870 +0.1% 1.00x (?)
RandomDoubleLCG 1953 1891 -3.2% 1.03x
RandomIntegersDef 21857 22035 +0.8% 0.99x
RandomIntegersLCG 155 155 +0.0% 1.00x
RangeIterationSigned 179 179 +0.0% 1.00x
RangeReplaceableCollectionPlusDefault 954 956 +0.2% 1.00x (?)
RecursiveOwnedParameter 103 103 +0.0% 1.00x
RemoveWhereFilterInts 44 42 -4.5% 1.05x (?)
RemoveWhereFilterString 216 214 -0.9% 1.01x
RemoveWhereFilterStrings 390 390 +0.0% 1.00x
RemoveWhereMoveInts 13 13 +0.0% 1.00x
RemoveWhereMoveStrings 636 635 -0.2% 1.00x
RemoveWhereQuadraticInts 1160 1159 -0.1% 1.00x (?)
RemoveWhereQuadraticString 334 346 +3.6% 0.97x (?)
RemoveWhereQuadraticStrings 2472 2473 +0.0% 1.00x (?)
RemoveWhereSwapStrings 771 771 +0.0% 1.00x
RomanNumbers 74682 76746 +2.8% 0.97x
SequenceAlgosAnySequence 10749 10875 +1.2% 0.99x
SequenceAlgosArray 1386 1387 +0.1% 1.00x (?)
SequenceAlgosContiguousArray 1387 1386 -0.1% 1.00x (?)
SequenceAlgosList 1218 1211 -0.6% 1.01x (?)
SequenceAlgosRange 2312 2313 +0.0% 1.00x (?)
SequenceAlgosUnfoldSequence 989 989 +0.0% 1.00x
SetExclusiveOr_OfObjects 10477 10499 +0.2% 1.00x
SetIntersect 627 630 +0.5% 1.00x (?)
SetIntersect_OfObjects 1612 1601 -0.7% 1.01x (?)
SetIsSubsetOf 309 309 +0.0% 1.00x
SetIsSubsetOf_OfObjects 395 400 +1.3% 0.99x
SetUnion 4054 3964 -2.2% 1.02x
SetUnion_OfObjects 9150 8994 -1.7% 1.02x (?)
SevenBoom 752 756 +0.5% 0.99x (?)
SortLargeExistentials 5002 4992 -0.2% 1.00x (?)
SortLettersInPlace 864 876 +1.4% 0.99x (?)
SortSortedStrings 628 629 +0.2% 1.00x (?)
SortStrings 1337 1334 -0.2% 1.00x
SortStringsUnicode 1870 1850 -1.1% 1.01x
StackPromo 21961 21975 +0.1% 1.00x (?)
StrComplexWalk 1594 1597 +0.2% 1.00x
StrToInt 2848 2809 -1.4% 1.01x
StringAdder 498 504 +1.2% 0.99x
StringBuilder 446 449 +0.7% 0.99x
StringBuilderLong 1125 1125 +0.0% 1.00x
StringBuilderSmallReservingCapacity 455 458 +0.7% 0.99x
StringBuilderWithLongSubstring 1282 1284 +0.2% 1.00x (?)
StringComparison_abnormal 732 752 +2.7% 0.97x
StringComparison_emoji 763 768 +0.7% 0.99x
StringComparison_fastPrenormal 745 764 +2.6% 0.98x
StringComparison_latin1 586 597 +1.9% 0.98x
StringComparison_longSharedPrefix 854 859 +0.6% 0.99x
StringComparison_nonBMPSlowestPrenormal 1494 1500 +0.4% 1.00x (?)
StringComparison_slowerPrenormal 1621 1624 +0.2% 1.00x (?)
StringComparison_zalgo 100532 100845 +0.3% 1.00x (?)
StringEdits 151496 155939 +2.9% 0.97x (?)
StringEnumRawValueInitialization 766 777 +1.4% 0.99x
StringFromLongWholeSubstring 19 19 +0.0% 1.00x
StringFromLongWholeSubstringGeneric 19 19 +0.0% 1.00x
StringHasPrefixAscii 1977 1978 +0.1% 1.00x (?)
StringHasPrefixUnicode 89361 89329 -0.0% 1.00x (?)
StringHasSuffixAscii 2055 2055 +0.0% 1.00x
StringHasSuffixUnicode 89855 90265 +0.5% 1.00x (?)
StringHashing_abnormal 1221 1216 -0.4% 1.00x
StringHashing_ascii 30 30 +0.0% 1.00x
StringHashing_emoji 1722 1716 -0.3% 1.00x (?)
StringHashing_fastPrenormal 7482 7496 +0.2% 1.00x (?)
StringHashing_latin1 2288 2287 -0.0% 1.00x (?)
StringHashing_longSharedPrefix 7120 7112 -0.1% 1.00x (?)
StringHashing_nonBMPSlowestPrenormal 1873 1854 -1.0% 1.01x (?)
StringHashing_slowerPrenormal 2440 2458 +0.7% 0.99x
StringHashing_zalgo 3123 3143 +0.6% 0.99x
StringInterpolation 8197 8244 +0.6% 0.99x (?)
StringInterpolationManySmallSegments 16679 16547 -0.8% 1.01x (?)
StringInterpolationSmall 3831 3810 -0.5% 1.01x (?)
StringMatch 10805 10893 +0.8% 0.99x
StringRemoveDupes 434 430 -0.9% 1.01x (?)
StringUTF16Builder 2382 2370 -0.5% 1.01x (?)
StringWalk 1389 1398 +0.6% 0.99x
StringWordBuilder 2347 2348 +0.0% 1.00x (?)
StringWordBuilderReservingCapacity 1754 1754 +0.0% 1.00x
SubstringEqualString 550 556 +1.1% 0.99x
SubstringEquatable 1288 1300 +0.9% 0.99x
SubstringFromLongString 9 9 +0.0% 1.00x
SuffixAnyCollection 46 46 +0.0% 1.00x
SuffixAnyCollectionLazy 19472 19403 -0.4% 1.00x (?)
SuffixAnySeqCRangeIter 3224 3282 +1.8% 0.98x
SuffixAnySeqCRangeIterLazy 3229 3277 +1.5% 0.99x
SuffixAnySeqCntRange 22 22 +0.0% 1.00x
SuffixAnySeqCntRangeLazy 22 22 +0.0% 1.00x
SuffixAnySequence 4418 4416 -0.0% 1.00x (?)
SuffixAnySequenceLazy 4515 4528 +0.3% 1.00x (?)
SuffixCountableRange 11 11 +0.0% 1.00x
SuffixCountableRangeLazy 16 16 +0.0% 1.00x
SuffixSequence 3340 3284 -1.7% 1.02x (?)
SuffixSequenceLazy 3292 3280 -0.4% 1.00x (?)
SumUsingReduce 91 87 -4.4% 1.05x
SumUsingReduceInto 87 91 +4.6% 0.96x
SuperChars 17914 17349 -3.2% 1.03x
TwoSum 1322 1339 +1.3% 0.99x (?)
TypeFlood 0 0 +0.0% 1.00x
UTF8Decode 267 270 +1.1% 0.99x
UTF8Decode_InitDecoding 1210 1211 +0.1% 1.00x (?)
UTF8Decode_InitDecoding_ascii 583 598 +2.6% 0.97x (?)
UTF8Decode_InitFromBytes 1062 1060 -0.2% 1.00x (?)
UTF8Decode_InitFromData 1134 1111 -2.0% 1.02x (?)
UTF8Decode_InitFromData_ascii 715 721 +0.8% 0.99x (?)
Walsh 387 400 +3.4% 0.97x
WordCountHistogramASCII 6120 6088 -0.5% 1.01x
WordCountHistogramUTF16 9060 9050 -0.1% 1.00x (?)
WordCountUniqueASCII 1912 1842 -3.7% 1.04x
WordCountUniqueUTF16 4100 4138 +0.9% 0.99x (?)
WordSplitASCII 8499 8589 +1.1% 0.99x (?)
WordSplitUTF16 9697 9780 +0.9% 0.99x (?)
XorLoop 345 338 -2.0% 1.02x
Added (10)
TEST MIN MAX MEAN MAX_RSS
CSVParsing2 1459 1460 1459 9306112
CSVParsingAlt2 1647 1657 1653 9383936
CSVParsingAltIndices2 690 691 690 9434453
ClassArrayGetter2 106 106 106 13029376
LazilyFilteredArrays2 828 828 828 14696448
RandomShuffleDef2 2318 2335 2325 8425472
RandomShuffleLCG2 1649 1650 1649 9867264
ReversedArray2 282 283 283 8982528
ReversedDictionary2 1637 1639 1638 16658432
StringWithCString2 1856 1857 1856 8908800
Removed (10)
TEST MIN MAX MEAN MAX_RSS
CSVParsing 589537 590632 590133 310072661
CSVParsingAlt 726997 739561 734388 310027605
CSVParsingAltIndices 310491 314870 312165 310001664
ClassArrayGetter 13 13 13 8556544
LazilyFilteredArrays 60202 60269 60245 67672747
RandomShuffleDef 729870 768868 744064 32174080
RandomShuffleLCG 53537 53855 53700 32175445
ReversedArray 51 51 51 8962048
ReversedDictionary 213 358 261 16666624
StringWithCString 112407 113797 112903 21336064
Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: 8-Core Intel Xeon E5
  Processor Speed: 3 GHz
  Number of Processors: 1
  Total Number of Cores: 8
  L2 Cache (per Core): 256 KB
  L3 Cache: 25 MB
  Memory: 64 GB

Copy link
Contributor

@palimondo palimondo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is solving a wrong problem. I'll expand in the followup comment.

Otherwise, the blackhole and range fixes, as well as the Array2D initialization look solid.

@palimondo
Copy link
Contributor

palimondo commented Jul 21, 2018

@eeckstein, @gottesmm I think there is some misunderstanding of the setup overhead issue I've raised in my report, when I suggested it should to be removed:

Some benchmarks need to perform additional setup work before their main workload. Historically, this was dealt with by sizing the main workload so that it dwarfs the setup, making it negligible. Setup is performed before the main work loop, and its impact is further lessened by amortizing it over the N measured iterations.

This, in and of itself, is completely unrelated to the stability of the measurement results. The suggestion to address setup overhead is predicated on the main proposed change: measuring all benchmarks with --num-iters=1 and collecting a lot of samples (that will be filtered for noise). Since we'll no longer be measuring with N>1, the effect of setup becomes more pronounced, because it wouldn't be amortized over the high number of iterations (N) as is currently the case.

The setup overhead is a systematic measurement error, that can be detected and corrected for, when measuring with different num-iters. Given two measurements performed with i and j iterations, that reported corresponding runtimes ti and tj, the setup overhead can be computed as follows:

setup = (i * j * (ti - tj)) / (j - i)

In fact, to be most precise you should compute this with the lowest N possible: when i=1 and j=2, this equation reduces to setup = 2 * (t1 - t2). We can compute the ratio of setup to the main workload (ratio = (setup / t1)). I have included the setup overhead detection in the BenchmarkDoctor, because it has proven itself to be an important metric of the benchmark health. Here's the beginning of a longer table from the report:

Benchmark setup
overhead
ClassArrayGetter 100%
ReversedDictionary 99%
ArrayOfGenericRef 49%
ArrayOfPOD 50%
ArrayOfGenericPOD 50%

...basically the task list for fixes in your 5th commit here (1b5ad3c). High setup overhead ratio is useful for detecting the case when compiler optimizations kicked-in and eliminated some part of the workload and judicious blackhole wrapping is necessary to correct it.


Now, why and how should we exclude the setup overhead once we start to measure with N=1?
Keep in mind, we'll be trading num-samples=1 with num-iters=X, for num-samples=X with num-iters=1, where X is the automatically computed scale factor to gather measurements for ~1s.

  • Non-amortized setup overhead would increase reported runtime for that benchmark.
  • We'd be paying setup overhead on each measurement, increasing overall time to run benchmarks.

So the whole point of moving the setup work that is detected as overhead into the setUpFunction is to maintain the status quo! Perform the setup work just once, before running the test, amortizing it over the whole measurement of a given benchmark.

Erik's initial attempt here in an earlier, overwritten commit with setUpFunction: { blackhole(workload) } was moving in the right direction, except for the fact that lazily initialized globals were lingering in memory after the benchmark ran. This wasn't a problem in the "overhead-included" version as the workload was inside the scope of runFunction and went away when it finished running.

I understand the motivation to make writing of benchmarks as easy as possible and that setting up an optional global variable that would be cleaned up in the tearDownFunction was looking like a more complicated solution… but the changes in the first 3 commits (35fc739, 24682ec, eb92982) that completely eliminate the setUp and tearDown functions are IMHO solving the wrong problem. The point of eliminating setup overhead isn't to pretend it doesn't exist (just excluding it from the measured time), but to maintain the status quo of amortizing setup over the whole measurement. We have briefly touched on this issue in the review of PR #12415, where I've argued that the setUp and tearDown functions should be moved outside of the sampling loop (and renamed to beforeTest & afterTest). Does this explanation make my point more clear now?

Maybe we can go back to the original Eric's idea with the lazily initialized globals? What if the pattern was to make them IUOs (so that the main workflow body can continue to pretend it's unchanged local variable) and do something like tearDownFunction: { release(workload) } ?


But to reiterate, with the current measurement method, setup overhead plays absolutely no role. It becomes an issue, affecting about 10% of the benchmarks in the suite, only when we start measuring with --num-iters=1. I would caution against attempting to address it before we have BenchmarkDoctor in place to guide us.

@eeckstein
Copy link
Contributor Author

@palimondo The motivation of replacing the setup function is not related to your proposal at all. It's a (more or less) non-functional change which just solves a usability problem: it's easy to get it wrong with global variable because

  • it's easy to forget to destroy the workload after the benchmark
  • using global variables inside the benchmark code adds a performance overhead (if you do it wrong).

@eeckstein
Copy link
Contributor Author

@swift-ci smoke test

@palimondo
Copy link
Contributor

palimondo commented Jul 22, 2018

@eeckstein Could you please hold this until after we land #18124? There's looming merge conflict in DriverUtils.swift...

I understand the usability point of view, and agree that the ability to write benchmarks correctly is very important. But the proposed change (removing setUp and tearDown) is functional, because the new startBenchmarkTiming, endBenchmarkTiming and runBenchmark(_:workload:) functions completely remove the ability to detect the setup overhead. They just hide it. This makes it impossible to validate the correctness of benchmarks in this regard. It doesn't isolate the overhead in one place, making it impossible to amortize, when we change the measurement method from many-iterations to many-samples. Then we'll be paying the setup overhead too many times.

Ensuring that benchmarks are written correctly, adhering to all the assumptions of our testing process is the main point of introducing benchmark validation infrastructure that I'm proposing with BenchmarkDoctor. It would be possible to add checks for potential issues you've raised (validate the workload is destroyed and globals are used correctly).

@palimondo
Copy link
Contributor

palimondo commented Jul 22, 2018

There are two equally valid approaches to benchmarking frameworks with regards to which part controls the time measurement: the driver or the test. In Swift Benchmarking Suite as it currently stands, it is the driver that controls the measurement and the benchmark supplies the function to be measured. In the other approach you hand the stopwatch to the test itself, which is exactly what the changes proposed in the first 3 commits here do. This would create a hybrid situation in SBS.

With the test-controls-timing approach it is possible to precisely control what get's measured. That is crucial if you want to measure effects with nanosecond precision. It's the approach taken by @lorentey's Attabench framework. But since everything is controlled from the test, the responsibility for correct use lies completely in the hands of test author.

With the driver-controls-timing approach we have more control over the measurement strategy as a whole process. The trade-off is that benchmarks have to give up fine-grained control and need to conform to the set of assumptions of this process. This is more like using unit testing framework, with special affordances for rare but sometimes necessary tasks like setUp and tearDown. When we add infrastructure to validate that benchmarks conform to the given set of assumptions, we'll have a central point to monitor the quality of the whole SBS.

I believe that the second approach is better for the SBS, because it gives us leverage to measure, improve and control its quality. When the details of what and how get's measured are left underspecified, it's easy to deviate from the best practices and the result is set of benchmarks that take too long to run and report spurious changes.

@eeckstein
Copy link
Contributor Author

eeckstein commented Jul 23, 2018

I don't agree. It is easily possible to measure the setup overhead. You just have to compare, e.g. num_iters=1 with num_iters=10 / 10. IMO that's already sufficient. We can even do better by measuring the run_function time in addition and subtracting the benchmark time.
In general, we can do whatever we want in in the start/endBenchmarkTiming function if we want to add additional functionality to the driver in the future.

PS: to clarify: the num-iters methods can be used to detect "bad" benchmarks where setup overhead is not extracted yet. Calculating time(run_function) - benchmarkTime gives the time of the setup for benchmarks where it is already extracted (if we want to measure that for some reason).

@eeckstein
Copy link
Contributor Author

Could you please hold this until after we land #18124?

Sure, no problem

@eeckstein eeckstein force-pushed the fix-benchmark-iteration-times branch from 128c66f to 3a9b763 Compare July 24, 2018 01:12
@eeckstein
Copy link
Contributor Author

@swift-ci smoke test

@palimondo
Copy link
Contributor

palimondo commented Jul 24, 2018

I don't agree. It is easily possible to measure the setup overhead. You just have to compare, e.g. num_iters=1 with num_iters=10 / 10.

I don't see how this would work with the change as is. It looks to me there is only one global variable start_ticks for the timekeeping (modified by startBenchmarkTiming and runBenchmark(:workload:)).

The second global benchmarkNanoSeconds tracks the accumulated time sans the overhead, it's modified by endBenchmarkTiming and _resetBenchmarkTiming. It get's reset only from SampleRunner before new measurement.

Now in the SampleRunner, I don't see any way to get time between _resetBenchmarkTiming and endBenchmarkTiming that gives you whole time including the setup overhead. That gets hidden by the calls to startBenchmarkTiming and runBenchmark(:workload:) from inside the benchmarks.

Am I misunderstanding how this works?

@palimondo
Copy link
Contributor

palimondo commented Jul 24, 2018

But even if you worked around this issue by tracking the wall time inside SampleRunner in another global... giving the stopwatch to the hands of the test just hides the setup overheard. When we increase the sampling frequency, we'll be paying it all the time. We have to do the setup only once and amortize it across many measurements (whether we're talking about num-iters or num-samples doesn't matter). Currently the setUpFunction gives us a place to do that.

If you think the ergonomics around its use in conjunction with tearDownFunction and not leaking the workloads are suboptimal, we can focus on that. But giving stopwatch to the hands of the tests themselves will exacerbate the problem of correctly managing the setup overhead across the SBS.

@eeckstein
Copy link
Contributor Author

I don't see how this would work with the change as is

diff --git a/benchmark/utils/DriverUtils.swift b/benchmark/utils/DriverUtils.swift
index 5bed947501..c2e8bf04c9 100644
--- a/benchmark/utils/DriverUtils.swift
+++ b/benchmark/utils/DriverUtils.swift
@@ -277,2 +277,3 @@ class SampleRunner {
     endBenchmarkTiming()
+    let totalTime = _getTotalTime()
 
diff --git a/benchmark/utils/TestsUtils.swift b/benchmark/utils/TestsUtils.swift
index ee61a31e81..518e14accb 100644
--- a/benchmark/utils/TestsUtils.swift
+++ b/benchmark/utils/TestsUtils.swift
@@ -296,2 +296,3 @@ func getDiffTimeInNanoSeconds(start: TimeT, end: TimeT) -> UInt64 {
 var start_ticks: TimeT = TimeT()
+var start_run_function_ticks: TimeT = TimeT()
 var time_running = false
@@ -302,2 +303,3 @@ public func _resetBenchmarkTiming() {
   benchmarkNanoSeconds = 0
+  start_run_function_ticks = getTime()
 }
@@ -309,2 +311,6 @@ public func _getBenchmarkTiming() -> UInt64 {
 
+public func _getTotalTime() -> UInt64 {
+  return getDiffTimeInNanoSeconds(start: start_run_function_ticks, end: getTime())
+}
+
 /// Explicitly start benchmark timing within a run-function.

@eeckstein
Copy link
Contributor Author

When we increase the sampling frequency, we'll be paying it all the time.

Ah, now I get your point. That's true, but I have seen that in most benchmarks the setup time is so small that it does not hurt the overall runtime at all (it's just important that the setup time is not counted into the real benchmark time).
There is only one benchmark where this is not the case and that's DictionaryKeysContains.swift. And for such benchmarks we can still use globals to solve the problem.

@palimondo
Copy link
Contributor

palimondo commented Jul 24, 2018

Just to be sure I didn't overlook it before, the workaround to maintain the ability to detect overhead in the diff above, with _getTotalTime() function was not part of the commits in this PR yet, correct?

I agree the issue of setup overhead is very minor. I have been saying this in the forums ever since Michael got hung upon this point there. Which is why I don't think we have to rush in with a fix, without having the tools that measure it in the first place. It is significant for just a handful of tests, very minor for the vast majority of tests that exhibit the overhead and it affects less than 10% of all benchmarks in the suite.

I think the current setup works just fine. The move to handing the stopwatch to the test in order to address setup overhead goes against the current design of the SBS and will make it harder to deal with it correctly, when the need arises.

@palimondo
Copy link
Contributor

Thinking too much about the setup overhead is a case of premature optimization. I think if we stuck to the current design, where you write the benchmark in a single function and don't have to think about it until the overhead get's flagged as an issue by BenchmarkDoctor would be easiest. Then we just need a well documented pattern to deal with it, like the global optional with blackhole invoked in the setUp and a release in tearDown.

I was saying in the discussion of PR #12415, why it's safe to move them outside of the sampling look: the setUpFunction as currently deployed in the SBS (as you know, now that you've touched all of them in this PR) isn't used like the setUp and tearDown in unit tests, but like these methods on TestCase. That's because the driver is supplying the num-iters orN(as it is called when passed to the runFunction). If a test needs a fresh instance of workload data, it needs to get it for every iteration. So if it builds some expensive data structure in the setUp, it still needs to copy it into another variable at the beginning of its inner loop(N).

All I was trying to say is that we should maintain the support for setUp in the benchmarking framework API and not hand the ability to hide setup overhead to every benchmark author. Of course, it is possible to work around such design by instrumenting driver to measure things twice. But I don't think it's the right approach. Semantically correct place for putting a test setup is the setUp method.

The pattern with lazy global variable you came up with was great. The potential memory leak we were discussing also isn't that big of a deal. When running test via Benchmark_Driver, they are all executed individually (independent Benchmark_O invocations), so it doesn't matter there. I don't know how you are using the Benchmark_O internally, tough. If you are running in a mode where it runs through the whole SBS pre-commit suite (no filters or tags), or with a --tags where it executes a bunch of tests in one run, it might be slowly accumulating all the lazily initialized globals, if you didn't clean it up correctly. But that also doesn't seem like such a big problem, only a minor pedantic point.

To avoid that minor issue, we can use Optionals and release them in teardown. The ergonomics of this pattern can be polished further to enforce the use of implicitly unwrapped optionals if correct application of the pattern becomes a problem.

Some benchmarks wrongly executed the loop N+1 times ("0...N" instead of "0..<N")

mt
…enchmarks.

Those are benchmarks which took way too long or short to execute a single iteration or benchmarks which changed in time anyway because of previous fixes.

I renamed those benchmarks so that they are now treated as "new" benchmarks.
…ark.

Force all globals to be initialized in the setup functions
…oop.

This is important to minimize the runtime when many samples are taken.
@eeckstein eeckstein force-pushed the fix-benchmark-iteration-times branch from 3a9b763 to bd43d54 Compare July 25, 2018 03:24
@eeckstein eeckstein changed the title benchmarks: make benchmarks more stable and introduce a new setup/teardown mechanism benchmarks: make benchmarks more stable Jul 25, 2018
@eeckstein
Copy link
Contributor Author

ok, I see you have a strong opinion on this. I removed the commits which introduce the new setup mechanism (and updated the other commits). With the old method I agree with you that the setup/teardown function calls should be moved out of the sample loop. I added a commit for this.

@eeckstein
Copy link
Contributor Author

@swift-ci smoke benchmark

@@ -40,7 +40,7 @@ class RefArray<T> {
// elements should be a nop.
@inline(never)
func genEnumArray() {
_ = RefArray<Int?>(3)
blackHole(RefArray<Int?>(3))
// should be a nop
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm confused about all these benchmarks that have the // should be a nop comments. What are they supposed to measure?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it means that it's expected that the optimizer removes everything. I'm not sure if this makes sense.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, it's better to replace such benchmarks (which only test if the optimizer removes everything) by a lit test.

Copy link
Contributor

@palimondo palimondo Jul 25, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My point exactly:

Aside: I did look into fixing some of the benchmarks with setup overhead and I definitely need help with the ArrayOf* benchmark family. I cannot locate the source of the overhead and I don’t understand what they are testing. They are full of methods that create an array and immediately throw it away (assigning to _) followed by comment // should be a nop. If they are indeed testing that some optimization takes place, I’d argue they should be tests/validation-tests and not benchmarks…

@eeckstein
Copy link
Contributor Author

@swift-ci smoke benchmark

}
Workload_${Name} = Workload.${Name}
}
var Workload_${Name}: Workload! = Workload.${Name}
Copy link
Contributor

@palimondo palimondo Jul 25, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole file is absolutely beautiful. I haven't seen this benchmark before, as I was stuck on a November 2017 fork. This is exactly the correct pattern to emulate when you have a significant setup overhead. Not to mention the effective application of GYB 😬 in benchmarks… Excellent engineering all over here!

Copy link
Contributor

@palimondo palimondo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM! Thank you for hearing me out!

@swift-ci
Copy link
Contributor

Build comment file:

Optimized (O)

Regression (14)
TEST OLD NEW DELTA SPEEDUP
TwoSum 1484 2064 +39.1% 0.72x
UTF8Decode_InitFromData_ascii 766 869 +13.4% 0.88x
StringBuilderWithLongSubstring 1436 1629 +13.4% 0.88x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 5316 5975 +12.4% 0.89x (?)
UTF8Decode_InitFromBytes_ascii 506 560 +10.7% 0.90x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 5038 5509 +9.3% 0.91x (?)
DataCount 34 37 +8.8% 0.92x
ArrayAppendAscii 3849 4156 +8.0% 0.93x (?)
OpenClose 63 68 +7.9% 0.93x
StringBuilderLong 1300 1403 +7.9% 0.93x (?)
ObjectiveCBridgeFromNSDictionaryAnyObject 106467 114688 +7.7% 0.93x
ObjectiveCBridgeToNSArray 15024 15951 +6.2% 0.94x
ObjectiveCBridgeFromNSSetAnyObjectToString 68369 72538 +6.1% 0.94x (?)
BinaryFloatingPointPropertiesUlp 35 37 +5.7% 0.95x
Improvement (12)
TEST OLD NEW DELTA SPEEDUP
BinaryFloatingPointPropertiesBinade 31 25 -19.4% 1.24x
ReversedBidirectional 16665 13993 -16.0% 1.19x (?)
Chars 1019 917 -10.0% 1.11x
DataCopyBytes 494 455 -7.9% 1.09x (?)
DataAppendDataSmallToMedium 6612 6198 -6.3% 1.07x (?)
DropLastCountableRangeLazy 16 15 -6.2% 1.07x
Walsh 460 434 -5.7% 1.06x
DropLastSequence 683 645 -5.6% 1.06x
DropLastSequenceLazy 683 646 -5.4% 1.06x
ObjectiveCBridgeStubToNSDate 15478 14675 -5.2% 1.05x (?)
CharIndexing_utf16_unicodeScalars 24821 23534 -5.2% 1.05x (?)
Array2D 2863 2720 -5.0% 1.05x
No Changes (424)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 3851 3877 +0.7% 0.99x (?)
AnyHashableWithAClass 91189 91141 -0.1% 1.00x (?)
ArrayAppend 1081 1079 -0.2% 1.00x (?)
ArrayAppendArrayOfInt 800 796 -0.5% 1.01x (?)
ArrayAppendAsciiSubstring 24954 25080 +0.5% 0.99x
ArrayAppendFromGeneric 798 799 +0.1% 1.00x
ArrayAppendGenericStructs 1431 1430 -0.1% 1.00x (?)
ArrayAppendLatin1 41810 41881 +0.2% 1.00x (?)
ArrayAppendLatin1Substring 141868 142240 +0.3% 1.00x (?)
ArrayAppendLazyMap 1336 1342 +0.4% 1.00x (?)
ArrayAppendOptionals 1430 1433 +0.2% 1.00x (?)
ArrayAppendRepeatCol 1347 1343 -0.3% 1.00x
ArrayAppendReserved 809 808 -0.1% 1.00x
ArrayAppendSequence 1122 1122 +0.0% 1.00x
ArrayAppendStrings 6232 6229 -0.0% 1.00x (?)
ArrayAppendToFromGeneric 804 809 +0.6% 0.99x
ArrayAppendToGeneric 799 787 -1.5% 1.02x (?)
ArrayAppendUTF16 41318 41268 -0.1% 1.00x (?)
ArrayAppendUTF16Substring 139092 139714 +0.4% 1.00x
ArrayInClass 85 86 +1.2% 0.99x
ArrayLiteral 0 0 +0.0% 1.00x
ArrayOfGenericPOD2 152 152 +0.0% 1.00x
ArrayOfGenericRef 4389 4337 -1.2% 1.01x
ArrayOfPOD 185 185 +0.0% 1.00x
ArrayOfRef 4327 4347 +0.5% 1.00x (?)
ArrayPlusEqualArrayOfInt 803 793 -1.2% 1.01x (?)
ArrayPlusEqualFiveElementCollection 5438 5450 +0.2% 1.00x
ArrayPlusEqualSingleElementCollection 1076 1081 +0.5% 1.00x
ArrayPlusEqualThreeElements 1652 1656 +0.2% 1.00x (?)
ArraySubscript 1547 1573 +1.7% 0.98x (?)
ArrayValueProp 8 8 +0.0% 1.00x
ArrayValueProp2 8 8 +0.0% 1.00x
ArrayValueProp3 8 8 +0.0% 1.00x
ArrayValueProp4 8 8 +0.0% 1.00x
BinaryFloatingPointPropertiesNextUp 28 28 +0.0% 1.00x
BitCount 211 202 -4.3% 1.04x
ByteSwap 107 106 -0.9% 1.01x
COWArrayGuaranteedParameterOverhead 10033 9948 -0.8% 1.01x (?)
COWTree 3624 3766 +3.9% 0.96x (?)
CStringLongAscii 4078 4040 -0.9% 1.01x
CStringLongNonAscii 2481 2408 -2.9% 1.03x
CStringShortAscii 3326 3311 -0.5% 1.00x (?)
Calculator 204 212 +3.9% 0.96x
CaptureProp 4098 4101 +0.1% 1.00x (?)
ChainedFilterMap 1247 1248 +0.1% 1.00x (?)
CharIndexing_ascii_unicodeScalars 17319 17436 +0.7% 0.99x (?)
CharIndexing_ascii_unicodeScalars_Backwards 16431 15988 -2.7% 1.03x
CharIndexing_chinese_unicodeScalars 13114 13153 +0.3% 1.00x
CharIndexing_chinese_unicodeScalars_Backwards 12024 12110 +0.7% 0.99x (?)
CharIndexing_japanese_unicodeScalars 20746 20780 +0.2% 1.00x
CharIndexing_japanese_unicodeScalars_Backwards 19012 19171 +0.8% 0.99x (?)
CharIndexing_korean_unicodeScalars 17145 17209 +0.4% 1.00x (?)
CharIndexing_korean_unicodeScalars_Backwards 15446 16016 +3.7% 0.96x (?)
CharIndexing_punctuatedJapanese_unicodeScalars 3123 3164 +1.3% 0.99x
CharIndexing_punctuatedJapanese_unicodeScalars_Backwards 2917 2943 +0.9% 0.99x
CharIndexing_punctuated_unicodeScalars 3910 3943 +0.8% 0.99x
CharIndexing_punctuated_unicodeScalars_Backwards 3677 3662 -0.4% 1.00x (?)
CharIndexing_russian_unicodeScalars 14429 14466 +0.3% 1.00x (?)
CharIndexing_russian_unicodeScalars_Backwards 13937 13402 -3.8% 1.04x (?)
CharIndexing_tweet_unicodeScalars 33463 33857 +1.2% 0.99x (?)
CharIndexing_tweet_unicodeScalars_Backwards 31290 31818 +1.7% 0.98x (?)
CharIndexing_utf16_unicodeScalars_Backwards 23470 23885 +1.8% 0.98x (?)
CharIteration_ascii_unicodeScalars 21718 21640 -0.4% 1.00x
CharIteration_ascii_unicodeScalars_Backwards 14372 14772 +2.8% 0.97x
CharIteration_chinese_unicodeScalars 16400 16392 -0.0% 1.00x (?)
CharIteration_chinese_unicodeScalars_Backwards 10884 11203 +2.9% 0.97x
CharIteration_japanese_unicodeScalars 25955 25918 -0.1% 1.00x
CharIteration_japanese_unicodeScalars_Backwards 17212 17683 +2.7% 0.97x
CharIteration_korean_unicodeScalars 21031 20995 -0.2% 1.00x
CharIteration_korean_unicodeScalars_Backwards 13933 14340 +2.9% 0.97x
CharIteration_punctuatedJapanese_unicodeScalars 3870 3873 +0.1% 1.00x (?)
CharIteration_punctuatedJapanese_unicodeScalars_Backwards 2617 2710 +3.6% 0.97x
CharIteration_punctuated_unicodeScalars 4859 4860 +0.0% 1.00x (?)
CharIteration_punctuated_unicodeScalars_Backwards 3270 3381 +3.4% 0.97x
CharIteration_russian_unicodeScalars 18067 18024 -0.2% 1.00x
CharIteration_russian_unicodeScalars_Backwards 11970 12314 +2.9% 0.97x
CharIteration_tweet_unicodeScalars 42854 42721 -0.3% 1.00x
CharIteration_tweet_unicodeScalars_Backwards 28735 29138 +1.4% 0.99x
CharIteration_utf16_unicodeScalars 28031 27936 -0.3% 1.00x
CharIteration_utf16_unicodeScalars_Backwards 17831 17741 -0.5% 1.01x (?)
CharacterLiteralsLarge 5842 5840 -0.0% 1.00x (?)
CharacterLiteralsSmall 217 217 +0.0% 1.00x
CharacterPropertiesFetch 4604 4601 -0.1% 1.00x (?)
CharacterPropertiesPrecomputed 999 1003 +0.4% 1.00x (?)
CharacterPropertiesStashed 1822 1820 -0.1% 1.00x (?)
CharacterPropertiesStashedMemo 1550 1561 +0.7% 0.99x
Combos 500 505 +1.0% 0.99x
DataAccessBytes 1151 1153 +0.2% 1.00x (?)
DataAppendArray 5156 5307 +2.9% 0.97x (?)
DataAppendBytes 4826 5028 +4.2% 0.96x (?)
DataAppendDataLargeToLarge 68468 66558 -2.8% 1.03x (?)
DataAppendDataLargeToMedium 35483 35513 +0.1% 1.00x (?)
DataAppendDataLargeToSmall 34845 34860 +0.0% 1.00x (?)
DataAppendDataMediumToLarge 22641 22371 -1.2% 1.01x (?)
DataAppendDataMediumToMedium 6743 6522 -3.3% 1.03x (?)
DataAppendDataMediumToSmall 6024 6041 +0.3% 1.00x (?)
DataAppendDataSmallToLarge 22328 22162 -0.7% 1.01x (?)
DataAppendDataSmallToSmall 5719 5992 +4.8% 0.95x (?)
DataAppendSequence 21759 21308 -2.1% 1.02x (?)
DataMutateBytes 3947 3970 +0.6% 0.99x (?)
DataReplaceLarge 36711 36809 +0.3% 1.00x (?)
DataReplaceLargeBuffer 59636 58375 -2.1% 1.02x (?)
DataReplaceMedium 7903 8050 +1.9% 0.98x (?)
DataReplaceMediumBuffer 13526 13418 -0.8% 1.01x (?)
DataReplaceSmall 5724 5739 +0.3% 1.00x (?)
DataReplaceSmallBuffer 9866 9872 +0.1% 1.00x (?)
DataReset 2828 2837 +0.3% 1.00x (?)
DataSetCount 562 553 -1.6% 1.02x (?)
DataSubscript 220 220 +0.0% 1.00x
DictOfArraysToArrayOfDicts 808 804 -0.5% 1.00x (?)
Dictionary 516 522 +1.2% 0.99x
Dictionary2 647 645 -0.3% 1.00x
Dictionary2OfObjects 2093 2076 -0.8% 1.01x (?)
Dictionary3 223 221 -0.9% 1.01x
Dictionary3OfObjects 736 736 +0.0% 1.00x
Dictionary4 312 314 +0.6% 0.99x
Dictionary4Legacy 715 712 -0.4% 1.00x (?)
Dictionary4OfObjects 430 437 +1.6% 0.98x
Dictionary4OfObjectsLegacy 924 926 +0.2% 1.00x (?)
DictionaryBridge 1196 1173 -1.9% 1.02x (?)
DictionaryBridgeToObjC_Access 912 943 +3.4% 0.97x (?)
DictionaryBridgeToObjC_Bridge 19 19 +0.0% 1.00x
DictionaryBridgeToObjC_BulkAccess 164 165 +0.6% 0.99x (?)
DictionaryCompactMapValuesOfCastValue 14775 15101 +2.2% 0.98x
DictionaryCompactMapValuesOfNilValue 7325 7591 +3.6% 0.96x
DictionaryCopy 108218 108260 +0.0% 1.00x (?)
DictionaryFilter 108368 109429 +1.0% 0.99x (?)
DictionaryGroup 216 216 +0.0% 1.00x
DictionaryGroupOfObjects 2142 2120 -1.0% 1.01x
DictionaryKeysContainsCocoa 42 40 -4.8% 1.05x (?)
DictionaryKeysContainsNative 32 32 +0.0% 1.00x
DictionaryLiteral 1912 1911 -0.1% 1.00x (?)
DictionaryOfObjects 2391 2386 -0.2% 1.00x (?)
DictionaryRemove 4480 4366 -2.5% 1.03x (?)
DictionaryRemoveOfObjects 26760 26383 -1.4% 1.01x (?)
DictionarySubscriptDefaultMutation 259 263 +1.5% 0.98x
DictionarySubscriptDefaultMutationArray 617 616 -0.2% 1.00x (?)
DictionarySubscriptDefaultMutationArrayOfObjects 4042 4055 +0.3% 1.00x (?)
DictionarySubscriptDefaultMutationOfObjects 1710 1716 +0.4% 1.00x
DictionarySwap 1028 1030 +0.2% 1.00x (?)
DictionarySwapAt 8129 8033 -1.2% 1.01x (?)
DictionarySwapAtOfObjects 52394 52254 -0.3% 1.00x (?)
DictionarySwapOfObjects 8762 8818 +0.6% 0.99x (?)
DoubleWidthDivision 0 0 +0.0% 1.00x
DropFirstAnyCollection 76 76 +0.0% 1.00x
DropFirstAnyCollectionLazy 66699 65291 -2.1% 1.02x (?)
DropFirstAnySeqCRangeIter 93 93 +0.0% 1.00x
DropFirstAnySeqCRangeIterLazy 93 93 +0.0% 1.00x
DropFirstAnySeqCntRange 71 71 +0.0% 1.00x
DropFirstAnySeqCntRangeLazy 71 71 +0.0% 1.00x
DropFirstAnySequence 1842 1843 +0.1% 1.00x
DropFirstAnySequenceLazy 1842 1842 +0.0% 1.00x
DropFirstArray 35 35 +0.0% 1.00x
DropFirstArrayLazy 35 35 +0.0% 1.00x
DropFirstCountableRange 35 35 +0.0% 1.00x
DropFirstCountableRangeLazy 35 35 +0.0% 1.00x
DropFirstSequence 2684 2682 -0.1% 1.00x (?)
DropFirstSequenceLazy 2775 2774 -0.0% 1.00x (?)
DropLastAnyCollection 98 99 +1.0% 0.99x
DropLastAnyCollectionLazy 21765 22471 +3.2% 0.97x (?)
DropLastAnySeqCRangeIter 3299 3306 +0.2% 1.00x (?)
DropLastAnySeqCRangeIterLazy 3308 3324 +0.5% 1.00x
DropLastAnySeqCntRange 21 20 -4.8% 1.05x
DropLastAnySeqCntRangeLazy 21 20 -4.8% 1.05x
DropLastAnySequence 4979 4947 -0.6% 1.01x
DropLastAnySequenceLazy 5066 5048 -0.4% 1.00x
DropLastCountableRange 15 15 +0.0% 1.00x
DropWhileAnyCollection 100 100 +0.0% 1.00x
DropWhileAnyCollectionLazy 130 130 +0.0% 1.00x
DropWhileAnySeqCRangeIter 76 76 +0.0% 1.00x
DropWhileAnySeqCRangeIterLazy 130 130 +0.0% 1.00x
DropWhileAnySeqCntRange 95 95 +0.0% 1.00x
DropWhileAnySeqCntRangeLazy 130 130 +0.0% 1.00x
DropWhileAnySequence 1861 1861 +0.0% 1.00x
DropWhileAnySequenceLazy 1854 1857 +0.2% 1.00x
DropWhileArrayLazy 88 88 +0.0% 1.00x
DropWhileCountableRange 36 36 +0.0% 1.00x
DropWhileCountableRangeLazy 105 105 +0.0% 1.00x
DropWhileSequence 2220 2221 +0.0% 1.00x (?)
DropWhileSequenceLazy 88 88 +0.0% 1.00x
EqualStringSubstring 48 48 +0.0% 1.00x
EqualSubstringString 49 49 +0.0% 1.00x
EqualSubstringSubstring 48 48 +0.0% 1.00x
EqualSubstringSubstringGenericEquatable 48 48 +0.0% 1.00x
ErrorHandling 1209 1209 +0.0% 1.00x
ExclusivityGlobal 5 5 +0.0% 1.00x
ExclusivityIndependent 2 2 +0.0% 1.00x
FatCompactMap 1248 1245 -0.2% 1.00x
FilterEvenUsingReduce 1330 1342 +0.9% 0.99x (?)
FilterEvenUsingReduceInto 161 163 +1.2% 0.99x
FloatingPointPrinting_Double_description_small 21588 21658 +0.3% 1.00x (?)
FloatingPointPrinting_Double_description_uniform 21046 21068 +0.1% 1.00x (?)
FloatingPointPrinting_Double_interpolated 63176 63637 +0.7% 0.99x (?)
FloatingPointPrinting_Float80_description_small 28667 28568 -0.3% 1.00x (?)
FloatingPointPrinting_Float80_description_uniform 27797 27544 -0.9% 1.01x
FloatingPointPrinting_Float80_interpolated 65840 66067 +0.3% 1.00x (?)
FloatingPointPrinting_Float_description_small 5473 5580 +2.0% 0.98x
FloatingPointPrinting_Float_description_uniform 5341 5399 +1.1% 0.99x
FloatingPointPrinting_Float_interpolated 38823 39007 +0.5% 1.00x (?)
FrequenciesUsingReduce 5020 4912 -2.2% 1.02x (?)
FrequenciesUsingReduceInto 1544 1558 +0.9% 0.99x (?)
Hanoi 2196 2195 -0.0% 1.00x (?)
HashTest 975 960 -1.5% 1.02x
Histogram 641 643 +0.3% 1.00x
Integrate 335 342 +2.1% 0.98x
IterateData 1401 1453 +3.7% 0.96x
Join 171 170 -0.6% 1.01x
LazilyFilteredArrayContains 37479 36661 -2.2% 1.02x
LazilyFilteredRange 3875 3865 -0.3% 1.00x (?)
LessSubstringSubstring 48 48 +0.0% 1.00x
LessSubstringSubstringGenericComparable 48 48 +0.0% 1.00x
LinkedList 7595 7579 -0.2% 1.00x
LuhnAlgoEager 456 458 +0.4% 1.00x (?)
LuhnAlgoLazy 453 454 +0.2% 1.00x (?)
MapReduce 399 400 +0.3% 1.00x
MapReduceAnyCollection 399 402 +0.8% 0.99x
MapReduceAnyCollectionShort 2055 2050 -0.2% 1.00x (?)
MapReduceClass 3016 3016 +0.0% 1.00x
MapReduceClassShort 4568 4569 +0.0% 1.00x (?)
MapReduceLazyCollection 13 13 +0.0% 1.00x
MapReduceLazyCollectionShort 34 34 +0.0% 1.00x
MapReduceLazySequence 86 86 +0.0% 1.00x
MapReduceSequence 464 465 +0.2% 1.00x (?)
MapReduceShort 1994 1977 -0.9% 1.01x
MapReduceShortString 20 20 +0.0% 1.00x
MapReduceString 48 48 +0.0% 1.00x
Memset 217 223 +2.8% 0.97x (?)
MonteCarloE 10232 10352 +1.2% 0.99x
MonteCarloPi 42714 42950 +0.6% 0.99x
NSDictionaryCastToSwift 7146 7223 +1.1% 0.99x (?)
NSError 165 165 +0.0% 1.00x
NSStringConversion 707 715 +1.1% 0.99x
NibbleSort 3460 3463 +0.1% 1.00x (?)
NopDeinit 32210 32040 -0.5% 1.01x
ObjectAllocation 133 133 +0.0% 1.00x
ObjectiveCBridgeFromNSArrayAnyObject 26319 26232 -0.3% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 47506 47240 -0.6% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 45822 44790 -2.3% 1.02x (?)
ObjectiveCBridgeFromNSSetAnyObject 50793 50786 -0.0% 1.00x (?)
ObjectiveCBridgeFromNSString 1243 1251 +0.6% 0.99x (?)
ObjectiveCBridgeFromNSStringForced 2716 2720 +0.1% 1.00x (?)
ObjectiveCBridgeStubDataAppend 6366 6246 -1.9% 1.02x
ObjectiveCBridgeStubDateMutation 400 401 +0.2% 1.00x
ObjectiveCBridgeStubFromArrayOfNSString 34302 34305 +0.0% 1.00x (?)
ObjectiveCBridgeStubFromNSDate 6482 6516 +0.5% 0.99x (?)
ObjectiveCBridgeStubFromNSString 1053 1046 -0.7% 1.01x (?)
ObjectiveCBridgeStubFromNSStringRef 170 167 -1.8% 1.02x
ObjectiveCBridgeStubNSDataAppend 2589 2569 -0.8% 1.01x (?)
ObjectiveCBridgeStubNSDateMutationRef 13382 13196 -1.4% 1.01x
ObjectiveCBridgeStubToArrayOfNSString 41137 40735 -1.0% 1.01x
ObjectiveCBridgeStubToNSDateRef 3472 3442 -0.9% 1.01x
ObjectiveCBridgeStubToNSString 2350 2368 +0.8% 0.99x (?)
ObjectiveCBridgeStubToNSStringRef 127 121 -4.7% 1.05x
ObjectiveCBridgeStubURLAppendPath 277799 282545 +1.7% 0.98x (?)
ObjectiveCBridgeStubURLAppendPathRef 283428 277020 -2.3% 1.02x (?)
ObjectiveCBridgeToNSDictionary 28096 27305 -2.8% 1.03x (?)
ObjectiveCBridgeToNSSet 18352 17622 -4.0% 1.04x (?)
ObjectiveCBridgeToNSString 450 449 -0.2% 1.00x
ObserverClosure 2146 2152 +0.3% 1.00x (?)
ObserverForwarderStruct 1192 1197 +0.4% 1.00x (?)
ObserverPartiallyAppliedMethod 3707 3750 +1.2% 0.99x
ObserverUnappliedMethod 2460 2485 +1.0% 0.99x
OpaqueConsumingUsers 4180 4181 +0.0% 1.00x (?)
PartialApplyDynamicType 0 0 +0.0% 1.00x
Phonebook 7238 7309 +1.0% 0.99x
PointerArithmetics 31495 31506 +0.0% 1.00x (?)
PolymorphicCalls 25 25 +0.0% 1.00x
PopFrontArray 1827 1836 +0.5% 1.00x
PopFrontArrayGeneric 1851 1838 -0.7% 1.01x (?)
PopFrontUnsafePointer 8860 8803 -0.6% 1.01x (?)
PrefixAnyCollection 76 76 +0.0% 1.00x
PrefixAnyCollectionLazy 65546 65352 -0.3% 1.00x (?)
PrefixAnySeqCRangeIter 40 40 +0.0% 1.00x
PrefixAnySeqCRangeIterLazy 40 40 +0.0% 1.00x
PrefixAnySeqCntRange 71 71 +0.0% 1.00x
PrefixAnySeqCntRangeLazy 71 71 +0.0% 1.00x
PrefixAnySequence 1378 1379 +0.1% 1.00x (?)
PrefixAnySequenceLazy 1378 1378 +0.0% 1.00x
PrefixArray 35 35 +0.0% 1.00x
PrefixArrayLazy 35 35 +0.0% 1.00x
PrefixCountableRange 35 35 +0.0% 1.00x
PrefixCountableRangeLazy 35 35 +0.0% 1.00x
PrefixSequence 2214 2216 +0.1% 1.00x (?)
PrefixSequenceLazy 2277 2274 -0.1% 1.00x (?)
PrefixWhileAnyCollection 146 147 +0.7% 0.99x
PrefixWhileAnyCollectionLazy 71 71 +0.0% 1.00x
PrefixWhileAnySeqCRangeIter 389 388 -0.3% 1.00x
PrefixWhileAnySeqCRangeIterLazy 89 89 +0.0% 1.00x
PrefixWhileAnySeqCntRange 142 142 +0.0% 1.00x
PrefixWhileAnySeqCntRangeLazy 71 71 +0.0% 1.00x
PrefixWhileAnySequence 1541 1543 +0.1% 1.00x (?)
PrefixWhileAnySequenceLazy 1392 1391 -0.1% 1.00x (?)
PrefixWhileArray 88 88 +0.0% 1.00x
PrefixWhileArrayLazy 70 70 +0.0% 1.00x
PrefixWhileCountableRange 36 36 +0.0% 1.00x
PrefixWhileCountableRangeLazy 35 35 +0.0% 1.00x
PrefixWhileSequence 364 365 +0.3% 1.00x (?)
PrefixWhileSequenceLazy 52 52 +0.0% 1.00x
Prims 943 943 +0.0% 1.00x
PrimsSplit 933 935 +0.2% 1.00x (?)
QueueConcrete 1150 1150 +0.0% 1.00x
QueueGeneric 1133 1135 +0.2% 1.00x (?)
RC4 161 161 +0.0% 1.00x
RGBHistogram 2612 2637 +1.0% 0.99x (?)
RGBHistogramOfObjects 20305 20283 -0.1% 1.00x (?)
Radix2CooleyTukey 12459 12237 -1.8% 1.02x (?)
Radix2CooleyTukeyf 8984 9013 +0.3% 1.00x (?)
RandomDoubleDef 26845 26975 +0.5% 1.00x (?)
RandomDoubleLCG 2262 2233 -1.3% 1.01x
RandomIntegersDef 24494 24459 -0.1% 1.00x (?)
RandomIntegersLCG 173 173 +0.0% 1.00x
RangeAssignment 337 341 +1.2% 0.99x (?)
RangeIterationSigned 200 200 +0.0% 1.00x
RangeReplaceableCollectionPlusDefault 1064 1074 +0.9% 0.99x
RecursiveOwnedParameter 115 115 +0.0% 1.00x
RemoveWhereFilterInts 47 47 +0.0% 1.00x
RemoveWhereFilterString 252 258 +2.4% 0.98x
RemoveWhereFilterStrings 437 438 +0.2% 1.00x
RemoveWhereMoveInts 14 14 +0.0% 1.00x
RemoveWhereMoveStrings 708 708 +0.0% 1.00x
RemoveWhereQuadraticInts 1295 1295 +0.0% 1.00x
RemoveWhereQuadraticString 380 381 +0.3% 1.00x (?)
RemoveWhereQuadraticStrings 2761 2759 -0.1% 1.00x (?)
RemoveWhereSwapInts 19 19 +0.0% 1.00x
RemoveWhereSwapStrings 861 861 +0.0% 1.00x
RomanNumbers 84252 86179 +2.3% 0.98x
SequenceAlgosAnySequence 12186 12185 -0.0% 1.00x (?)
SequenceAlgosArray 1583 1583 +0.0% 1.00x
SequenceAlgosContiguousArray 1580 1577 -0.2% 1.00x (?)
SequenceAlgosList 1351 1347 -0.3% 1.00x
SequenceAlgosRange 2576 2578 +0.1% 1.00x (?)
SequenceAlgosUnfoldSequence 1102 1102 +0.0% 1.00x
SetExclusiveOr 5177 5151 -0.5% 1.01x (?)
SetExclusiveOr_OfObjects 11656 11680 +0.2% 1.00x (?)
SetIntersect 696 699 +0.4% 1.00x (?)
SetIntersect_OfObjects 1792 1723 -3.9% 1.04x
SetIsSubsetOf 332 330 -0.6% 1.01x
SetIsSubsetOf_OfObjects 438 440 +0.5% 1.00x
SetUnion 4630 4459 -3.7% 1.04x
SetUnion_OfObjects 10174 10137 -0.4% 1.00x
SevenBoom 852 850 -0.2% 1.00x (?)
Sim2DArray 417 417 +0.0% 1.00x
SortLargeExistentials 5580 5677 +1.7% 0.98x
SortLettersInPlace 965 976 +1.1% 0.99x (?)
SortSortedStrings 725 709 -2.2% 1.02x
SortStrings 1510 1509 -0.1% 1.00x (?)
SortStringsUnicode 2051 2104 +2.6% 0.97x
StackPromo 25146 24945 -0.8% 1.01x (?)
StaticArray 9 9 +0.0% 1.00x
StrComplexWalk 1776 1776 +0.0% 1.00x
StrToInt 3304 3375 +2.1% 0.98x
StringAdder 562 571 +1.6% 0.98x
StringBuilder 498 497 -0.2% 1.00x
StringBuilderSmallReservingCapacity 507 507 +0.0% 1.00x
StringComparison_abnormal 763 765 +0.3% 1.00x (?)
StringComparison_ascii 1072 1034 -3.5% 1.04x
StringComparison_emoji 846 848 +0.2% 1.00x
StringComparison_fastPrenormal 830 866 +4.3% 0.96x
StringComparison_latin1 650 680 +4.6% 0.96x
StringComparison_longSharedPrefix 949 956 +0.7% 0.99x (?)
StringComparison_nonBMPSlowestPrenormal 1668 1657 -0.7% 1.01x
StringComparison_slowerPrenormal 1820 1825 +0.3% 1.00x (?)
StringComparison_zalgo 113898 114708 +0.7% 0.99x (?)
StringEdits 169258 169828 +0.3% 1.00x (?)
StringEnumRawValueInitialization 859 862 +0.3% 1.00x (?)
StringEqualPointerComparison 286 286 +0.0% 1.00x
StringFromLongWholeSubstring 21 21 +0.0% 1.00x
StringFromLongWholeSubstringGeneric 21 21 +0.0% 1.00x
StringHasPrefixAscii 2205 2233 +1.3% 0.99x
StringHasPrefixUnicode 98908 98985 +0.1% 1.00x (?)
StringHasSuffixAscii 2290 2319 +1.3% 0.99x
StringHasSuffixUnicode 100309 100255 -0.1% 1.00x (?)
StringHashing_abnormal 1343 1345 +0.1% 1.00x (?)
StringHashing_ascii 33 33 +0.0% 1.00x
StringHashing_emoji 1926 1923 -0.2% 1.00x (?)
StringHashing_fastPrenormal 8374 8406 +0.4% 1.00x (?)
StringHashing_latin1 2568 2567 -0.0% 1.00x (?)
StringHashing_longSharedPrefix 7966 7980 +0.2% 1.00x (?)
StringHashing_nonBMPSlowestPrenormal 2136 2168 +1.5% 0.99x (?)
StringHashing_slowerPrenormal 2734 2736 +0.1% 1.00x (?)
StringHashing_zalgo 3506 3482 -0.7% 1.01x (?)
StringInterpolation 9300 9273 -0.3% 1.00x (?)
StringInterpolationManySmallSegments 18236 18578 +1.9% 0.98x (?)
StringInterpolationSmall 4269 4308 +0.9% 0.99x
StringMatch 12388 12272 -0.9% 1.01x
StringRemoveDupes 482 479 -0.6% 1.01x (?)
StringUTF16Builder 2713 2690 -0.8% 1.01x
StringUTF16SubstringBuilder 5996 5963 -0.6% 1.01x (?)
StringWalk 1555 1552 -0.2% 1.00x
StringWordBuilder 2349 2341 -0.3% 1.00x (?)
StringWordBuilderReservingCapacity 2004 2005 +0.0% 1.00x (?)
SubstringComparable 13 13 +0.0% 1.00x
SubstringEqualString 608 611 +0.5% 1.00x (?)
SubstringEquatable 1433 1433 +0.0% 1.00x
SubstringFromLongString 10 10 +0.0% 1.00x
SubstringFromLongStringGeneric 74 74 +0.0% 1.00x
SuffixAnyCollection 52 52 +0.0% 1.00x
SuffixAnyCollectionLazy 22182 21719 -2.1% 1.02x (?)
SuffixAnySeqCRangeIter 3615 3613 -0.1% 1.00x (?)
SuffixAnySeqCRangeIterLazy 3615 3619 +0.1% 1.00x (?)
SuffixAnySeqCntRange 24 24 +0.0% 1.00x
SuffixAnySeqCntRangeLazy 24 24 +0.0% 1.00x
SuffixAnySequence 4958 4925 -0.7% 1.01x
SuffixAnySequenceLazy 5076 5078 +0.0% 1.00x (?)
SuffixCountableRange 13 13 +0.0% 1.00x
SuffixCountableRangeLazy 18 18 +0.0% 1.00x
SuffixSequence 3688 3654 -0.9% 1.01x
SuffixSequenceLazy 3692 3649 -1.2% 1.01x
SumUsingReduce 102 102 +0.0% 1.00x
SumUsingReduceInto 97 97 +0.0% 1.00x
SuperChars 20131 19460 -3.3% 1.03x
TypeFlood 0 0 +0.0% 1.00x
UTF8Decode 313 299 -4.5% 1.05x
UTF8Decode_InitDecoding 1351 1350 -0.1% 1.00x (?)
UTF8Decode_InitDecoding_ascii 654 657 +0.5% 1.00x (?)
UTF8Decode_InitFromBytes 1179 1208 +2.5% 0.98x
UTF8Decode_InitFromData 1252 1261 +0.7% 0.99x
WordCountHistogramASCII 6885 6953 +1.0% 0.99x
WordCountHistogramUTF16 10319 10181 -1.3% 1.01x
WordCountUniqueASCII 2086 2114 +1.3% 0.99x
WordCountUniqueUTF16 4611 4595 -0.3% 1.00x
WordSplitASCII 10224 10048 -1.7% 1.02x (?)
WordSplitUTF16 11451 11529 +0.7% 0.99x (?)
XorLoop 403 403 +0.0% 1.00x
Added (10)
TEST MIN MAX MEAN MAX_RSS
CSVParsing2 1627 1628 1627 9449472
CSVParsingAlt2 1869 1876 1873 9621504
CSVParsingAltIndices2 780 786 783 9510912
ClassArrayGetter2 125 126 125 12496896
LazilyFilteredArrays2 4622 4629 4625 14528512
RandomShuffleDef2 2584 2585 2585 8675328
RandomShuffleLCG2 1806 1810 1808 10113024
ReversedArray2 200 200 200 10117120
ReversedDictionary2 316 316 316 18493440
StringWithCString2 1975 1989 1982 9175040
Removed (10)
TEST MIN MAX MEAN MAX_RSS
CSVParsing 657519 658170 657744 310371669
CSVParsingAlt 818207 826687 821837 310236501
CSVParsingAltIndices 343408 364995 350778 310203733
ClassArrayGetter 15 16 15 8880128
LazilyFilteredArrays 66672 68055 67258 68719957
RandomShuffleDef 812177 813148 812533 32489472
RandomShuffleLCG 57998 58382 58254 32486741
ReversedArray 57 57 57 9288363
ReversedDictionary 273 286 279 16982016
StringWithCString 123056 123253 123161 21662379
Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: 12-Core Intel Xeon E5
  Processor Speed: 2.7 GHz
  Number of Processors: 1
  Total Number of Cores: 12
  L2 Cache (per Core): 256 KB
  L3 Cache: 30 MB
  Memory: 64 GB

@eeckstein
Copy link
Contributor Author

@swift-ci smoke test and merge

1 similar comment
@eeckstein
Copy link
Contributor Author

@swift-ci smoke test and merge

@eeckstein
Copy link
Contributor Author

@swift-ci smoke test OS X platform

@eeckstein
Copy link
Contributor Author

@swift-ci smoke test macOS

@eeckstein eeckstein merged commit 98f3961 into swiftlang:master Jul 25, 2018
@eeckstein eeckstein deleted the fix-benchmark-iteration-times branch July 25, 2018 18:28
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.

3 participants