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.

Reply via email to