Leaderboard update
This commit is contained in:
		
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
								
							| @@ -38,19 +38,20 @@ Submit your implementation by Jan 31 2024 and become part of the leaderboard! | ||||
| | # | Result (m:s.ms) | Implementation     | JDK | Submitter     | | ||||
| |---|-----------------|--------------------|-----|---------------| | ||||
| | 1.|        00:14.848| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_spullara.java)| 21.0.1-graalce| [Sam Pullara](https://github.com/spullara)| | ||||
| | 2.|        00:18.865| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_palmr.java)| 21.0.1-open| [Nick Palmer](https://github.com/palmr)| | ||||
| | 3.|        00:21.853| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_filiphr.java)| 21.0.1-graal| [Filip Hrisafov](https://github.com/filiphr)| | ||||
| | 4.|        00:23.366| [link](https://github.com/gunnarmorling/1brc/pull/5/)| 21.0.1-open   | [Roy van Rijn](https://github.com/royvanrijn)| | ||||
| | 5.|        00:38.106| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java)| 21.0.1-open   | [Markus Ebner](https://github.com/seijikun)| | ||||
| | 6.|        00:38.510| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_bjhara.java)| 21.0.1-open   | [Hampus Ram](https://github.com/bjhara)| | ||||
| | 7.|        00:38.819| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_richardstartin.java)| 21.0.1-open   | [Richard Startin](https://github.com/richardstartin)| | ||||
| | 8.|        00:50.547| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_padreati.java)| 21.0.1-open   | [Aurelian Tutuianu](https://github.com/padreati)| | ||||
| | 9.|        00:53.679| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_criccomini.java)| 21.0.1-open   | [Chris Riccomini](https://github.com/criccomini)| | ||||
| |10.|        00:57.141| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java)| 21.0.1-open   | [Roman Schweitzer](https://github.com/truelive)| | ||||
| |11.|        02:00.101| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_khmarbaise.java)| 21.0.1-open   | [khmarbaise](https://github.com/khmarbaise)| | ||||
| |12.|        02:08.315| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java)| 21.0.1-open   | [itaske](https://github.com/itaske)| | ||||
| |13.|        02:08.650| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_kuduwa_keshavram.java)| 21.0.1-open   | [Kuduwa Keshavram](https://github.com/kuduwa_keshavram)| | ||||
| |14.|        04:13.449| [link](https://github.com/gunnarmorling/onebrc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage.java) (baseline)| 21.0.1-open   | [Gunnar Morling](https://github.com/gunnarmorling)| | ||||
| | 2.|        00:17.905| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_lawrey.java)| 21.0.1-open| [Peter Lawrey](https://github.com/peter-lawrey)| | ||||
| | 3.|        00:18.865| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_palmr.java)| 21.0.1-open| [Nick Palmer](https://github.com/palmr)| | ||||
| | 4.|        00:21.853| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_filiphr.java)| 21.0.1-graal| [Filip Hrisafov](https://github.com/filiphr)| | ||||
| | 5.|        00:23.260| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_richardstartin.java)| 21.0.1-open   | [Richard Startin](https://github.com/richardstartin)| | ||||
| | 6.|        00:23.366| [link](https://github.com/gunnarmorling/1brc/pull/5/)| 21.0.1-open   | [Roy van Rijn](https://github.com/royvanrijn)| | ||||
| | 7.|        00:38.106| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java)| 21.0.1-open   | [Markus Ebner](https://github.com/seijikun)| | ||||
| | 8.|        00:38.510| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_bjhara.java)| 21.0.1-open   | [Hampus Ram](https://github.com/bjhara)| | ||||
| | 9.|        00:50.547| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_padreati.java)| 21.0.1-open   | [Aurelian Tutuianu](https://github.com/padreati)| | ||||
| |10.|        00:53.679| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_criccomini.java)| 21.0.1-open   | [Chris Riccomini](https://github.com/criccomini)| | ||||
| |11.|        00:57.141| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java)| 21.0.1-open   | [Roman Schweitzer](https://github.com/truelive)| | ||||
| |12.|        02:00.101| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_khmarbaise.java)| 21.0.1-open   | [khmarbaise](https://github.com/khmarbaise)| | ||||
| |13.|        02:08.315| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_itaske.java)| 21.0.1-open   | [itaske](https://github.com/itaske)| | ||||
| |14.|        02:08.650| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_kuduwa_keshavram.java)| 21.0.1-open   | [Kuduwa Keshavram](https://github.com/kuduwa_keshavram)| | ||||
| |15.|        04:13.449| [link](https://github.com/gunnarmorling/onebrc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage.java) (baseline)| 21.0.1-open   | [Gunnar Morling](https://github.com/gunnarmorling)| | ||||
|  | ||||
| See [below](#entering-the-challenge) for instructions how to enter the challenge with your own implementation. | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -185,6 +185,7 @@ | ||||
|                 <exclude>**/.dontdelete</exclude> | ||||
|                 <exclude>**/measurements*.txt</exclude> | ||||
|                 <exclude>**/measurements*.out</exclude> | ||||
|                 <exclude>out_expected.txt</exclude> | ||||
|               </excludes> | ||||
|             </configuration> | ||||
|             <executions> | ||||
|   | ||||
| @@ -159,7 +159,8 @@ public class CalculateAverage_lawrey { | ||||
|                 m.sample(temp / 10.0); | ||||
|             } | ||||
|  | ||||
|         } catch (IOException ioe) { | ||||
|         } | ||||
|         catch (IOException ioe) { | ||||
|             throw new RuntimeException(ioe); | ||||
|         } | ||||
|         return map; | ||||
| @@ -169,8 +170,7 @@ public class CalculateAverage_lawrey { | ||||
|     private static int readTemperatureFromBuffer(MappedByteBuffer mbb) { | ||||
|         int temp = 0; | ||||
|         boolean negative = false; | ||||
|         outer: | ||||
|         while (mbb.remaining() > 0) { | ||||
|         outer: while (mbb.remaining() > 0) { | ||||
|             byte b = mbb.get(); | ||||
|             switch (b) { | ||||
|                 case '-': | ||||
|   | ||||
| @@ -87,8 +87,7 @@ public class CalculateAverage_richardstartin { | ||||
|  | ||||
|         private final Table table = new Table(nextBaseIndex()); | ||||
|  | ||||
|         private static final AtomicIntegerFieldUpdater<Dictionary> BASE_INDEX_UPDATER = | ||||
|                 AtomicIntegerFieldUpdater.newUpdater(Dictionary.class, "baseIndex"); | ||||
|         private static final AtomicIntegerFieldUpdater<Dictionary> BASE_INDEX_UPDATER = AtomicIntegerFieldUpdater.newUpdater(Dictionary.class, "baseIndex"); | ||||
|         volatile int baseIndex; | ||||
|  | ||||
|         private void forEach(Table table, IndexedStringConsumer consumer) { | ||||
| @@ -120,13 +119,15 @@ public class CalculateAverage_richardstartin { | ||||
|                     if (storedKey == null) { | ||||
|                         if (row.keys.compareAndSet(c, null, slice)) { | ||||
|                             return table.index(rowIndex, c); | ||||
|                         } else { | ||||
|                         } | ||||
|                         else { | ||||
|                             storedKey = row.keys.get(c); | ||||
|                             if (slice.equals(storedKey)) { | ||||
|                                 return table.index(rowIndex, c); | ||||
|                             } | ||||
|                         } | ||||
|                     } else if (slice.equals(storedKey)) { | ||||
|                     } | ||||
|                     else if (slice.equals(storedKey)) { | ||||
|                         return table.index(rowIndex, c); | ||||
|                     } | ||||
|                 } | ||||
| @@ -141,8 +142,7 @@ public class CalculateAverage_richardstartin { | ||||
|  | ||||
|         private static final class Row { | ||||
|  | ||||
|             private static final AtomicReferenceFieldUpdater<Row, Table> | ||||
|                     NEXT_TABLE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(Row.class, Table.class, "next"); | ||||
|             private static final AtomicReferenceFieldUpdater<Row, Table> NEXT_TABLE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(Row.class, Table.class, "next"); | ||||
|             private final AtomicReferenceArray<ByteBuffer> keys = new AtomicReferenceArray<>(CELLS); | ||||
|             volatile Table next; | ||||
|  | ||||
| @@ -152,7 +152,8 @@ public class CalculateAverage_richardstartin { | ||||
|                     Table newTable = new Table(baseIndexSupplier.getAsInt()); | ||||
|                     if (NEXT_TABLE_UPDATER.compareAndSet(this, null, newTable)) { | ||||
|                         next = newTable; | ||||
|                     } else { | ||||
|                     } | ||||
|                     else { | ||||
|                         next = this.next; | ||||
|                     } | ||||
|                 } | ||||
| @@ -180,14 +181,16 @@ public class CalculateAverage_richardstartin { | ||||
|     private static long compilePattern(long repeat) { | ||||
|         return 0x101010101010101L * repeat; | ||||
|     } | ||||
|  | ||||
|     private static long compilePattern(char delimiter) { | ||||
|         return compilePattern (delimiter & 0xFFL); | ||||
|         return compilePattern(delimiter & 0xFFL); | ||||
|     } | ||||
|  | ||||
|     private static long compilePattern(byte delimiter) { | ||||
|         return compilePattern(delimiter & 0xFFL); | ||||
|     } | ||||
|  | ||||
|     private static final long NEW_LINE = compilePattern((byte)'\n'); | ||||
|     private static final long NEW_LINE = compilePattern((byte) '\n'); | ||||
|     private static final long DELIMITER = compilePattern(';'); | ||||
|  | ||||
|     private static int firstInstance(long word, long pattern) { | ||||
| @@ -311,11 +314,12 @@ public class CalculateAverage_richardstartin { | ||||
|             for (int i = 0; i < contribution.length; i++) { | ||||
|                 if (aggregate[i] == null) { | ||||
|                     aggregate[i] = contribution[i]; | ||||
|                 } else if (contribution[i] != null) { | ||||
|                 } | ||||
|                 else if (contribution[i] != null) { | ||||
|                     double[] to = aggregate[i]; | ||||
|                     double[] from = contribution[i]; | ||||
|                     // todo won't vectorise - consider separating aggregates into distinct regions and apply | ||||
|                     //  loop fission (if this shows up in the profile) | ||||
|                     // loop fission (if this shows up in the profile) | ||||
|                     for (int j = 0; j < to.length; j += 4) { | ||||
|                         to[j] += from[j]; | ||||
|                         to[j + 1] = Math.min(to[j + 1], from[j + 1]); | ||||
| @@ -334,7 +338,8 @@ public class CalculateAverage_richardstartin { | ||||
|                 var slice = slices.get(min); | ||||
|                 computeSlice(slice, pages); | ||||
|                 return pages; | ||||
|             } else { | ||||
|             } | ||||
|             else { | ||||
|                 int mid = (min + max) / 2; | ||||
|                 var low = new AggregationTask(dictionary, slices, min, mid); | ||||
|                 var high = new AggregationTask(dictionary, slices, mid + 1, max); | ||||
| @@ -349,7 +354,7 @@ public class CalculateAverage_richardstartin { | ||||
|     public static void main(String[] args) throws IOException { | ||||
|         int maxChunkSize = 250 << 20; // 250MiB | ||||
|         try (var raf = new RandomAccessFile(FILE, "r"); | ||||
|              var channel = raf.getChannel()) { | ||||
|                 var channel = raf.getChannel()) { | ||||
|             long size = channel.size(); | ||||
|             // make as few mmap calls as possible subject to the 2GiB limit per buffer | ||||
|             List<ByteBuffer> rawBuffers = new ArrayList<>(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user