aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/weight_compressor.py
diff options
context:
space:
mode:
Diffstat (limited to 'ethosu/vela/weight_compressor.py')
-rw-r--r--ethosu/vela/weight_compressor.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/ethosu/vela/weight_compressor.py b/ethosu/vela/weight_compressor.py
index 22fe512e..cdac6416 100644
--- a/ethosu/vela/weight_compressor.py
+++ b/ethosu/vela/weight_compressor.py
@@ -67,12 +67,19 @@ class NpuWeightTensor(Tensor):
def __init__(self, name):
Tensor.__init__(self, None, None, name + "_npu_encoded_weights")
self.buffer = []
- self.max_range_bytes = 0
+ self.double_buffer_sizes = [0, 0] # Required sizes if double buffering is used
self.encoded_ranges = OrderedDict()
self.hw_traversal = NpuBlockTraversal.DEPTH_FIRST
self.dtype = DataType.uint8
self.scale_compression_config = None
+ def max_range_bytes(self):
+ return max(self.double_buffer_sizes)
+
+ def double_buffer_size(self):
+ """Return total required size for double buffering"""
+ return sum(self.double_buffer_sizes)
+
class CompressedWeightCache:
"""Global tensor weight compression cache"""
@@ -356,7 +363,7 @@ def encode_weight_and_scale_tensor(
weights = np.flip(weights, axis=(0, 1))
encoded_stream = bytearray()
- max_single_buffer_len = 0
+ double_buffer_sizes = [0, 0]
is_depthwise = npu_block_type == NpuBlockType.ConvolutionDepthWise
# Bias & scale
@@ -434,11 +441,11 @@ def encode_weight_and_scale_tensor(
npu_tensor.encoded_ranges[key] = weight_range
# Remember maximum encoded length for DoubleBuffering
- max_single_buffer_len = max(max_single_buffer_len, len(encoded_stream) - buffer_start_offset)
+ double_buffer_sizes[idx % 2] = max(double_buffer_sizes[idx % 2], len(encoded_stream) - buffer_start_offset)
# Attach buffer to tensor
npu_tensor.buffer = encoded_stream
- npu_tensor.max_range_bytes = max_single_buffer_len
+ npu_tensor.double_buffer_sizes = double_buffer_sizes
npu_tensor.set_all_shapes([1, 1, 1, len(encoded_stream)])
npu_tensor.format = TensorFormat.WeightsCompressed