diff --git a/Project.toml b/Project.toml index 20f1d0a..401b19e 100644 --- a/Project.toml +++ b/Project.toml @@ -3,6 +3,7 @@ uuid = "902c3f28-d1ec-5e7e-8399-a24c3845ee38" version = "0.6.0" [deps] +CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82" Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" DistributedArrays = "aaf54ef3-cdf8-58ed-94cc-d582ad619b94" Elemental_jll = "c2e960f2-a21d-557e-aa36-859d46eed7e8" diff --git a/src/Elemental.jl b/src/Elemental.jl index 5b78ada..1d43141 100644 --- a/src/Elemental.jl +++ b/src/Elemental.jl @@ -33,7 +33,6 @@ end function __init__() # ccall(:jl_, Cvoid, (Any,), "starting up!") Init() - DefaultGrid[] = Grid() atexit() do # ccall(:jl_, Cvoid, (Any,), "closing down!") Initialized() && Finalize() diff --git a/src/core/distmatrix.jl b/src/core/distmatrix.jl index 92b3879..7077349 100644 --- a/src/core/distmatrix.jl +++ b/src/core/distmatrix.jl @@ -17,7 +17,7 @@ for (elty, ext) in ((:ElInt, :i), return nothing end - function DistMatrix(::Type{$elty}, colDist::Dist = MC, rowDist::Dist = MR, grid::Grid = DefaultGrid[]) + function DistMatrix(::Type{$elty}, colDist::Dist = MC, rowDist::Dist = MR, grid::Grid = DefaultGrid()) obj = Ref{Ptr{Cvoid}}(C_NULL) ElError(ccall(($(string("ElDistMatrixCreateSpecific_", ext)), libEl), Cuint, (Cint, Cint, Ptr{Cvoid}, Ref{Ptr{Cvoid}}), diff --git a/src/core/grid.jl b/src/core/grid.jl index 6d0040f..08805d0 100644 --- a/src/core/grid.jl +++ b/src/core/grid.jl @@ -1,3 +1,10 @@ +using CEnum + +@cenum ElGridOrderType::UInt32 begin + EL_ROW_MAJOR = 0 + EL_COLUMN_MAJOR = 1 +end + mutable struct Grid obj::Ptr{Cvoid} end @@ -11,11 +18,33 @@ end # Returns the default Grid. The default grid is finalized when Elemental is finalized # so we shouldn't register a `destroy` as finalizer. -function Grid() +function DefaultGrid() obj = Ref{Ptr{Cvoid}}(C_NULL) ElError(ccall(("ElDefaultGrid", libEl), Cuint, (Ref{Ptr{Cvoid}},), obj)) return Grid(obj[]) end -const DefaultGrid = Ref{Grid}() +# Returns the trivial Grid. The default grid is finalized when Elemental is finalized +# so we shouldn't register a `destroy` as finalizer. +function TrivialGrid() + obj = Ref{Ptr{Cvoid}}(C_NULL) + ElError(ccall(("ElTrivialGrid", libEl), Cuint, + (Ref{Ptr{Cvoid}},), obj)) + return Grid(obj[]) +end + +function row(G::Grid) + row = Ref{Cint}() + ElError(ccall(("ElGridRow", libEl), Cuint, + (Ptr{Cvoid}, Ptr{Cint}), G.obj, row)) + return row[] +end + +function column(G::Grid) + col = Ref{Cint}() + ElError(ccall(("ElGridCol", libEl), Cuint, + (Ptr{Cvoid}, Ptr{Cint}), G.obj, col)) + return col[] +end + diff --git a/src/lapack_like/factor.jl b/src/lapack_like/factor.jl index 3b421f7..388c208 100644 --- a/src/lapack_like/factor.jl +++ b/src/lapack_like/factor.jl @@ -66,7 +66,7 @@ function destroy(P::DistPermutation) return nothing end -function DistPermutation(grid::Grid = DefaultGrid[]) +function DistPermutation(grid::Grid = DefaultGrid()) obj = Ref{Ptr{Cvoid}}(0) ElError(ccall(("ElDistPermutationCreate", libEl), Cuint, (Ref{Ptr{Cvoid}}, Ptr{Cvoid}),