aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/dev/morling/onebrc/CalculateAverage_ebarlas.java24
-rw-r--r--src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java3
-rw-r--r--src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java26
-rw-r--r--src/main/java/dev/morling/onebrc/CreateMeasurements2.java72
4 files changed, 66 insertions, 59 deletions
diff --git a/src/main/java/dev/morling/onebrc/CalculateAverage_ebarlas.java b/src/main/java/dev/morling/onebrc/CalculateAverage_ebarlas.java
index 9d463c5..bdb9a8a 100644
--- a/src/main/java/dev/morling/onebrc/CalculateAverage_ebarlas.java
+++ b/src/main/java/dev/morling/onebrc/CalculateAverage_ebarlas.java
@@ -51,7 +51,8 @@ public class CalculateAverage_ebarlas {
try {
var buffer = channel.map(FileChannel.MapMode.READ_ONLY, pStart, pSize);
partitions[pIdx] = processBuffer(buffer, pIdx == 0);
- } catch (IOException e) {
+ }
+ catch (IOException e) {
throw new RuntimeException(e);
}
};
@@ -94,7 +95,8 @@ public class CalculateAverage_ebarlas {
var t = target[j];
if (t == null) {
target[j] = current[j]; // copy ref from current to target
- } else {
+ }
+ else {
t.min = Math.min(t.min, current[j].min);
t.max = Math.max(t.max, current[j].max);
t.sum += current[j].sum;
@@ -154,10 +156,12 @@ public class CalculateAverage_ebarlas {
st = stats[idx] = new Stats(key);
}
readingKey = false;
- } else {
+ }
+ else {
keyHash = HASH_FACTOR * keyHash + b;
}
- } else {
+ }
+ else {
if (b == '\n') {
var v = negative ? -val : val;
st.min = Math.min(st.min, v);
@@ -169,9 +173,11 @@ public class CalculateAverage_ebarlas {
val = 0;
negative = false;
keyStart = buffer.position();
- } else if (b == '-') {
+ }
+ else if (b == '-') {
negative = true;
- } else if (b != '.') { // skip '.' since fractional tenth unit after decimal point is assumed
+ }
+ else if (b != '.') { // skip '.' since fractional tenth unit after decimal point is assumed
val = val * 10 + (b - '0');
}
}
@@ -187,13 +193,15 @@ public class CalculateAverage_ebarlas {
}
private static byte[] readHeader(ByteBuffer buffer) { // read up to and including first newline (or end-of-input)
- while (buffer.hasRemaining() && buffer.get() != '\n') ;
+ while (buffer.hasRemaining() && buffer.get() != '\n')
+ ;
var header = new byte[buffer.position()];
buffer.get(0, header, 0, header.length);
return header;
}
- record Partition(byte[] header, byte[] footer, Stats[] stats) {}
+ record Partition(byte[] header, byte[] footer, Stats[] stats) {
+ }
private static class Stats { // min, max, and sum values are modeled with integral types that represent tenths of a unit
final byte[] key;
diff --git a/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java b/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java
index 8038c1a..bdea518 100644
--- a/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java
+++ b/src/main/java/dev/morling/onebrc/CalculateAverage_seijikun.java
@@ -26,7 +26,6 @@ public class CalculateAverage_seijikun {
private static final String FILE = "./measurements.txt";
-
private static class MeasurementAggregator {
private double min = Double.POSITIVE_INFINITY;
private double max = Double.NEGATIVE_INFINITY;
@@ -179,7 +178,7 @@ public class CalculateAverage_seijikun {
chunkStartPtr = chunkEndPtr;
}
- try(var executor = Executors.newFixedThreadPool(jobCnt)) {
+ try (var executor = Executors.newFixedThreadPool(jobCnt)) {
for (int i = 0; i < jobCnt; ++i) {
executor.submit(chunks[i]);
}
diff --git a/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java b/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java
index b71cadf..5f2c806 100644
--- a/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java
+++ b/src/main/java/dev/morling/onebrc/CalculateAverage_truelive.java
@@ -105,9 +105,8 @@ public class CalculateAverage_truelive {
}
private static Map<String, Measurement> combineMaps(
- final Map<String, Measurement> map1,
- final Map<String, Measurement> map2
- ) {
+ final Map<String, Measurement> map1,
+ final Map<String, Measurement> map2) {
for (final var entry : map2.entrySet()) {
map1.merge(entry.getKey(), entry.getValue(), Measurement::combineWith);
}
@@ -116,7 +115,7 @@ public class CalculateAverage_truelive {
}
public static void main(final String[] args) throws IOException {
- //long before = System.currentTimeMillis();
+ // long before = System.currentTimeMillis();
/**
* Shoutout to bjhara
*/
@@ -136,8 +135,7 @@ public class CalculateAverage_truelive {
final MappedByteBuffer mbb = in.map(
FileChannel.MapMode.READ_ONLY,
start,
- Math.min(CHUNK_SIZE, total - start)
- );
+ Math.min(CHUNK_SIZE, total - start));
int realEnd = mbb.limit() - 1;
while (mbb.get(realEnd) != '\n') {
realEnd--;
@@ -148,16 +146,17 @@ public class CalculateAverage_truelive {
start += realEnd;
return mbb;
- } catch (final IOException e) {
+ }
+ catch (final IOException e) {
throw new RuntimeException(e);
}
}
};
final Map<String, Measurement> reduce = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
- iterator, Spliterator.IMMUTABLE), true)
- .parallel()
- .map(CalculateAverage_truelive::parseBuffer)
- .reduce(CalculateAverage_truelive::combineMaps).get();
+ iterator, Spliterator.IMMUTABLE), true)
+ .parallel()
+ .map(CalculateAverage_truelive::parseBuffer)
+ .reduce(CalculateAverage_truelive::combineMaps).get();
System.out.print("{");
System.out.print(
@@ -169,7 +168,7 @@ public class CalculateAverage_truelive {
.collect(Collectors.joining(", ")));
System.out.println("}");
- //System.out.println("Took: " + (System.currentTimeMillis() - before));
+ // System.out.println("Took: " + (System.currentTimeMillis() - before));
}
@@ -189,7 +188,8 @@ public class CalculateAverage_truelive {
name = new String(arr, 0, len);
bug.position(pos);
bug.mark();
- } else if (c == '\n') {
+ }
+ else if (c == '\n') {
final int pos = bug.position();
bug.reset();
final int len = pos - bug.position();
diff --git a/src/main/java/dev/morling/onebrc/CreateMeasurements2.java b/src/main/java/dev/morling/onebrc/CreateMeasurements2.java
index 4eedfea..e12e3f9 100644
--- a/src/main/java/dev/morling/onebrc/CreateMeasurements2.java
+++ b/src/main/java/dev/morling/onebrc/CreateMeasurements2.java
@@ -35,7 +35,7 @@ public class CreateMeasurements2 {
private static final String FILE = "./measurements2.txt";
static class WeatherStation {
- final static char[] NUMBERS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
+ final static char[] NUMBERS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
final String id;
final int meanTemperature;
@@ -58,8 +58,8 @@ public class CreateMeasurements2 {
* @param buffer the buffer to append to
*/
void measurement(final CheaperCharBuffer buffer) {
- // fake -10.9 to +10.9 variance without double operations and rounding
- // gives us -10 to +10
+ // fake -10.9 to +10.9 variance without double operations and rounding
+ // gives us -10 to +10
int m = meanTemperature + (r.nextInt(21) - 10);
// gives us a decimal digit 0 to 9 as char
char d = NUMBERS[r.nextInt(10)];
@@ -569,39 +569,39 @@ public class CreateMeasurements2 {
// manual loop unroll for less jumps
for (int i = 0; i < count; i = i + 8) {
- {
- // try to fill teh cpu pipeline as much as possible with
- // independent operations
- int s1 = r1.nextInt(stationCount);
- int s2 = r2.nextInt(stationCount);
- int s3 = r3.nextInt(stationCount);
- int s4 = r4.nextInt(stationCount);
- // get us the ojects one after the other to have the array
- // in our L1 cache and not push it out with other data
- var w1 = stations.get(s1);
- var w2 = stations.get(s2);
- var w3 = stations.get(s3);
- var w4 = stations.get(s4);
- // write our data to our buffer
- w1.measurement(sb);
- w2.measurement(sb);
- w3.measurement(sb);
- w4.measurement(sb);
- }
- {
- int s1 = r1.nextInt(stationCount);
- int s2 = r2.nextInt(stationCount);
- int s3 = r3.nextInt(stationCount);
- int s4 = r4.nextInt(stationCount);
- var w1 = stations.get(s1);
- var w2 = stations.get(s2);
- var w3 = stations.get(s3);
- var w4 = stations.get(s4);
- w1.measurement(sb);
- w2.measurement(sb);
- w3.measurement(sb);
- w4.measurement(sb);
- }
+ {
+ // try to fill teh cpu pipeline as much as possible with
+ // independent operations
+ int s1 = r1.nextInt(stationCount);
+ int s2 = r2.nextInt(stationCount);
+ int s3 = r3.nextInt(stationCount);
+ int s4 = r4.nextInt(stationCount);
+ // get us the ojects one after the other to have the array
+ // in our L1 cache and not push it out with other data
+ var w1 = stations.get(s1);
+ var w2 = stations.get(s2);
+ var w3 = stations.get(s3);
+ var w4 = stations.get(s4);
+ // write our data to our buffer
+ w1.measurement(sb);
+ w2.measurement(sb);
+ w3.measurement(sb);
+ w4.measurement(sb);
+ }
+ {
+ int s1 = r1.nextInt(stationCount);
+ int s2 = r2.nextInt(stationCount);
+ int s3 = r3.nextInt(stationCount);
+ int s4 = r4.nextInt(stationCount);
+ var w1 = stations.get(s1);
+ var w2 = stations.get(s2);
+ var w3 = stations.get(s3);
+ var w4 = stations.get(s4);
+ w1.measurement(sb);
+ w2.measurement(sb);
+ w3.measurement(sb);
+ w4.measurement(sb);
+ }
// write the buffer directly, no intermediate string copy
bw.write(sb.data_, 0, sb.length_);