Commit Graph

905 Commits

Author SHA1 Message Date
David Rönnqvist
bc235afcf8 [stdlib] Update reduce benchmark to compare the two forms
The ReduceInto benchmark performs three tasks using both `reduce(_:_)` and `reduce(into:_:)` so that their performance can be compared:

1. Summing an array, reducing to `Int`
2. Filtering an array, reducing to `[Int]`
3. Counting letter frequencies, reducing to `[Character: Int]`
2017-07-18 17:42:27 +02:00
Erik Eckstein
ffa38bbf84 Revert "Add benchmarks for a number of NSStringAPI functions"
This reverts commit cf73e560ad.

The benchmarks are causing leaks.
Reverted until this is investigated.
2017-07-17 17:38:49 -07:00
David Rönnqvist
e15ea5fcf3 [stdlib] Implement reduce with inout (SE-0171)
Implement and document `reduce(into:_:)`, with a few notes:

 - The `initial` parameter was renamed `initialResult` to match the first parameter in `reduce(_:_:)`.
 - The unnamed `combining` parameter was renamed `updateAccumulatingResult` to try and resemble the naming of the closure parameter in `reduce(_:_:)`.
 - The closure throws and `reduce(into:_)` re-throws.
 - This documentation mentions that `reduce(into:_)` is preferred over `reduce(_:_:)` when the result is a copy-on-write type and an example where the result is a dictionary.

Add benchmarks for reduce with accumulation into a scalar, an array, and a dictionary.

Update expected error message in closures test (since there are now two `reduce` methods, the diagnostic is different).
2017-07-14 23:24:42 +02:00
Philippe Hausler
cf73e560ad Add benchmarks for a number of NSStringAPI functions 2017-07-13 11:33:35 -07:00
Andrew Trick
b76794ce2b Benchmarks for memory exclusivity enforcement.
Three blind microbenchmarks:
- global access
- materializeForSet class property
- nested independent access
2017-06-29 14:31:46 -07:00
Michael Ilseman
bd5189c25a [String] Grapheme fast paths for punctuation: 5-8x speedup.
Many strings use non-sub-300 punctuation characters (e.g. unicode
hyphen, CJK quotes, etc). This can cause switching between fast and
slow paths for grapheme breaking. Add in fast-paths for general
punctuation characters and CJK punctuation and symbol characters.

This results in about a 5-8x speedup for heavily (unicode) punctuated
Latiny and CJKy workloads.
2017-06-27 19:18:51 -07:00
Dave Abrahams
cb4c656bc2 [stdlib] Add benchmarks for Character's unicodeScalars view
In local testing, these benchmark results change as follows due to f212fac717:

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

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

</details>

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

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

