Skip to content

[DNM] Experimentally change how Dictionary casting handles Strings, and speed up String bridging a bit to compensate #21066

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

Closed
wants to merge 10 commits into from

Conversation

Catfish-Man
Copy link
Contributor

In particular, make sure we handle duplicate keys due to differing notions of string equality

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke test

@Catfish-Man Catfish-Man requested a review from lorentey December 5, 2018 23:08
@Catfish-Man Catfish-Man self-assigned this Dec 5, 2018
@Catfish-Man
Copy link
Contributor Author

We will see how this goes; local testing suggests it may still be a slowdown :(

@@ -842,3 +842,9 @@ extension String {
}
}
}

extension String {
public var _isASCII:Bool {
Copy link
Member

Choose a reason for hiding this comment

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

Please add an SPI note:

public // SPI(Foundation)
var ...

Or "Bridging overlay" or whatever

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Will do

Copy link
Member

Choose a reason for hiding this comment

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

Nitpick: _isKnownASCII would be a better name, since this test is not guaranteed to return true for all ASCII strings.

@swift-ci
Copy link
Contributor

swift-ci commented Dec 6, 2018

Build comment file:

Performance: -O

TEST OLD NEW DELTA RATIO
Improvement
ObjectiveCBridgeFromNSDictionaryAnyObject 67030 6525 -90.3% 10.27x

Performance: -Osize

TEST OLD NEW DELTA RATIO
Regression
DictionaryBridge 1199 1416 +18.1% 0.85x (?)
Improvement
ObjectiveCBridgeFromNSDictionaryAnyObject 72345 7444 -89.7% 9.72x

Performance: -Onone

TEST OLD NEW DELTA RATIO
Improvement
ObjectiveCBridgeFromNSDictionaryAnyObject 70985 10338 -85.4% 6.87x
How to read the data The tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.

If you see any unexpected regressions, you should consider fixing the
regressions before you merge the PR.

Noise: Sometimes the performance results (not code size!) contain false
alarms. Unexpected regressions which are marked with '(?)' are probably noise.
If you see regressions which you cannot explain you can try to run the
benchmarks again. If regressions still show up, please consult with the
performance team (@eeckstein).

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
--------------

@Catfish-Man
Copy link
Contributor Author

what

@airspeedswift
Copy link
Member

quick merge it before it changes its mind

Copy link
Member

@lorentey lorentey left a comment

Choose a reason for hiding this comment

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

Looks good! Issues noted in comments.

anyValue as AnyObject, Value.self)
if Key.self == String.self &&
!(unsafeBitCast(key, to: String.self)._isASCII) {
maybeDict = builder.take()
Copy link
Member

Choose a reason for hiding this comment

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

This should be in the else branch below; otherwise this will call builder.take() for each non-ASCII key, trapping if there's more than one.

(This also applies for _conditionallyBridgeFromObjectiveC, below)

let value = Swift._forceBridgeFromObjectiveC(
anyValue as AnyObject, Value.self)
if Key.self == String.self &&
!(unsafeBitCast(key, to: String.self)._isASCII) {
Copy link
Member

Choose a reason for hiding this comment

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

_isNFC would potentially catch more cases -- although not necessarily today

// `Dictionary<Key, Value>` where either `Key` or `Value` is a value type
// may not be backed by an NSDictionary.
var builder = _DictionaryBuilder<Key, Value>(count: x.count)
var maybeDict:Dictionary? = nil
Copy link
Member

Choose a reason for hiding this comment

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

Hm, I think we should rather extend the builder abstraction to support potentially non-unique insertions (via a new variant of the add method) -- so that we can interleave known-unique insertions with potential duplicates, and still get builder's performance benefits for all unique keys.

@@ -842,3 +842,9 @@ extension String {
}
}
}

extension String {
public var _isASCII:Bool {
Copy link
Member

Choose a reason for hiding this comment

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

Nitpick: _isKnownASCII would be a better name, since this test is not guaranteed to return true for all ASCII strings.

if _isBridgedVerbatimToObjectiveC(Key.self) &&
_isBridgedVerbatimToObjectiveC(Value.self) {
result = Swift._dictionaryDownCastConditional(anyDict)
return result != nil
result = [Key : Value](_cocoaDictionary: x)
Copy link
Member

Choose a reason for hiding this comment

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

Ah, this explains the 10x speedup! Sadly, I'm afraid we'll need to get rid of it. 😭

The ObjectiveCBridgeFromNSDictionaryAnyObject benchmark measures NSDictionary[NSString: NSNumber] casts, which are supposed to fail if there is even a single key or value that cannot be down-casted.

_dictionaryDownCastConditional laboriously checks this, while init(_cocoaDictionary:) assumes the contents are guaranteed to be of the correct types already.

@lorentey
Copy link
Member

lorentey commented Dec 6, 2018

Dictionary: Some tests failed, aborting
FAIL: ["BridgedFromObjC.Nonverbatim.StringEqualityMismatch"]

TestJSONEncoder: Some tests failed, aborting
FAIL: ["testDecodingKeyStrategyCamel"]

I'd have expected more failures than these! Are the tests hiding in the full test suite, or do we need to add more bridging / down casting tests?

@swift-ci test macOS platform

@swift-ci
Copy link
Contributor

swift-ci commented Dec 6, 2018

Build failed
Swift Test OS X Platform
Git Sha - ee41886922a2abdf97146056d91fbb7a7c2ef043

@lorentey
Copy link
Member

lorentey commented Dec 6, 2018

I'd have expected more failures than these! Are the tests hiding in the full test suite, or do we need to add more bridging / down casting tests?

It seems the latter. 😟

@Catfish-Man Catfish-Man force-pushed the star-studded-cast branch 2 times, most recently from 0a9a89d to d810ccf Compare December 7, 2018 19:38
@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke test

@Catfish-Man
Copy link
Contributor Author

oh, conflicts, argh

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke test

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@swift-ci
Copy link
Contributor

swift-ci commented Dec 7, 2018

Build comment file:

Performance: -O

TEST OLD NEW DELTA RATIO
Improvement
StringUTF16Builder 434 392 -9.7% 1.11x
CountAlgoString 1920 1790 -6.8% 1.07x (?)

Performance: -Osize

TEST OLD NEW DELTA RATIO
Regression
NopDeinit 44513 53736 +20.7% 0.83x

Performance: -Onone

TEST OLD NEW DELTA RATIO
Regression
CharIteration_punctuated_unicodeScalars 68729 74362 +8.2% 0.92x
How to read the data The tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.

If you see any unexpected regressions, you should consider fixing the
regressions before you merge the PR.

Noise: Sometimes the performance results (not code size!) contain false
alarms. Unexpected regressions which are marked with '(?)' are probably noise.
If you see regressions which you cannot explain you can try to run the
benchmarks again. If regressions still show up, please consult with the
performance team (@eeckstein).

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
--------------

// string-keyed NSDictionaries may generate key collisions when bridged
// over to Swift. See rdar://problem/35995647
if Key.self == String.self &&
!(unsafeBitCast(key, to: String.self)._isKnownNFC) {
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 this is the right check. Just because this key is NFC doesn't mean a previous one wasn't.

Copy link
Contributor

@jrose-apple jrose-apple Dec 7, 2018

Choose a reason for hiding this comment

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

I also don't think it's a good idea to codify that there are no other bridged types that behave differently between Objective-C and Swift.

EDIT: I got the polarity of the check backwards for this comment (though the previous one still applies).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ok. I wouldn't bother reviewing it right now, I just wanted to try stuff out (in this case including Karoy's suggestion). I will take this into account if I get something useful though

@Catfish-Man
Copy link
Contributor Author

20% of the total time now is spent in swift_getGenericMetadata. That's really unfortunate :(

@Catfish-Man
Copy link
Contributor Author

Please test with following pull request:
#21147

@swift-ci Please benchmark

…s a decent amount of time in swift_getGenericMetadata
…ll spends a decent amount of time in swift_getGenericMetadata"

This reverts commit 2e325db26cb33b6c124ed7783fbc7c075e53d0ab.
@Catfish-Man
Copy link
Contributor Author

@swift-ci please benchmark

3 similar comments
@Catfish-Man
Copy link
Contributor Author

@swift-ci please benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please benchmark

@swift-ci
Copy link
Contributor

swift-ci commented Dec 8, 2018

Build comment file:

Performance: -O

TEST OLD NEW DELTA RATIO
Regression
Breadcrumbs.CopyUTF16CodeUnits.Mixed 56 67 +19.6% 0.84x
SortStringsUnicode 3306 3663 +10.8% 0.90x
LessSubstringSubstring 41 45 +9.8% 0.91x
EqualSubstringSubstringGenericEquatable 41 45 +9.8% 0.91x
LessSubstringSubstringGenericComparable 41 45 +9.8% 0.91x
Improvement
SuffixAnySequenceLazy 4165 3005 -27.9% 1.39x
DropLastAnySequenceLazy 3991 2893 -27.5% 1.38x
DictionaryOfAnyHashableStrings_lookup 3898 3471 -11.0% 1.12x
DictionaryOfAnyHashableStrings_insert 4999 4457 -10.8% 1.12x
IterateData 1569 1399 -10.8% 1.12x

Performance: -Osize

TEST OLD NEW DELTA RATIO
Regression
SortStringsUnicode 3276 3657 +11.6% 0.90x
LessSubstringSubstring 41 45 +9.8% 0.91x
EqualStringSubstring 41 45 +9.8% 0.91x
LessSubstringSubstringGenericComparable 41 45 +9.8% 0.91x
Improvement
SuffixAnySequenceLazy 4338 3223 -25.7% 1.35x
ObjectiveCBridgeFromNSDictionaryAnyObject 69296 51802 -25.2% 1.34x
DropLastAnySequenceLazy 4044 3103 -23.3% 1.30x
DropFirstAnySequence 4732 3849 -18.7% 1.23x
PrefixAnySequence 4108 3346 -18.5% 1.23x
DictionaryOfAnyHashableStrings_lookup 4091 3471 -15.2% 1.18x
DictionaryOfAnyHashableStrings_insert 5182 4487 -13.4% 1.15x
IterateData 1545 1353 -12.4% 1.14x

Performance: -Onone

TEST OLD NEW DELTA RATIO
Regression
SortStringsUnicode 4872 5298 +8.7% 0.92x
Improvement
PrefixWhileAnySequenceLazy 14767 9006 -39.0% 1.64x
DropWhileAnySequence 18750 12018 -35.9% 1.56x
DropWhileSequenceLazy 12631 9660 -23.5% 1.31x
DropWhileAnySequenceLazy 13054 10027 -23.2% 1.30x
PrefixWhileSequenceLazy 11216 8658 -22.8% 1.30x
SuffixAnySequenceLazy 27622 21469 -22.3% 1.29x
DropWhileSequence 14250 11140 -21.8% 1.28x
SequenceAlgosUnfoldSequence 6871 5468 -20.4% 1.26x
DropFirstSequenceLazy 10391 8270 -20.4% 1.26x
DropFirstSequence 10460 8369 -20.0% 1.25x
PrefixSequence 8412 6784 -19.4% 1.24x
PrefixAnySequenceLazy 8772 7108 -19.0% 1.23x
DropFirstAnySequence 11511 9359 -18.7% 1.23x
DropFirstAnySequenceLazy 11618 9457 -18.6% 1.23x
PrefixSequenceLazy 8302 6789 -18.2% 1.22x
PrefixAnySequence 9224 7556 -18.1% 1.22x
MapReduceLazySequence 21140 17522 -17.1% 1.21x
SuffixSequence 23095 20526 -11.1% 1.13x
StringMatch 55342 50650 -8.5% 1.09x
SuffixAnySequence 23001 21157 -8.0% 1.09x
SuffixSequenceLazy 22969 21183 -7.8% 1.08x
DropLastSequenceLazy 28120 26083 -7.2% 1.08x
How to read the data The tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.

If you see any unexpected regressions, you should consider fixing the
regressions before you merge the PR.

Noise: Sometimes the performance results (not code size!) contain false
alarms. Unexpected regressions which are marked with '(?)' are probably noise.
If you see regressions which you cannot explain you can try to run the
benchmarks again. If regressions still show up, please consult with the
performance team (@eeckstein).

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
--------------

@Catfish-Man
Copy link
Contributor Author

ObjectiveCBridgeFromNSDictionaryAnyObject improved by 1.34x at -Osize, but didn't change at -O or -Onone? That seems… a bit unlikely.

@slavapestov
Copy link
Contributor

@Catfish-Man Actually it's quite possible. At -Osize we outline copy/move/destroy operations, an one of my changes stops us from instantiating Optional metadata when calling these thunks.

However it looks like overall this change is not a win with your bridging work so there's something else going on. It might be a generic type other than Optional that is being instantiated too.

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

4 similar comments
@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man
Copy link
Contributor Author

@swift-ci please smoke benchmark

@Catfish-Man Catfish-Man changed the title Experimentally change how Dictionary casting handles Strings, and speed up String bridging a bit to compensate [DNM] Experimentally change how Dictionary casting handles Strings, and speed up String bridging a bit to compensate Dec 10, 2018
@milseman
Copy link
Member

@swift-ci please benchmark

@swift-ci
Copy link
Contributor

Build comment file:

Performance: -O

TEST OLD NEW DELTA RATIO
Regression
IterateData 1277 1401 +9.7% 0.91x
ObjectiveCBridgeStubFromNSString 766 839 +9.5% 0.91x (?)
Improvement
DropLastAnySequenceLazy 3507 2590 -26.1% 1.35x
SuffixAnySequenceLazy 3677 2762 -24.9% 1.33x
DictionaryOfAnyHashableStrings_lookup 3496 3114 -10.9% 1.12x
DictionaryOfAnyHashableStrings_insert 4479 4085 -8.8% 1.10x (?)
InsertCharacterEndIndex 144 132 -8.3% 1.09x

Performance: -Osize

TEST OLD NEW DELTA RATIO
Regression
ObjectiveCBridgeStubFromNSString 760 872 +14.7% 0.87x (?)
IterateData 1222 1375 +12.5% 0.89x
Improvement
SuffixAnySequenceLazy 3890 2897 -25.5% 1.34x
DropLastAnySequenceLazy 3731 2821 -24.4% 1.32x
ObjectiveCBridgeFromNSDictionaryAnyObject 60128 47829 -20.5% 1.26x
DropFirstAnySequence 4224 3594 -14.9% 1.18x
PrefixAnySequence 3684 3323 -9.8% 1.11x
InsertCharacterEndIndex 145 132 -9.0% 1.10x

Performance: -Onone

TEST OLD NEW DELTA RATIO
Regression
ObjectiveCBridgeStubFromNSString 806 885 +9.8% 0.91x (?)
LinkedList 28447 30770 +8.2% 0.92x
Improvement
DropWhileSequenceLazy 11521 8591 -25.4% 1.34x
DropWhileAnySequenceLazy 11875 8895 -25.1% 1.34x
PrefixWhileSequenceLazy 10292 7770 -24.5% 1.32x
DropFirstSequence 9688 7364 -24.0% 1.32x
DropWhileAnySequence 13615 10368 -23.8% 1.31x
DropFirstSequenceLazy 9692 7400 -23.6% 1.31x
DropWhileSequence 13001 9936 -23.6% 1.31x
PrefixWhileAnySequenceLazy 10474 8010 -23.5% 1.31x
SequenceAlgosUnfoldSequence 6241 4844 -22.4% 1.29x
PrefixAnySequenceLazy 8021 6265 -21.9% 1.28x
PrefixSequenceLazy 7679 6020 -21.6% 1.28x
DropFirstAnySequence 10463 8220 -21.4% 1.27x
PrefixSequence 7678 6042 -21.3% 1.27x
DropFirstAnySequenceLazy 10659 8391 -21.3% 1.27x
PrefixAnySequence 8386 6666 -20.5% 1.26x
MapReduceLazySequence 19075 15169 -20.5% 1.26x
ObjectiveCBridgeFromNSDictionaryAnyObject 62772 50472 -19.6% 1.24x
SuffixAnySequence 20783 18249 -12.2% 1.14x
SuffixSequence 20567 18141 -11.8% 1.13x
SuffixAnySequenceLazy 21025 18815 -10.5% 1.12x
SetIsSubsetInt0 552 494 -10.5% 1.12x
DropLastAnySequenceLazy 26146 23554 -9.9% 1.11x
SuffixSequenceLazy 20495 18478 -9.8% 1.11x
DropLastSequenceLazy 25544 23203 -9.2% 1.10x
DropLastAnySequence 25232 23172 -8.2% 1.09x
DropLastSequence 25198 23199 -7.9% 1.09x
How to read the data The tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.

If you see any unexpected regressions, you should consider fixing the
regressions before you merge the PR.

Noise: Sometimes the performance results (not code size!) contain false
alarms. Unexpected regressions which are marked with '(?)' are probably noise.
If you see regressions which you cannot explain you can try to run the
benchmarks again. If regressions still show up, please consult with the
performance team (@eeckstein).

Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: Quad-Core Intel Xeon E5
  Processor Speed: 3.7 GHz
  Number of Processors: 1
  Total Number of Cores: 4
  L2 Cache (per Core): 256 KB
  L3 Cache: 10 MB
  Memory: 16 GB
--------------

@swift-ci
Copy link
Contributor

Build comment file:

Performance: -O

TEST OLD NEW DELTA RATIO
Regression
IterateData 1256 1407 +12.0% 0.89x
Improvement
SuffixAnySequenceLazy 3663 2687 -26.6% 1.36x
DropLastAnySequenceLazy 3533 2596 -26.5% 1.36x
DictionaryOfAnyHashableStrings_insert 4780 3993 -16.5% 1.20x
ObjectiveCBridgeStubFromNSString 954 833 -12.7% 1.15x (?)

Performance: -Osize

TEST OLD NEW DELTA RATIO
Regression
ObjectiveCBridgeStubFromNSString 774 999 +29.1% 0.77x (?)
IterateData 1222 1390 +13.7% 0.88x
Improvement
SuffixAnySequenceLazy 3981 2887 -27.5% 1.38x
DropLastAnySequenceLazy 3799 2974 -21.7% 1.28x
DropFirstAnySequence 4322 3452 -20.1% 1.25x
PrefixAnySequence 3676 2999 -18.4% 1.23x
InsertCharacterEndIndexNonASCII 54 50 -7.4% 1.08x (?)

Performance: -Onone

TEST OLD NEW DELTA RATIO
Regression
DropFirstAnySeqCntRangeLazy 42168 46316 +9.8% 0.91x
SuffixAnyCollection 10585 11605 +9.6% 0.91x
PrefixAnyCollection 31552 34591 +9.6% 0.91x
DropLastAnyCollection 10585 11578 +9.4% 0.91x
PrefixAnySeqCRangeIter 32034 35039 +9.4% 0.91x
PrefixAnySeqCntRangeLazy 31637 34596 +9.4% 0.91x
PrefixAnySeqCRangeIterLazy 31649 34555 +9.2% 0.92x
DropFirstAnyCollection 31724 34628 +9.2% 0.92x
PrefixWhileAnyCollection 61778 67428 +9.1% 0.92x
DropLastAnySeqCntRangeLazy 57559 62752 +9.0% 0.92x
SequenceAlgosAnySequence 25913 28191 +8.8% 0.92x
DropFirstAnySeqCntRange 42092 45486 +8.1% 0.93x
SuffixAnySeqCRangeIterLazy 52450 56663 +8.0% 0.93x
SetIsSubsetBox0 786 849 +8.0% 0.93x
Improvement
DropWhileSequenceLazy 11615 8620 -25.8% 1.35x
PrefixWhileSequenceLazy 10285 7688 -25.3% 1.34x
DropWhileAnySequenceLazy 11952 8967 -25.0% 1.33x
PrefixWhileAnySequenceLazy 10534 7994 -24.1% 1.32x
DropFirstSequence 9744 7427 -23.8% 1.31x
DropWhileAnySequence 13602 10409 -23.5% 1.31x
DropFirstSequenceLazy 9677 7407 -23.5% 1.31x
PrefixSequence 7745 5964 -23.0% 1.30x
DropWhileSequence 12959 10018 -22.7% 1.29x
SequenceAlgosUnfoldSequence 6231 4846 -22.2% 1.29x
PrefixSequenceLazy 7653 5956 -22.2% 1.28x
PrefixAnySequenceLazy 7997 6290 -21.3% 1.27x
MapReduceLazySequence 19256 15253 -20.8% 1.26x
DropFirstAnySequenceLazy 10616 8421 -20.7% 1.26x
DropFirstAnySequence 10446 8296 -20.6% 1.26x
PrefixAnySequence 8437 6810 -19.3% 1.24x
SetIsSubsetInt0 560 487 -13.0% 1.15x
CharIndexing_tweet_unicodeScalars_Backwards 996624 869057 -12.8% 1.15x
CharIndexing_ascii_unicodeScalars_Backwards 499997 439604 -12.1% 1.14x
SuffixAnySequence 20669 18221 -11.8% 1.13x
SuffixSequence 20623 18230 -11.6% 1.13x
SuffixAnySequenceLazy 21002 18634 -11.3% 1.13x
SuffixSequenceLazy 20612 18371 -10.9% 1.12x
NormalizedIterator_fastPrenormal 1538 1406 -8.6% 1.09x
DropLastAnySequenceLazy 25761 23667 -8.1% 1.09x
DropLastSequenceLazy 25233 23241 -7.9% 1.09x
DictionaryOfAnyHashableStrings_insert 8094 7485 -7.5% 1.08x
DropLastAnySequence 25156 23269 -7.5% 1.08x
DropLastSequence 25120 23275 -7.3% 1.08x
DictionarySwap 4210 3930 -6.7% 1.07x
How to read the data The tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.

If you see any unexpected regressions, you should consider fixing the
regressions before you merge the PR.

Noise: Sometimes the performance results (not code size!) contain false
alarms. Unexpected regressions which are marked with '(?)' are probably noise.
If you see regressions which you cannot explain you can try to run the
benchmarks again. If regressions still show up, please consult with the
performance team (@eeckstein).

Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: Quad-Core Intel Xeon E5
  Processor Speed: 3.7 GHz
  Number of Processors: 1
  Total Number of Cores: 4
  L2 Cache (per Core): 256 KB
  L3 Cache: 10 MB
  Memory: 16 GB
--------------

@Catfish-Man
Copy link
Contributor Author

The Dictionary part of this is superseded by #21235

@lorentey lorentey dismissed their stale review December 14, 2018 21:23

(obsoleted by #21235)

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.

7 participants