Dramatically reduce memory use

This commit is contained in:
kris 2022-07-02 21:20:16 +01:00
parent 0d217e9326
commit 6772b579ca
2 changed files with 10 additions and 22 deletions

View File

@ -140,32 +140,21 @@ def audio_bytestream(data: numpy.ndarray, step: int, lookahead_steps: int,
next_tick = int(eta.i * dlen / 1000)
if frame_offset >= 2043: # XXX
lookahead_steps = min_lookahead_steps + 120 # XXX parametrize
lookahead_steps = min_lookahead_steps + 130 # XXX parametrize
else:
lookahead_steps = min_lookahead_steps
# Compute all possible opcode sequences for this frame offset
candidate_opcodes, voltages, lookahead_steps = \
next_candidate_opcodes, voltages, lookahead_steps = \
opcodes.candidate_opcodes(
frame_horizon(frame_offset, lookahead_steps),
lookahead_steps, opcode if frame_offset == 2047 else None)
# print(frame_offset, voltages.shape, voltages.nbytes)
opcode_idx = lookahead.evolve_return_best(
sp, y1, y2, voltage1, voltage2, voltage1 * voltages,
data[i:i+lookahead_steps])
# Pick the opcode sequence that minimizes the total squared error
# relative to the data waveform.
# errors = total_error(
# all_positions * sp.scale, data[i:i + lookahead_steps])
# opcode_idx = numpy.argmin(errors).item()
# if frame_offset == 2046:
# print("XXX", lookahead_steps)
# print(opcode_idx)
# for i, e in enumerate(errors):
# print(i, e, candidate_opcodes[i])
# Next opcode
opcode = candidate_opcodes[opcode_idx][0]
# opcode = opcode_seq.__next__()
opcode = next_candidate_opcodes[opcode_idx]
opcode_length = opcodes.cycle_length(opcode)
opcode_counts[opcode] += 1
@ -190,8 +179,7 @@ def audio_bytestream(data: numpy.ndarray, step: int, lookahead_steps: int,
if new_error > 0.3:
clicks += 1
print(frame_offset, i / sample_rate, opcode, new_error,
numpy.mean(data[i:i + opcode_length])) # , "<----" if \
# new_error > 0.3 else "")
numpy.mean(data[i:i + opcode_length]))
# print(frame_offset, i / sample_rate, opcode)
for v in all_positions[0]:

View File

@ -20,7 +20,7 @@ def voltage_schedule(op: player_op.PlayerOp) -> numpy.ndarray:
return op.toggles
@functools.lru_cache(None)
#@functools.lru_cache(None)
def opcode_choices(
frame_offset: int,
eof_stage_1_op: player_op.PlayerOp = None) -> List[player_op.PlayerOp]:
@ -39,7 +39,7 @@ def opcode_choices(
list(opcodes_generated.AUDIO_OPS), key=cycle_length, reverse=True)
@functools.lru_cache(None)
#@functools.lru_cache(None)
def opcode_lookahead(
frame_offset: int,
lookahead_cycles: int,
@ -68,7 +68,7 @@ def opcode_lookahead(
return tuple(ops) # TODO: fix return type
@functools.lru_cache(None)
#@functools.lru_cache(None)
def cycle_lookahead(
opcodes: Tuple[player_op.PlayerOp],
lookahead_cycles: int) -> Tuple[float]:
@ -89,7 +89,7 @@ def cycle_lookahead(
def candidate_opcodes(
frame_offset: int, lookahead_cycles: int,
eof_stage_1_op: player_op.PlayerOp
) -> Tuple[Tuple[Tuple[player_op.PlayerOp]], numpy.ndarray, int]:
) -> Tuple[Tuple[player_op.PlayerOp], numpy.ndarray, int]:
"""Deduplicate a tuple of opcode sequences that are equivalent.
For each opcode sequence whose effect is the same when truncated to
@ -114,7 +114,7 @@ def candidate_opcodes(
# print("Dropping", ops, cycles, seen_cycles[cycles])
continue
seen_cycles[cycles] = ops
pruned_opcodes.append(ops)
pruned_opcodes.append(ops[0])
pruned_cycles.append(cycles)
pruned_opcodes = tuple(pruned_opcodes)