Hey, thank you for your reply!
While I was able to get my function to work as intended, as I’ve detailed in my other comment to @mikmoore, I could not figure out why or how to stop sum() from acting up. As far as I can tell the issue is the mere presence of the larger loop, as even when setting the batch_size = t - 1, which should skip the while loop altogether, a lot of extra memory gets allocated.
Regarding your first suggestion, I am not sure how to proceed with that, as it seems to require meta-programming? ![]()
Regarding the second variant, I tried a number of permutations using the let A = block, none of which helped at all.
function B_chunk(n = n, t = t; chunk_size)
B = zeros(t)
t_lo, t_hi = 2, chunk_size + 1
A_previous = zeros(n)
while t_hi < t
let A = A_chunk(n; chunk_size, A_previous)
for τ in t_lo:t_hi
B[τ] = sum(@views(A[i, τ - t_lo + 1] * v[i]) for i in 1:n)
end
A_previous = @view A[:, end]
end
t_lo, t_hi = t_hi + 1, t_hi + chunk_size
end
let A = A_chunk(n; chunk_size = t - t_lo + 1, A_previous)
for τ in t_lo:t
B[τ] = sum(@views(A[i, τ - t_lo + 1] * v[i]) for i in 1:n)
end
end
return B
end
Even with the let block and without the @threads, no significant change occurred.