By Julian Samaroo
Highly Scalable
# Cholesky
function cholesky!(M, mt, nt)
for k in range(1, mt)
LAPACK.potrf!('L', M[k, k])
for m in range(k+1, mt)
BLAS.trsm!('R', 'L', 'T', 'N', 1.0,
M[k, k], M[m, k])
end
for n in range(k+1, nt)
BLAS.syrk!('L', 'N', -1.0,
M[n, k], 1.0,
M[n, n])
for m in range(n+1, mt)
BLAS.gemm!('N', 'T', -1.0,
M[m, k], M[n, k],
1.0, M[m, n])
end
end
end
end
# Cholesky written with Dagger Datadeps
Dagger.spawn_datadeps() do
for k in range(1, mt)
Dagger.@spawn LAPACK.potrf!('L', ReadWrite(M[k, k]))
for m in range(k+1, mt)
Dagger.@spawn BLAS.trsm!('R', 'L', 'T', 'N', 1.0,
Read(M[k, k]), ReadWrite(M[m, k]))
end
for n in range(k+1, nt)
Dagger.@spawn BLAS.syrk!('L', 'N', -1.0,
Read(M[n, k]), 1.0,
ReadWrite(M[n, n]))
for m in range(n+1, mt)
Dagger.@spawn BLAS.gemm!('N', 'T', -1.0,
Read(M[m, k]), Read(M[n, k]),
1.0, ReadWrite(M[m, n]))
end
end
end
end