aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-10-12 01:10:15 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-10-12 01:12:53 +0200
commit1a50be2f91ecb5408e68c6fed424ef95bad47162 (patch)
tree50f94e82109a9ef7cea0dbe39bebd4a395868d3b /container-search
parentd81ca5ed1e254bc0dc4fe33a00d7ac641d9715aa (diff)
Reuse scratch buffer to avoid allocating and clearing a new buffer for serializing every tensor.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java12
1 files changed, 8 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java
index 3a9568a7370..c71a06a5a49 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java
@@ -19,11 +19,13 @@ import java.util.function.Consumer;
public class MapConverter {
public static void convertMapTensors(Map<String, Object> map, Consumer<TensorProperty.Builder> inserter) {
+ GrowableByteBuffer buffer = new GrowableByteBuffer(4096);
for (var entry : map.entrySet()) {
var value = entry.getValue();
- if (value instanceof Tensor) {
- byte[] tensor = TypedBinaryFormat.encode((Tensor) value);
- inserter.accept(TensorProperty.newBuilder().setName(entry.getKey()).setValue(ByteString.copyFrom(tensor)));
+ if (value instanceof Tensor tensor) {
+ buffer.clear();
+ TypedBinaryFormat.encode(tensor, buffer);
+ inserter.accept(TensorProperty.newBuilder().setName(entry.getKey()).setValue(ByteString.copyFrom(buffer.getByteBuffer().flip())));
}
}
}
@@ -49,6 +51,7 @@ public class MapConverter {
public static void convertMultiMap(Map<String, List<Object>> map,
Consumer<StringProperty.Builder> stringInserter,
Consumer<TensorProperty.Builder> tensorInserter) {
+ GrowableByteBuffer buffer = new GrowableByteBuffer(4096);
for (var entry : map.entrySet()) {
if (entry.getValue() != null) {
var key = entry.getKey();
@@ -56,7 +59,8 @@ public class MapConverter {
for (var value : entry.getValue()) {
if (value != null) {
if (value instanceof Tensor tensor) {
- var buffer = TypedBinaryFormat.encode(tensor, new GrowableByteBuffer(4096));
+ buffer.clear();
+ TypedBinaryFormat.encode(tensor, buffer);
tensorInserter.accept(TensorProperty.newBuilder().setName(key).setValue(ByteString.copyFrom(buffer.getByteBuffer().flip())));
} else {
stringValues.add(value.toString());