</details>
2017-06-27 17:25:41 -07:00
Erik Eckstein
2c0b69d241 benchmarks: Make sure there is no constant propagation in the StringBuilder benchmarks.
This fixes the StringAdder benchmark, where the string addition was completely constant folded.
It has only minimal effect on the other benchmarks in this file, because the optimizer didn't constant fold the strings there anyway.
2017-06-21 17:21:51 -07:00
swift-ci
42649b36b0 Merge pull request #10468 from eeckstein/convert-benchmark 2017-06-21 17:10:35 -07:00
Erik Eckstein
f45bddcaa6 benchmarks: Convert the GlobalClass benchmark to a SILOptimizer test
The purpose of the benchmark was to check a very specific ARC optimization, which is better tested with a lit test.
Beside that, the benchmark was broken anyway.
2017-06-21 14:32:29 -07:00
Erik Eckstein
e7360897d2 benchmarks: fix ByteSwap benchmark
*) Use getInt to prevent loop hoisting of the benchmark functions
*) Reduce the overhead of CheckResult by moving it out of the loop
*) Prevent inlining of the actual benchmark functions
2017-06-21 13:37:20 -07:00
Erik Eckstein
8abe785300 benchmarks: Fix the BitCount benchmark
*) Increase the iteration count, so that we cat a time value > 100 for better accuracy
*) Use getInt to prevent constant propgation and loop hoisting
2017-06-19 20:30:20 -07:00
Nate Cook
ced26b8565 [benchmark] Fix the Dictionary(group:by:) test
When testing quadratic behavior, remember to repeat small amounts of the
behavior several times, not to increase the N, which is squared. 🙄
2017-06-16 18:33:15 -05:00
Nate Cook
220614c016 [benchmark] Add benchmark for Dictionary(group:by:) 2017-06-15 11:45:33 -05:00
Ben Cohen
ac18e4297a Benchmarks for equating/comparing substrings (#10030)
* Benchmarks for equating/comparing substrings

* Update main.swift

* Regnerate benchmarks harness file
2017-06-01 14:52:58 -07:00
Michael Ilseman
6ee5745a3a [benchmark] Add Russian StringWalk variant (off by default) 2017-05-31 11:34:42 -07:00
Dave Abrahams
010412ced2 [stdlib] Add Substring comparison benchmarks
This exercise reveals lots of unimplemented cases, which, when implemented, will
cause us to uncomment the disabled code.
2017-05-24 20:56:26 -07:00
Joe Shajrawi
a408803345 Revert "[stdlib] Add Substring comparison benchmarks" 2017-05-24 20:20:55 -07:00
Dave Abrahams
01e0f0aceb [stdlib] Add Substring comparison benchmarks
This reveals lots of unimplemented cases, which will cause us to uncomment the
disabled code.
2017-05-24 16:58:29 -07:00
Max Moiseev
d818008a25 [benchmark] Unbreaking the complex expression in ByteSwap
Fixes: <rdar://problem/31543153>
2017-05-17 15:56:18 -07:00
Pavol Vaskovic
a452b0b12e Fixed filename in the header comment. 2017-05-15 20:04:00 +02:00
Michael Ilseman
fb5734c24f Merge pull request #9575 from milseman/unihan_fasterhan
[stdlib] String: Walk Chinese/Japanese faster: 2x/4x forwards/backwards
2017-05-14 13:50:15 -07:00
Ben Cohen
ea2f64cad2 [stdlib] Add Sequence.Element, change ExpressibleByArrayLiteral.Element to ArrayLiteralElement (#8990)
* Give Sequence a top-level Element, constrain Iterator to match

* Remove many instances of Iterator.

* Fixed various hard-coded tests

* XFAIL a few tests that need further investigation

* Change assoc type for arrayLiteralConvertible

* Mop up remaining "better expressed as a where clause" warnings

* Fix UnicodeDecoders prototype test

* Fix UIntBuffer

* Fix hard-coded Element identifier in CSDiag

* Fix up more tests

* Account for flatMap changes
2017-05-14 06:33:25 -07:00
Dave Abrahams
5a0db2f389 [stdlib] Add initial Substring benchmarks 2017-05-12 19:59:41 -07:00
Michael Ilseman
075c6e6a04 [benchmark] Add more (off-by-default) StringWalk benchmarks.
Gyb up StringWalk, to avoid the code explosion. Add in benchmarks for
walking Chinese, Japanese, and Korean text.
2017-05-12 17:34:09 -07:00
eeckstein
087b84e800 Merge pull request #9330 from palimondo/check-results-error-msg
[benchmark] CheckResults with auto-generated error message
2017-05-12 08:47:40 -07:00
practicalswift
8c40c65c80 [gardening] Fix typos. 2017-05-09 21:50:04 +02:00
Dave Abrahams
e0c08c7617 Merge branch 'master' into check-results-error-msg 2017-05-05 15:15:12 -07:00
Dave Abrahams
e32fb8badb Remove interpolated strings from benchmark CheckResults
This call was in many cases skewing the benchmark results.

Note: Intentionally staging this in without removing the old overload initially.
2017-05-05 10:25:02 -07:00
Pavol Vaskovic
dcd98cc04f CheckResults with auto-generated error message
In order to minimize impact of results checking on test performance, this removes the @autoclosure for error message.

Added new version of `CheckResults` that takes only `resultsMatch: Bool` - rest of the parameters are defaulted to `StaticString`s for method and file name, plus line number. Old method was deprecated, but left in place as tool for debugging failing checks. All tests were move to use the new method.
2017-05-05 14:08:13 +02:00
practicalswift
a9c03845cc [gardening] Use consistent headers 2017-05-04 15:24:35 +02:00
Erik Eckstein
3c4fd12a3f benchmarks: Prevent the optimizer to completely optimize away Character results in the CharacterLiteralsSmall benchmark. 2017-05-03 09:05:45 -07:00
Erik Eckstein
62be182cac benchmarks: add a comment and use more meaningful numbers 2017-04-27 16:59:42 -07:00
Maxim Moiseev
41b00c57ab Merge pull request #9044 from moiseev/substring-in
[stdlib] Substring
2017-04-26 19:25:59 -07:00
Max Moiseev
3b607436be Making benchmarks compile 2017-04-26 16:49:34 -07:00
Erik Eckstein
994c04f943 benchmarks: add another benchmark for appending multiple array elements.
In contrast to the other similar benchmarks, this benchmark starts with a new array each iteration.
2017-04-26 15:06:05 -07:00
Erik Eckstein
7914e09aa8 benchmarks: Add a benchmark for COW existentials 2017-04-26 14:54:16 -07:00
swift-ci
0ce898be79 Merge pull request #9036 from aschwaighofer/benchmark_more_autoreleasepools 2017-04-26 13:52:22 -07:00
Arnold Schwaighofer
ca40134c03 [benchmark] Sprinkle more autoreleasepools
SR-4666
2017-04-26 13:21:43 -07:00
swift-ci
1be1f07263 Merge pull request #9031 from aschwaighofer/benchmark_objectivec_bridge_autoreleasepool 2017-04-26 10:53:06 -07:00
Arnold Schwaighofer
a8e3fc9af3 [benchmark] Lower the max memory size of ObejctiveC bridging tests by moving the
autoreleasepool down such that we have less allocations in the pool until it is
empty

rdar://31788785
SR-4666
2017-04-26 10:01:55 -07:00
Arnold Schwaighofer
4338e525bf Merge pull request #9027 from aschwaighofer/benchmark_dictionarybridge_autoreleasepool
[benchmark] Add autorelease pool to fix memory hogging
2017-04-26 09:56:25 -07:00
Arnold Schwaighofer
7ed2122947 [benchmark] Add autorelease pool to fix memory hogging
rdar://31788785
2017-04-26 07:37:07 -07:00
Michael Ilseman
111d6200eb Merge pull request #8979 from milseman/parse_my_tweets_faster
[stdlib] Parse my tweets faster! 2x forwards, 3x reverse
2017-04-26 07:36:18 -07:00
Michael Ilseman
517ac2a66f [benchmark] Add in some (default off) mixed-string micro benchmarks
Adds in a benchmark to see how quickly we can traverse mixed latin and
emoji strings. Default disabled and part of the stringTests suite.
2017-04-24 14:57:42 -07:00
Maxim Moiseev
1c1b2b966d [stdlib] String : RangeReplaceableCollection & BidirectionalCollection (#8921)
* [stdlib] String : RangeReplaceableCollection & BidirectionalCollection

* Add source compatibility hack for Swift.max

* Add source compatibility hack for Swift.min

* Remove redundant conformance in benchmarks

* Fix stupid typo I thought I'd already pushed

* XFAIL testing now-redundant conformance

* XFAIL an IDE test for now
2017-04-23 20:04:54 -07:00
Michael Ilseman
edf8e6e5e6 [benchmark] Move work into the harness generator
Move the improvements to main.swift into the harness generator and
template itself. Run the generator.
2017-04-19 14:59:35 -07:00
Michael Ilseman
9ffc2f073a [benchmark] Add String test suite (off by default)
Starts a String perf test suite called stringTests which is
off-by-default, but allows us to place some lower-level targeted
benchmarking.
2017-04-19 13:31:34 -07:00
practicalswift
a029589093 [gardening] Use consistent headers 2017-04-18 19:51:08 +02:00
Max Moiseev
9b53efd72c Merge branch 'master' into new-integer-protocols 2017-04-17 09:53:44 -07:00