You can take the sum of a view with indices:
function fitness(adjacencyMatrix::Union{Matrix{T}, CuArray},
position::Union{Vector, CuArray}) where T <: Real
head = view(position, 1:length(position)-1)
tail = view(position, 2:length(position))
idx = CartesianIndex.(head, tail)
sum(view(adjacencyMatrix, idx))
end
That’s slightly faster
100us instead of 270ms on my system.