aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/morling
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix hundredwatt's entry on 10k dataset (#558)Jason Nochlin2024-01-261-8/+13
| | | | | | | | | | | | | * Improve hash function * remove limit on number of cores * fix calculation of boundaries between chunks * fix IOOBE --------- Co-authored-by: Jason Nochlin <hundredwatt@users.noreply.github.com>
* CalculateAverage_gonix update (#579)gonix2024-01-251-23/+21
| | | Minor updates here and there, shaves off ~5% of execution time on my machine.
* Contribution by albertoventurini (#578)Alberto Venturini2024-01-251-0/+299
| | | | | | | | | | | | | | | * Contribution by albertoventurini * Shave off a couple of hundreds of milliseconds, by making an assumption on temperature readings * Parse reading without loop, inspired by other solutions * Use all cores * Small improvements, only allocate 247 positions instead of 256 --------- Co-authored-by: Alberto Venturini <alberto.venturini@accso.de>
* Updates for gamlerhart: Simpler & Faster (#580)Roman Stoffel2024-01-251-131/+86
| | | | | | | | | | | | | | | * Update with Rounding Bugfix * Simplification of Merging Results * More Plain Java Code for Value Storage * Improve Performance by Stupid Hash Drop around 3 seconds on my machine by simplifying the hash to be ridicules stupid, but faster. * Fix outdated comment
* Second submission to keep a bit of dignity (#581)Dmitry Bufistov2024-01-251-200/+182
| | | | | | | | | * Dmitry challenge * Dmitry submit 2. Use MemorySegment of FileChannle and Unsafe to read bytes from disk. 4 seconds speedup in local test from 20s to 16s.
* tonivade improved solution (#582)Antonio Muñoz2024-01-251-128/+146
| | | | | | | | | | | | | | | | | | | * tonivade improved not using HashMap * use java 21.0.2 * same hash same station * remove unused parameter in sameSation * use length too * refactor parallelization * use parallel GC * refactor * refactor
* Down to 14s locally (#583)Dr Ian Preston2024-01-251-49/+69
| | | | | | Use flat array for stats. Use simd for line termination Co-authored-by: Ian Preston <ianopolous@protonmail.com>
* armandino: minimise hash collisions + other improvements (#585)Arman Sharif2024-01-251-50/+46
|
* Simplify Node class with less field, improve hash mix speed (#584)Van Phu DO2024-01-251-66/+60
| | | | | | | * Simplify Node class with less field, improve hash mix speed * remove some ops, a bit faster * more inline, little bit faster but not sure
* gabrielfoo's first attempt (#556)gabrielfoo2024-01-251-0/+180
| | | | | | | | | * first attempt * formatting fix --------- Co-authored-by: Gabriel <gabriel@gabriel>
* C style code. Should be ~4secs or lower based on local testing. (#559)Vemana2024-01-251-0/+1654
| | | | | | 1. Use Unsafe 2. Fit hashtable in L2 cache. 3. If we can find a good hash function, it can fit in L1 cache even. 4. Improve temperature parsing by using a lookup table
* Laake Scates-Gervasi first submission (justplainlaake) [2.5s execution, ↵Laake Scates-Gervasi2024-01-231-0/+459
| | | | | | | | | | | | | | | | | | | | | | | | | locally similar time to top 5] (#431) * Init Push * organize imports * Add OpenMap * Best outcome yet * Create prepare script and calculate script for native image, also add comments on calculation * Remove extra hashing, and need for the set array * Commit formatting changes from build * Remove unneeded device information * Make shell scripts executable, add hash collision double check for equality * Add hash collision double check for equality * Skip multithreading for small files to improve small file performance
* Rewrote to always read 16 bytes, this has less instructions on perf. (#562)Roy van Rijn2024-01-231-181/+116
| | | It doesn't make a lot of sense since quite some code can be written shorter, but this is what gives the best numbers.
* CalculateAverage_3j5a off-the-shelf Java components + ArraysSupport (#566)3j5a2024-01-231-0/+277
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * off the shell Java components, curious about official runtime results. thnx my laptop results are around 12 seconds, e.g: 87.66user 1.32system 0:12.11elapsed 734%CPU (0avgtext+0avgdata 13980924maxresident)k Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i5-8400H CPU @ 2.50GHz * off-the-shelf Java components... curious about official runtime results. thnx laptop results are around 11 seconds, e.g: ./calculate_average_3j5a.sh 81.46s user 1.36s system 758% cpu 10.917 total Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i5-8400H CPU @ 2.50GHz * off-the-shelf Java components + ArraysSupport.. laptop results are around 10.2 seconds, e.g: ./calculate_average_3j5a.sh 75.02s user 1.31s system 750% cpu 10.175 total Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i5-8400H CPU @ 2.50GHz * method handle... * full buffer read attempt * MH * MH cleanup
* 1brc contribution from mattiz (first attempt) (#567)Mathias Bjerke2024-01-231-0/+324
| | | | | * Contribution from mattiz * Formatted code
* fine tuning performance further (#526)karthikeyan972024-01-231-55/+46
| | | | | | | | | | | | | | | * final comit changing using mappedbytebuffer changes before using unsafe address using unsafe * using graalvm,correct unsafe mem implementation --------- Co-authored-by: Karthikeyans <karthikeyan.sn@zohocorp.com>
* Native image + a few smaller optimisations (#564)Roman Musin2024-01-231-133/+114
| | | | | | | | | * Inline parsing name and station to avoid constantly updating the offset field (-100ms) * Remove Worker class, inline the logic into lambda * Accumulate results in an int matrix instead of using result row (-50ms) * Use native image
* Add Yourwass take on the challenge (#532)yourwass2024-01-231-0/+288
| | | | * Uses vector api for city name parsing and for hash index collision resolution * Uses lookup tables for temperature parsing
* improvements (#521)Yann Moisan2024-01-231-7/+10
| | | | | | - inline computeIfAbsent - replace arraycopy by copyOfRange Co-authored-by: Yann Moisan <yann@zen.ly>
* Deploy v2 for parkertimmins (#524)Parker Timmins2024-01-231-97/+78
| | | | | | | | | | | | | | | | | | * Deploy v2 for parkertimmins Main changes: - fix hash which masked incorrectly - do station equality check in simd - make station array length multiple of 32 - search for newline rather than semicolon * Fix bug - entries were being skipped between batches At the boundary between two batches, the first batch would stop after crossing a limit with a padding of 200 characters applied. The next batch should then start looking for the first full entry after the padding. This padding logic had been removed when starting a batch. For this reason, entries starting in the 200 character padding between batches were skipped.
* parse value before going to map (#548)Artsiom Korzun2024-01-231-27/+49
| | | parse value before going to map
* First optimal solution attempt (#539)Gaurav Anantrao Deshmukh2024-01-231-0/+308
| | | | | | | | | | | * First optimal attempt * Removing debug lines * Using default string equals method --------- Co-authored-by: Gaurav Deshmukh <deshmgau@amazon.com>
* b1rc challenge by @jeevjyot (#551)Jeevjyot Singh Chhabda2024-01-231-0/+107
| | | | | | | | | | | | | | | * b1rc challenge * fixed a rounding error * added the file back * fixed file * removed a file --------- Co-authored-by: Jeevjyot Singh Chhabda <jeevjyotsinghchhabda@Jeevjyots-MBP.hsd1.ca.comcast.net>
* jerrinot's improvement - fast-path for short keys (#545)Jaromir Hamala2024-01-231-160/+273
| | | | | | | | | | | * fast-path for keys<16 bytes * fix off by one error the mask is wrong for he 2nd word when len == 16 * less chunks per thread seems like compact code wins. on my test box anyway.
* Add 1brc solution by @makohn (#544)Marek Kohn2024-01-231-0/+287
|
* use thomaswue trick, use parallelism, slightly faster (#560)Van Phu DO2024-01-231-62/+95
|
* Use simd for name comparison (#568)Dr Ian Preston2024-01-231-87/+32
| | | Co-authored-by: Ian Preston <ianopolous@protonmail.com>
* tonivade implementation (try 2) (#541)Antonio Muñoz2024-01-231-0/+268
| | | | | | | | | | | | | | | | | * tonivade implementation * synchronized block performs better than ReentrantLock * remove ConcurrentHashMap * refactor * use HashMap.newHashMap * change double to int * minor refactor * fix
* Inline and optimize value parsing code for each of the four semicolon ↵Elliot Barlas2024-01-231-47/+112
| | | | position processing branches. This provides a small but noticeable speed-up. It also expands and obfuscates the code, unfortunately. (#563)
* subprocess spawner (#542)Artsiom Korzun2024-01-211-42/+73
|
* Reverting ByteBuffer idea, using Thomas's trick instead. (#538)Roy van Rijn2024-01-211-8/+36
|
* Tuning and subprocess spawn for thomaswue (#533)Thomas Wuerthinger2024-01-211-70/+97
| | | | | | | | | | | | | * Some clean up, small-scale tuning, and reduce complexity when handling longer names. * Do actual work in worker subprocess. Main process returns immediately and OS clean up of the mmap continues in the subprocess. * Update minor Graal version after CPU release. * Turn GC back to epsilon GC (although it does not seem to make a difference). * Minor tuning for another +1%.
* optimize branches (#534)Artsiom Korzun2024-01-211-8/+15
|
* Adjust rolling hash function to operate at int-scale rather than byte-scale. ↵Elliot Barlas2024-01-211-22/+17
| | | | Ensure 8-byte alignment in key buffer for faster comparisons. (#523)
* Reduce allocations and heap size (#525)Roman Musin2024-01-211-21/+30
| | | | | | | | | | | * Reduce allocations * Shrink the heap size * Calculate hash when reading name (50-100ms difference) * no need to reverse bytes * bump heap size
* reorganize code, little bit faster (#509)Van Phu DO2024-01-211-24/+27
|
* Use Array to store results instead of grouping by and custom class (#522)kumarsaurav1232024-01-211-130/+141
|
* Improving first iteration by avoiding string creation as much as possible (#516)adri2024-01-201-32/+53
| | | | | - It avoids creating unnecessary Strings objects and handles with the station names with its djb2 hashes instead - Initializes hashmaps with capacity and load factor - Adds -XX:+AlwaysPreTouch
* Solution without unsafe (#507)giovannicuccu2024-01-201-0/+421
| | | Co-authored-by: Giovanni Cuccu <gcuccu@imolainformatica.it>
* Add 0xshivamagarwal Implementation (#508)Shivam Agarwal2024-01-201-0/+137
| | | | | | | | | * 0xshivamagarwal implementation * . --------- Co-authored-by: Shivam Agarwal <>
* using unsafe alone (#512)karthikeyan972024-01-201-107/+102
| | | | | | | | | | | | | | | * final comit changing using mappedbytebuffer changes before using unsafe address using unsafe * using graalvm,correct unsafe mem implementation --------- Co-authored-by: Karthikeyans <karthikeyan.sn@zohocorp.com>
* Improved version based on rafaelmerino (#511)Yann Moisan2024-01-201-0/+272
| | | | | | | | | | | * files created by create_fork.sh * use indexOf * improved implementation based on rafaelmerino --------- Co-authored-by: Yann Moisan <yann@zen.ly>
* Epsilon GC + a number of other small tweaks (#513)Roman Musin2024-01-201-72/+53
| | | | | | | | | | | | | | | | | * Version 3 * Use SWAR algorithm from netty for finding a symbol in a string * Faster equals - store the remainder in a long field (- 0.5s) * optimise parsing numbers - prep * Keep tweaking parsing logic * Rewrote number parsing may be a tiby bit faster it at all * Epsilon GC
* Introducing the vector api. 1s faster on 4 core i7 (#506)Dr Ian Preston2024-01-201-54/+50
| | | Co-authored-by: Ian Preston <ianopolous@protonmail.com>
* jerrinot's improvement (#514)Jaromir Hamala2024-01-201-84/+67
| | | | | | | * refactoring * segregated heap for names also a different hashing function. turns out hashing just first word is good enough
* yonatang solution: a jdk8 friendly, no unsafe code, epsilon-gc friendly ↵Yonatan Graber2024-01-201-0/+320
| | | | | | | | | | | | | | | | | | | solution (#499) * 1bc challenge, but one that will run using jdk 8 without unsafe and still do reasonably well. * Better hashtable * the fastest GC is no GC * cleanups * increased hash size * removed Playground.java * collision-handling allocation free hashmap * formatting
* Processing byte array backwards (#504)Xylitol2024-01-201-133/+327
|
* Use Arena MemorySegments rather than ByteBuffers. (#505)Elliot Barlas2024-01-201-120/+137
|
* Added dedicated reader (#493)Roy van Rijn2024-01-191-211/+457
| | | Started running perf, perhaps this helps. No idea how to use it yet
* Change data storage improving memory locality (#496)Juan Parera2024-01-191-100/+131
|