Skip to content
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

IntIterator and LongIterator implement OfInt,OfLong #591

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

JervenBolleman
Copy link
Contributor

This makes it easier to use in standard library situations that expect and OfInt or OfLong. The downside is that while practicaly compatible due to autoboxing existing users of the next() method might be slowed down if they do not migrate to nextLong().

SUMMARY

Since java 8 there has been an interface OfInt and OfLong that is similar to the IntIterator and LongIterator in ideas.
However instead of next returning the primitive, next returns an autoboxed one, with new methods nextInt/Long to return a primitive.

This pull request changes uses the two primitive Iterators to OfInt and OfLong. This makes it easier to interoperate with other code that expects these two interfaces. But with a significant downside that existing of next() may have a significant regression in performance.

I personally don't think this should be merged before the 0.10.x release series but wanted to open this pull request for discussion if and when such a patch should be merged.

Procedure to make this patch is trivial. Use rename re-factoring of the existing next to nextInt/Long methods then add the OfInt/Long to the existing Int/LongInterface.

Automated Checks

  • I have run ./gradlew test and made sure that my PR does not break any unit test.
  • I have run ./gradlew checkstyleMain or the equivalent and corrected the formatting warnings reported.

This makes it easier to use in standard library situations that expect
and OfInt or OfLong. The downside is that while practicaly compatible
due to autoboxing existing users of the next() method might be slowed
down if they do not migrate to nextLong().
@blacelle
Copy link
Member

blacelle commented Nov 1, 2022

Relates with #461

I may require the same API change, hence package change.

@lemire
Copy link
Member

lemire commented Nov 1, 2022

But with a significant downside that existing of next() may have a significant regression in performance.

Is that true?

Certainly, that may happen if 'scalarisation' fails, but I am interested in examples where the iterator would be such that scalarisation would not happen.

Could someone volunteer to benchmark this?

@lemire
Copy link
Member

lemire commented Nov 1, 2022

My naive expectation is that if you take an integer, you box it, return the box, and then immediately unbox it to an integer... then the JIT will just optimize away the boxing. At least this ought to be true for 'some' versions of Java.

This presentation makes me hopeful :

https://www.youtube.com/watch?v=p1MhRBYS-k0

In any case, it is an empirical issue. We can test it out.

@JervenBolleman
Copy link
Contributor Author

@lemire I assumed as much in most cases. But the comment on IntIterator suggests that there are cases where scalarization used to fail and Iterator<Integer> was slower than IntIterator by a factor 2x.

Long class: on some tests, LongIterator is nearly twice as fast as Iterator.

With basically identical text in the IntIterator.
I have not checked which test these are and if that is still the case on any jvm that is supported.

@lemire
Copy link
Member

lemire commented Nov 2, 2022

With basically identical text in the IntIterator.

Yes, I am sure that 'on some tests' this was true. We should not assume that it is still true today. Again, I am calling for folks to benchmark this. It may very well be that your PR has no practical performance impact. In other words, I am very supportive of this PR. My assumption is that it is all good. (Of course, we should test it out.)

@JervenBolleman
Copy link
Contributor Author

Well I ran into an issue :( when adapting the existing RealDataBenchmarkIterate.iterate jmh usecase.

java.lang.AbstractMethodError: Receiver class io.druid.extendedset.intset.ConciseSet$BitIterator does not define or inherit an implementation of the resolved method 'int nextInt()' of interface io.druid.extendedset.intset.IntSet$IntIterator.

this might lead to more issues downstream than I expected.

@lemire
Copy link
Member

lemire commented Nov 3, 2022

Why would you need to adapt it?

@JervenBolleman
Copy link
Contributor Author

Oh to see the difference of running the test with nextInt() and the same with next(). A before after could have worked but then I would need to be careful to see if the new test uses next() all the way through. A side by side test seemed more straightforward to quickly do over my lunch break :)

@lemire
Copy link
Member

lemire commented Nov 3, 2022

@JervenBolleman Right but I think care must be needed not to extend it to io.druid.extendedset.intset.ConciseSet.

