Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions src/tensora/iteration_graph/outputs/_append.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,18 @@ def write_cleanup(self, kernel_type: KernelType):
target_name = self.output.name
output_tensor = Variable(target_name)

all_dense = True
# The number of positions in the previous layer; each dense layer multiplies it by its
# dimension, while each compressed layer replaces it with its final layer pointer.
previous_size: Expression = IntegerLiteral(1)
all_dense = True
# The same count, but with room for one more element, which is the size of the scratch
# space for vals.
padded_size: Expression = IntegerLiteral(1)
for i, mode in enumerate(self.output.modes):
if mode == Mode.dense:
previous_size = previous_size.times(dimension_name(self.output.indexes[i]))
dimension = dimension_name(self.output.indexes[i])
previous_size = previous_size.times(dimension)
padded_size = padded_size.times(dimension)
elif mode == Mode.compressed:
pos_array = pos_name(target_name, i)
if not all_dense:
Expand All @@ -141,16 +146,17 @@ def write_cleanup(self, kernel_type: KernelType):
source.append(output_tensor.attr("indices").idx(i).idx(1).assign(crd_array))

previous_size = final_size
padded_size = final_size.plus(1)
all_dense = False
else:
raise NotImplementedError()

if not all_dense:
# If any layer was compressed, vals was allocated with a guessed capacity, so
# shrink it to its final size
# shrink it to its final size plus the scratch space
vals_array = vals_name(target_name)
source.append(
vals_array.assign(ArrayReallocate(vals_array, types.float, previous_size))
vals_array.assign(ArrayReallocate(vals_array, types.float, padded_size))
)
source.append(output_tensor.attr("vals").assign(vals_name(target_name)))

Expand Down
Loading