I'm running into trouble with a line of matrix multiplication going very
slowly in one of my programs. The line I'm looking into is:
objectivematrix=shrt*diagm(expr)*(shrt')
where shrt is 12,000x600 and expr is 600 long. This line takes several
HOURS to run, on a computer that can run
k=rand(12000,12000)
k3=k*k*k
in under a minute. I've tried devectorizing the line into the following
loop (shrt is block-diagonal with each block ONevecs and -ONevecs
respectively, so I split the loop in half)
objectivematrix=zeros(2*size(ONevecs,1),2*size(ONevecs,1))
for i in 1:size(ONevecs,1)
print(i)
for j in 1:size(ONevecs,1)
for k in 1:size(ONevecs,2)
objectivematrix[i,j]+=ONevecs[i,k]*ONevecs[j,k]*expr[k]
end
end
end
for i in 1:size(ONevecs,1)
print(i)
for j in 1:size(ONevecs,1)
for k in 1:size(ONevecs,2)
objectivematrix[i+size(ONevecs,1),j+size(ONevecs,1)]+=ONevecs[i,k]*ONevecs[j,k]*expr[k+size(ONevecs,2)]
end
end
end
and this give a print out every couple seconds- it's faster than the matrix
multiplication version, but not enough. Why is this taking so long? This
should not be a hard operation.