@JervenBolleman
Copy link
Contributor Author

Ah yes the druid problem is from here. Which could impact users which would use the new nextInt() method on their implementations unless special care is taken as in the wrapper.

This is different from me adapting the exiting JMH benches other than those surfacing this issue.

@lemire
Copy link
Member

lemire commented Nov 3, 2022

Yes. That's an example where this PR would break existing code. :-(

@JervenBolleman
Copy link
Contributor Author

Here comes a very large table with benchmark results from my desktop with JDK1.8 on a cheap (AMD Ryzen 3 3200G).

RealDataBenchmarkIterate.iterate              census-income        false           concise  avgt    5   93624.570 ±  1354.986  us/op
RealDataBenchmarkIterate.iterate              census-income        false               wah  avgt    5   99940.423 ±  1871.250  us/op
RealDataBenchmarkIterate.iterate              census-income        false              ewah  avgt    5   31805.801 ±   371.528  us/op
RealDataBenchmarkIterate.iterate              census-income        false            ewah32  avgt    5   32965.639 ±   535.294  us/op
RealDataBenchmarkIterate.iterate              census-income        false           roaring  avgt    5   44175.572 ±   857.843  us/op
RealDataBenchmarkIterate.iterate              census-income        false  roaring_with_run  avgt    5   95063.975 ±  1167.563  us/op
RealDataBenchmarkIterate.iterate              census-income         true           concise  avgt    5   83627.673 ±  1063.608  us/op
RealDataBenchmarkIterate.iterate              census-income         true               wah  avgt    5   83168.888 ±  1736.442  us/op
RealDataBenchmarkIterate.iterate              census-income         true              ewah  avgt    5   53988.531 ±   389.052  us/op
RealDataBenchmarkIterate.iterate              census-income         true            ewah32  avgt    5   55152.130 ±  1015.384  us/op
RealDataBenchmarkIterate.iterate              census-income         true           roaring  avgt    5   40572.062 ±   486.725  us/op
RealDataBenchmarkIterate.iterate              census-income         true  roaring_with_run  avgt    5   89873.708 ±  2098.997  us/op
RealDataBenchmarkIterate.iterate                 census1881        false           concise  avgt    5   32020.972 ±   209.913  us/op
RealDataBenchmarkIterate.iterate                 census1881        false               wah  avgt    5   38866.001 ±   293.524  us/op
RealDataBenchmarkIterate.iterate                 census1881        false              ewah  avgt    5    9940.712 ±    87.743  us/op
RealDataBenchmarkIterate.iterate                 census1881        false            ewah32  avgt    5   11316.038 ±   107.591  us/op
RealDataBenchmarkIterate.iterate                 census1881        false           roaring  avgt    5    6976.197 ±   117.977  us/op
RealDataBenchmarkIterate.iterate                 census1881        false  roaring_with_run  avgt    5    6032.456 ±    95.029  us/op
RealDataBenchmarkIterate.iterate                 census1881         true           concise  avgt    5   25014.263 ±   268.933  us/op
RealDataBenchmarkIterate.iterate                 census1881         true               wah  avgt    5   33234.051 ±   304.915  us/op
RealDataBenchmarkIterate.iterate                 census1881         true              ewah  avgt    5   24621.008 ±   360.985  us/op
RealDataBenchmarkIterate.iterate                 census1881         true            ewah32  avgt    5   22451.159 ±   366.551  us/op
RealDataBenchmarkIterate.iterate                 census1881         true           roaring  avgt    5    8490.574 ±   116.965  us/op
RealDataBenchmarkIterate.iterate                 census1881         true  roaring_with_run  avgt    5    7780.715 ±   180.603  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false           concise  avgt    5   17506.739 ±   134.495  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false               wah  avgt    5   16957.573 ±   122.374  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false              ewah  avgt    5    9482.126 ±   202.737  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false            ewah32  avgt    5    9522.988 ±   411.025  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false           roaring  avgt    5   18713.455 ±    55.067  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false  roaring_with_run  avgt    5   21072.923 ±   297.301  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true           concise  avgt    5    9268.609 ±    92.863  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true               wah  avgt    5    9232.603 ±    53.770  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true              ewah  avgt    5   18591.367 ±   204.012  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true            ewah32  avgt    5   18376.459 ±   312.524  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true           roaring  avgt    5   20195.490 ±   222.812  us/op
RealDataBenchmarkIterate.iterate              dimension_008         true  roaring_with_run  avgt    5   14091.858 ±   226.287  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false           concise  avgt    5   27629.167 ±   338.394  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false               wah  avgt    5   25060.477 ±   287.210  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false              ewah  avgt    5   14309.600 ±   283.907  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false            ewah32  avgt    5   14768.961 ±   393.144  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false           roaring  avgt    5   30033.121 ±   279.408  us/op
RealDataBenchmarkIterate.iterate              dimension_003        false  roaring_with_run  avgt    5   25020.851 ±   309.943  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true           concise  avgt    5   22148.922 ±   212.940  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true               wah  avgt    5   13819.842 ±   164.823  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true              ewah  avgt    5   28551.717 ±   353.138  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true            ewah32  avgt    5   27618.851 ±   387.081  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true           roaring  avgt    5   33484.449 ±   496.216  us/op
RealDataBenchmarkIterate.iterate              dimension_003         true  roaring_with_run  avgt    5   23712.501 ±   348.601  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false           concise  avgt    5   23618.170 ±   249.464  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false               wah  avgt    5   23590.324 ±   220.618  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false              ewah  avgt    5   15176.818 ±   215.792  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false            ewah32  avgt    5   14933.959 ±    92.276  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false           roaring  avgt    5   25030.025 ±   411.192  us/op
RealDataBenchmarkIterate.iterate              dimension_033        false  roaring_with_run  avgt    5   24418.780 ±   591.263  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true           concise  avgt    5   17889.203 ±   230.876  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true               wah  avgt    5   18288.830 ±   125.135  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true              ewah  avgt    5   29360.996 ±   260.639  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true            ewah32  avgt    5   23624.881 ±   216.498  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true           roaring  avgt    5   27319.069 ±   645.111  us/op
RealDataBenchmarkIterate.iterate              dimension_033         true  roaring_with_run  avgt    5   20835.884 ±   452.093  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false           concise  avgt    5     141.958 ±     2.270  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false               wah  avgt    5     218.811 ±     1.837  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false              ewah  avgt    5      66.938 ±     1.190  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false            ewah32  avgt    5      64.965 ±     1.104  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false           roaring  avgt    5      55.249 ±     0.303  us/op
RealDataBenchmarkIterate.iterate               uscensus2000        false  roaring_with_run  avgt    5      67.260 ±     0.810  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true           concise  avgt    5     129.786 ±     2.080  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true               wah  avgt    5     275.921 ±     3.130  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true              ewah  avgt    5     361.352 ±     2.421  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true            ewah32  avgt    5     207.209 ±     2.987  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true           roaring  avgt    5     205.324 ±     1.747  us/op
RealDataBenchmarkIterate.iterate               uscensus2000         true  roaring_with_run  avgt    5     216.030 ±     3.579  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false           concise  avgt    5  226896.342 ±  7470.638  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false               wah  avgt    5  247976.247 ±  5379.788  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false              ewah  avgt    5   71747.825 ±   651.533  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false            ewah32  avgt    5   78646.819 ±  1142.626  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false           roaring  avgt    5  101651.899 ±  2025.689  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85        false  roaring_with_run  avgt    5  180288.984 ±  3898.397  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true           concise  avgt    5  224084.326 ±  6376.854  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true               wah  avgt    5  235406.903 ±  9183.456  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true              ewah  avgt    5  113346.411 ±  1574.629  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true            ewah32  avgt    5  129986.402 ±  1870.325  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true           roaring  avgt    5   96401.148 ±  1218.999  us/op
RealDataBenchmarkIterate.iterate            weather_sept_85         true  roaring_with_run  avgt    5  169415.926 ±  3475.307  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false           concise  avgt    5    3119.081 ±    59.889  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false               wah  avgt    5    3334.873 ±    67.211  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false              ewah  avgt    5    1400.484 ±     6.613  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false            ewah32  avgt    5    1496.305 ±     4.398  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false           roaring  avgt    5    1177.109 ±    12.333  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes        false  roaring_with_run  avgt    5    1561.423 ±    54.600  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true           concise  avgt    5    3776.480 ±    34.333  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true               wah  avgt    5    4278.048 ±    28.396  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true              ewah  avgt    5    3365.802 ±    64.323  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true            ewah32  avgt    5    2824.377 ±    30.028  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true           roaring  avgt    5    1590.997 ±    10.634  us/op
RealDataBenchmarkIterate.iterate         wikileaks-noquotes         true  roaring_with_run  avgt    5    1522.173 ±    33.172  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false           concise  avgt    5   40441.548 ±   276.335  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false               wah  avgt    5   42226.200 ±   769.980  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false              ewah  avgt    5   22043.466 ±   522.884  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false            ewah32  avgt    5   24334.901 ±   645.419  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false           roaring  avgt    5   38261.382 ±   224.624  us/op
RealDataBenchmarkIterate.iterate          census-income_srt        false  roaring_with_run  avgt    5   83757.567 ±  1354.442  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true           concise  avgt    5   31549.000 ±   315.783  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true               wah  avgt    5   33275.077 ±   260.140  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true              ewah  avgt    5   44587.337 ±   541.571  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true            ewah32  avgt    5   40250.389 ±   639.930  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true           roaring  avgt    5   40934.066 ±   961.934  us/op
RealDataBenchmarkIterate.iterate          census-income_srt         true  roaring_with_run  avgt    5   78953.997 ±  1081.424  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false           concise  avgt    5    6284.080 ±   137.907  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false               wah  avgt    5    7410.881 ±    57.350  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false              ewah  avgt    5    2899.572 ±    33.024  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false            ewah32  avgt    5    2972.569 ±    50.381  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false           roaring  avgt    5    4883.680 ±    83.592  us/op
RealDataBenchmarkIterate.iterate             census1881_srt        false  roaring_with_run  avgt    5    5316.509 ±   127.034  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true           concise  avgt    5    4943.097 ±    70.550  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true               wah  avgt    5    5575.939 ±   129.560  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true              ewah  avgt    5    6384.152 ±    82.942  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true            ewah32  avgt    5    6034.528 ±    41.326  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true           roaring  avgt    5    5487.331 ±    57.597  us/op
RealDataBenchmarkIterate.iterate             census1881_srt         true  roaring_with_run  avgt    5    5602.578 ±    40.201  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false           concise  avgt    5  101998.720 ±  1569.599  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false               wah  avgt    5  101139.710 ±  1306.328  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false              ewah  avgt    5   62635.599 ±  1001.946  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false            ewah32  avgt    5   62959.076 ±  1620.469  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false           roaring  avgt    5  101493.510 ±   900.454  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false  roaring_with_run  avgt    5  100888.301 ±  1612.576  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true           concise  avgt    5   69103.452 ±  1564.182  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true               wah  avgt    5   68935.824 ±   934.779  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true              ewah  avgt    5   96384.069 ±  1505.745  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true            ewah32  avgt    5  100156.745 ±  1451.317  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true           roaring  avgt    5  107431.636 ±   710.166  us/op
RealDataBenchmarkIterate.iterate        weather_sept_85_srt         true  roaring_with_run  avgt    5   87149.586 ±  1463.510  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false           concise  avgt    5    2521.113 ±    23.010  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false               wah  avgt    5    2630.267 ±    60.970  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false              ewah  avgt    5    1179.528 ±    18.017  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false            ewah32  avgt    5    1198.763 ±    24.045  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false           roaring  avgt    5    2082.740 ±    12.225  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt        false  roaring_with_run  avgt    5    2406.058 ±    68.206  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true           concise  avgt    5    1861.671 ±    23.105  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true               wah  avgt    5    2062.436 ±    86.842  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true              ewah  avgt    5    2750.929 ±    13.388  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true            ewah32  avgt    5    2628.888 ±    37.519  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true           roaring  avgt    5    2167.101 ±    12.122  us/op
RealDataBenchmarkIterate.iterate     wikileaks-noquotes_srt         true  roaring_with_run  avgt    5    1900.383 ±    27.286  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false           concise  avgt    5   73215.156 ±    99.880  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false               wah  avgt    5   75877.971 ±    62.375  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false              ewah  avgt    5   21677.641 ±    27.946  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false            ewah32  avgt    5   26667.326 ±   145.403  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false           roaring  avgt    5   29784.891 ±   258.612  us/op
RealDataBenchmarkIterate.iterateInt           census-income        false  roaring_with_run  avgt    5   76063.359 ±  1036.270  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true           concise  avgt    5   67586.723 ±   145.559  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true               wah  avgt    5   61899.546 ±   136.895  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true              ewah  avgt    5   39087.006 ±   788.608  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true            ewah32  avgt    5   42050.706 ±    57.037  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true           roaring  avgt    5   26032.123 ±  2098.098  us/op
RealDataBenchmarkIterate.iterateInt           census-income         true  roaring_with_run  avgt    5   75051.380 ±  1130.903  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false           concise  avgt    5   24087.528 ±   168.341  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false               wah  avgt    5   33578.066 ±   154.877  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false              ewah  avgt    5    7854.773 ±    13.190  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false            ewah32  avgt    5    8580.646 ±   155.126  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false           roaring  avgt    5    4354.552 ±    90.950  us/op
RealDataBenchmarkIterate.iterateInt              census1881        false  roaring_with_run  avgt    5    3178.656 ±    12.730  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true           concise  avgt    5   31122.621 ±    85.009  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true               wah  avgt    5   45222.154 ±   157.614  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true              ewah  avgt    5   19374.521 ±   106.934  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true            ewah32  avgt    5   18267.657 ±   127.228  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true           roaring  avgt    5    5941.905 ±    25.854  us/op
RealDataBenchmarkIterate.iterateInt              census1881         true  roaring_with_run  avgt    5    4888.988 ±   134.596  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false           concise  avgt    5    9257.464 ±    93.021  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false               wah  avgt    5    7670.078 ±    30.275  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false              ewah  avgt    5    6022.345 ±    42.061  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false            ewah32  avgt    5    5987.749 ±    77.586  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false           roaring  avgt    5   13165.304 ±   392.337  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008        false  roaring_with_run  avgt    5   10741.286 ±   817.441  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true           concise  avgt    5    6596.648 ±    50.403  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true               wah  avgt    5    6721.215 ±   144.073  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true              ewah  avgt    5   16432.215 ±   141.353  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true            ewah32  avgt    5   16420.290 ±   125.413  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true           roaring  avgt    5   16849.498 ±   183.512  us/op
RealDataBenchmarkIterate.iterateInt           dimension_008         true  roaring_with_run  avgt    5    7312.777 ±   288.943  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false           concise  avgt    5   13885.823 ±   301.486  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false               wah  avgt    5   12031.068 ±   283.564  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false              ewah  avgt    5    8731.660 ±    66.715  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false            ewah32  avgt    5    8886.346 ±    93.975  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false           roaring  avgt    5   19570.617 ±   434.906  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003        false  roaring_with_run  avgt    5   11505.679 ±    92.298  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true           concise  avgt    5   10118.937 ±   267.429  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true               wah  avgt    5   10716.634 ±   183.861  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true              ewah  avgt    5   23742.720 ±   200.317  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true            ewah32  avgt    5   23885.897 ±    98.378  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true           roaring  avgt    5   20546.910 ±   358.092  us/op
RealDataBenchmarkIterate.iterateInt           dimension_003         true  roaring_with_run  avgt    5   21345.261 ±   222.229  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false           concise  avgt    5   14005.992 ±    96.813  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false               wah  avgt    5   13804.627 ±    94.301  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false              ewah  avgt    5    9700.353 ±  1268.792  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false            ewah32  avgt    5   10838.491 ±   313.375  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false           roaring  avgt    5   17099.546 ±    16.513  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033        false  roaring_with_run  avgt    5   14285.513 ±   109.053  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true           concise  avgt    5   10627.712 ±    44.762  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true               wah  avgt    5   10361.115 ±   180.318  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true              ewah  avgt    5   18703.977 ±    80.854  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true            ewah32  avgt    5   18361.445 ±   235.678  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true           roaring  avgt    5   16585.564 ±   225.471  us/op
RealDataBenchmarkIterate.iterateInt           dimension_033         true  roaring_with_run  avgt    5   14587.825 ±   863.752  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false           concise  avgt    5     128.475 ±     1.526  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false               wah  avgt    5     276.720 ±     2.834  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false              ewah  avgt    5      46.335 ±     1.082  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false            ewah32  avgt    5      52.511 ±     0.415  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false           roaring  avgt    5      39.480 ±     0.511  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000        false  roaring_with_run  avgt    5      42.989 ±     0.839  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true           concise  avgt    5     115.666 ±     1.298  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true               wah  avgt    5     240.312 ±     1.104  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true              ewah  avgt    5     217.728 ±     2.567  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true            ewah32  avgt    5     209.744 ±     2.961  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true           roaring  avgt    5     158.081 ±     1.205  us/op
RealDataBenchmarkIterate.iterateInt            uscensus2000         true  roaring_with_run  avgt    5     169.258 ±     2.458  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false           concise  avgt    5  195759.746 ±   279.095  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false               wah  avgt    5  218385.492 ±   343.464  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false              ewah  avgt    5   54766.893 ±   314.964  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false            ewah32  avgt    5   62036.576 ±    43.514  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false           roaring  avgt    5  108532.400 ±   332.081  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85        false  roaring_with_run  avgt    5  151918.201 ±   138.137  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true           concise  avgt    5  187510.359 ±  1697.082  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true               wah  avgt    5  161058.660 ±   179.622  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true              ewah  avgt    5   69221.692 ±   379.560  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true            ewah32  avgt    5   98846.827 ±   742.577  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true           roaring  avgt    5   75767.588 ±  2874.108  us/op
RealDataBenchmarkIterate.iterateInt         weather_sept_85         true  roaring_with_run  avgt    5  142220.323 ±   557.773  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false           concise  avgt    5    3064.531 ±    33.785  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false               wah  avgt    5    3370.932 ±    69.213  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false              ewah  avgt    5    1410.539 ±    15.095  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false            ewah32  avgt    5    1501.023 ±    18.285  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false           roaring  avgt    5    1097.502 ±     9.132  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes        false  roaring_with_run  avgt    5    1501.622 ±    11.952  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true           concise  avgt    5    3745.797 ±    34.326  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true               wah  avgt    5    4059.695 ±    45.965  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true              ewah  avgt    5    3305.060 ±    18.379  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true            ewah32  avgt    5    6948.978 ±   102.109  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true           roaring  avgt    5    1399.380 ±     9.324  us/op
RealDataBenchmarkIterate.iterateInt      wikileaks-noquotes         true  roaring_with_run  avgt    5    1521.771 ±    60.113  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false           concise  avgt    5   20316.393 ±    95.087  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false               wah  avgt    5   24793.991 ±   273.516  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false              ewah  avgt    5   13746.803 ±    98.740  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false            ewah32  avgt    5   14172.757 ±    26.861  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false           roaring  avgt    5   25755.074 ±   436.789  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt        false  roaring_with_run  avgt    5   19083.392 ±  2208.496  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true           concise  avgt    5   19772.118 ±    67.081  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true               wah  avgt    5   24407.473 ±   911.457  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true              ewah  avgt    5   15041.224 ±    37.312  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true            ewah32  avgt    5   30406.159 ±   300.509  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true           roaring  avgt    5   22396.764 ±  1144.111  us/op
RealDataBenchmarkIterate.iterateInt       census-income_srt         true  roaring_with_run  avgt    5   60820.490 ±   125.541  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false           concise  avgt    5    4245.286 ±    19.812  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false               wah  avgt    5    4694.655 ±     5.785  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false              ewah  avgt    5    1963.220 ±    23.285  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false            ewah32  avgt    5    2079.196 ±    15.873  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false           roaring  avgt    5    3066.303 ±   147.862  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt        false  roaring_with_run  avgt    5    2614.671 ±    19.395  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true           concise  avgt    5    3096.572 ±    33.212  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true               wah  avgt    5    3453.865 ±    37.544  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true              ewah  avgt    5    4574.486 ±    14.647  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true            ewah32  avgt    5    5122.904 ±   691.849  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true           roaring  avgt    5    4057.550 ±   600.004  us/op
RealDataBenchmarkIterate.iterateInt          census1881_srt         true  roaring_with_run  avgt    5    2144.211 ±    69.330  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false           concise  avgt    5   63293.808 ±  1534.521  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false               wah  avgt    5   56567.366 ±   884.432  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false              ewah  avgt    5   41232.401 ±   469.019  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false            ewah32  avgt    5   41598.826 ±  2130.536  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false           roaring  avgt    5   51823.055 ±  3908.135  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false  roaring_with_run  avgt    5   62103.132 ±  2119.709  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true           concise  avgt    5   59379.113 ± 14188.813  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true               wah  avgt    5   52897.449 ±   820.024  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true              ewah  avgt    5   44970.622 ±   982.705  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true            ewah32  avgt    5   81549.144 ±   787.600  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true           roaring  avgt    5   59429.872 ±   334.779  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt         true  roaring_with_run  avgt    5   55679.948 ±   776.105  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false           concise  avgt    5    1319.149 ±    40.557  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false               wah  avgt    5    1684.983 ±    27.536  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false              ewah  avgt    5     814.166 ±    33.766  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false            ewah32  avgt    5     830.628 ±    16.340  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false           roaring  avgt    5    1382.249 ±    54.688  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt        false  roaring_with_run  avgt    5    1202.790 ±    93.392  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true           concise  avgt    5    1297.032 ±    41.211  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true               wah  avgt    5    1604.681 ±    21.585  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true              ewah  avgt    5    2028.207 ±   130.223  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true            ewah32  avgt    5    2025.789 ±    54.166  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true           roaring  avgt    5    1554.208 ±   106.213  us/op
RealDataBenchmarkIterate.iterateInt  wikileaks-noquotes_srt         true  roaring_with_run  avgt    5    1727.039 ±    21.800  us/op

