summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-01-21 13:58:39 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2024-01-21 14:04:56 +0100
commitf5803f3537919f7a81be9095cc4eec8a830e3ae4 (patch)
treec19e6f26817eb5381d9c16ddd15dc7882f39597b /vespajlib
parent965a96d30aa606b70ce37767f7922cd8809b0ba3 (diff)
- Use get(key) instead of containsKey to avoid extra lookup.
- Enough to use only array[long] and convert directly. No need to create temporary TensorAddress.
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java40
1 files changed, 15 insertions, 25 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java b/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java
index 30dd1d6dc29..55fb4af551e 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/MixedTensor.java
@@ -3,6 +3,7 @@
package com.yahoo.tensor;
import com.google.common.collect.ImmutableMap;
+import com.yahoo.tensor.impl.NumericTensorAddress;
import com.yahoo.tensor.impl.StringTensorAddress;
import java.util.ArrayList;
@@ -326,10 +327,12 @@ public class MixedTensor implements Tensor {
}
private double[] denseSubspace(TensorAddress sparseAddress) {
- if (!denseSubspaceMap.containsKey(sparseAddress)) {
- denseSubspaceMap.put(sparseAddress, new double[(int)denseSubspaceSize()]);
+ double [] values = denseSubspaceMap.get(sparseAddress);
+ if (values == null) {
+ values = new double[(int)denseSubspaceSize()];
+ denseSubspaceMap.put(sparseAddress, values);
}
- return denseSubspaceMap.get(sparseAddress);
+ return values;
}
public IndexedTensor.DirectIndexBuilder denseSubspaceBuilder(TensorAddress sparseAddress) {
@@ -520,7 +523,7 @@ public class MixedTensor implements Tensor {
return builder.build();
}
- private TensorAddress denseOffsetToAddress(long denseOffset) {
+ private long[] denseOffsetToAddress(long denseOffset) {
if (denseOffset < 0 || denseOffset > denseSubspaceSize) {
throw new IllegalArgumentException("Offset out of bounds");
}
@@ -538,17 +541,17 @@ public class MixedTensor implements Tensor {
labels[i] = restSize / innerSize;
restSize %= innerSize;
}
- return TensorAddress.of(labels);
+ return labels;
}
TensorAddress fullAddressOf(TensorAddress sparsePart, long denseOffset) {
- TensorAddress densePart = denseOffsetToAddress(denseOffset);
+ long [] densePart = denseOffsetToAddress(denseOffset);
String[] labels = new String[type.dimensions().size()];
int mappedIndex = 0;
int indexedIndex = 0;
for (TensorType.Dimension d : type.dimensions()) {
if (d.isIndexed()) {
- labels[mappedIndex + indexedIndex] = densePart.label(indexedIndex);
+ labels[mappedIndex + indexedIndex] = NumericTensorAddress.asString(densePart[indexedIndex]);
indexedIndex++;
} else {
labels[mappedIndex + indexedIndex] = sparsePart.label(mappedIndex);
@@ -607,8 +610,7 @@ public class MixedTensor implements Tensor {
b.append(", ");
// start brackets
- for (int i = 0; i < indexes.nextDimensionsAtStart(); i++)
- b.append("[");
+ b.append("[".repeat(Math.max(0, indexes.nextDimensionsAtStart())));
// value
switch (type.valueType()) {
@@ -621,8 +623,7 @@ public class MixedTensor implements Tensor {
}
// end bracket
- for (int i = 0; i < indexes.nextDimensionsAtEnd(); i++)
- b.append("]");
+ b.append("]".repeat(Math.max(0, indexes.nextDimensionsAtEnd())));
}
return index;
}
@@ -656,27 +657,16 @@ public class MixedTensor implements Tensor {
}
}
- private static class DenseSubspaceBuilder implements IndexedTensor.DirectIndexBuilder {
-
- private final TensorType type;
- private final double[] values;
-
- public DenseSubspaceBuilder(TensorType type, double[] values) {
- this.type = type;
- this.values = values;
- }
-
- @Override
- public TensorType type() { return type; }
+ private record DenseSubspaceBuilder(TensorType type, double[] values) implements IndexedTensor.DirectIndexBuilder {
@Override
public void cellByDirectIndex(long index, double value) {
- values[(int)index] = value;
+ values[(int) index] = value;
}
@Override
public void cellByDirectIndex(long index, float value) {
- values[(int)index] = value;
+ values[(int) index] = value;
}
}