diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-10-12 01:10:15 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-10-12 01:12:53 +0200 |
commit | 1a50be2f91ecb5408e68c6fed424ef95bad47162 (patch) | |
tree | 50f94e82109a9ef7cea0dbe39bebd4a395868d3b /container-search/src/main/java/com/yahoo/search/dispatch/rpc | |
parent | d81ca5ed1e254bc0dc4fe33a00d7ac641d9715aa (diff) |
Reuse scratch buffer to avoid allocating and clearing a new buffer for serializing every tensor.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/rpc')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/rpc/MapConverter.java | 12 |
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()); |