Which on a quick tired eyeballing seems that Integer next() is in this generation slower than int nextInt()
e.g

RealDataBenchmarkIterate.iterate        weather_sept_85_srt        false           concise  avgt    5  101998.720 ±  1569.599  us/op
RealDataBenchmarkIterate.iterateInt     weather_sept_85_srt        false           concise  avgt    5   63293.808 ±  1534.521  us/op

Next up JDk 17.0.4

@lemire
Copy link
Member

lemire commented Nov 4, 2022

JDK 8 is old at this point.

@JervenBolleman
Copy link
Contributor Author

JervenBolleman commented Nov 5, 2022

Here comes the JDK-17 batch. Which I find surprising and very interesting.

Benchmark                                         (dataset)  (immutable)            (type)  Mode  Cnt       Score      Error  Units
RealDataBenchmarkIterate.iterate              census-income        false           concise  avgt    5   60585.840 ±  200.031  us/op
RealDataBenchmarkIterate.iterate              census-income        false               wah  avgt    5   64405.662 ± 1633.663  us/op
RealDataBenchmarkIterate.iterate              census-income        false              ewah  avgt    5   22651.846 ±  299.715  us/op
RealDataBenchmarkIterate.iterate              census-income        false            ewah32  avgt    5   24990.789 ±   78.485  us/op
RealDataBenchmarkIterate.iterate              census-income        false           roaring  avgt    5   22902.269 ± 1411.177  us/op
RealDataBenchmarkIterate.iterate              census-income        false  roaring_with_run  avgt    5   73460.304 ±  612.657  us/op
RealDataBenchmarkIterate.iterate              census-income         true           concise  avgt    5   65408.589 ±  427.706  us/op
RealDataBenchmarkIterate.iterate              census-income         true               wah  avgt    5   72488.744 ± 1427.232  us/op
RealDataBenchmarkIterate.iterate              census-income         true              ewah  avgt    5   36369.824 ±  517.703  us/op
RealDataBenchmarkIterate.iterate              census-income         true            ewah32  avgt    5   42854.491 ±  301.846  us/op
RealDataBenchmarkIterate.iterate              census-income         true           roaring  avgt    5   20664.595 ±  219.097  us/op
RealDataBenchmarkIterate.iterate              census-income         true  roaring_with_run  avgt    5   69659.462 ±  656.541  us/op
RealDataBenchmarkIterate.iterate                 census1881        false           concise  avgt    5   23499.401 ±   69.483  us/op
RealDataBenchmarkIterate.iterate                 census1881        false               wah  avgt    5   33631.251 ±  260.451  us/op
RealDataBenchmarkIterate.iterate                 census1881        false              ewah  avgt    5    7855.835 ±  108.212  us/op
RealDataBenchmarkIterate.iterate                 census1881        false            ewah32  avgt    5    8659.571 ±   55.321  us/op
RealDataBenchmarkIterate.iterate                 census1881        false           roaring  avgt    5    3503.583 ±   96.649  us/op
RealDataBenchmarkIterate.iterate                 census1881        false  roaring_with_run  avgt    5    3143.241 ±   60.106  us/op
RealDataBenchmarkIterate.iterate                 census1881         true           concise  avgt    5   29904.334 ±  393.299  us/op
RealDataBenchmarkIterate.iterate                 census1881         true               wah  avgt    5   33498.888 ±   45.845  us/op
RealDataBenchmarkIterate.iterate                 census1881         true              ewah  avgt    5   13768.821 ±  168.829  us/op
RealDataBenchmarkIterate.iterate                 census1881         true            ewah32  avgt    5   14344.617 ±  238.834  us/op
RealDataBenchmarkIterate.iterate                 census1881         true           roaring  avgt    5    4103.460 ±   13.718  us/op
RealDataBenchmarkIterate.iterate                 census1881         true  roaring_with_run  avgt    5    4239.207 ±   18.397  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false           concise  avgt    5   11176.505 ±  584.739  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false               wah  avgt    5   11997.857 ±  801.142  us/op
RealDataBenchmarkIterate.iterate              dimension_008        false              ewah  avgt    5    6095.119 ±   42.387  us/op

Just leaving the results here now that they are ready. Analysis to follow.

@blacelle blacelle added this to the Version 1.0 milestone Nov 13, 2022
/**
* @return whether there is another value
*/
boolean hasNext();
Copy link
Member

Choose a reason for hiding this comment

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

What about keeping these methods, adding .nextInt with a default implementation? it would enable 0.X compatibility.

Copy link
Member

Choose a reason for hiding this comment

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

Ok. Both interface has a conflict over .next() (int or Integer). This was discussed in

https://github.com/RoaringBitmap/RoaringBitmap/blob/master/RoaringBitmap/src/main/java/org/roaringbitmap/ImmutableBitmapDataProvider.java#L301-L307

-> is the need motivating by this PR covered by wrapping getIntIterator() in a RoaringOfInt as done in

https://github.com/RoaringBitmap/RoaringBitmap/blob/master/RoaringBitmap/src/main/java/org/roaringbitmap/ImmutableBitmapDataProvider.java#L81-L87
?

@lemire
Copy link
Member

lemire commented Jan 27, 2024

I am marking this PR as 'work needed'. Before we adopt this, we need some more analysis.

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

Successfully merging this pull request may close these issues.

None yet

3 participants