Skip to content

Commit 94a59ad

Browse files
add reduce operations
1 parent 02839a9 commit 94a59ad

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

src/Operations/Reduce.jl

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
function GrB_Matrix_reduce_Monoid( # w<mask> = accum (w,reduce(A))
2+
w::GrB_Vector, # input/output vector for results
3+
mask::T, # optional mask for w, unused if NULL
4+
accum::U, # optional accum for z=accum(w,t)
5+
monoid::GrB_Monoid, # reduce operator for t=reduce(A)
6+
A::GrB_Matrix, # first input: matrix A
7+
desc::V # descriptor for w, mask, and A
8+
) where {T <: valid_vector_mask_types, U <: valid_accum_types, V <: valid_desc_types}
9+
10+
return GrB_Info(
11+
ccall(
12+
dlsym(graphblas_lib, "GrB_Matrix_reduce_Monoid"),
13+
Cint,
14+
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
15+
w.p, mask.p, accum.p, monoid.p, A.p, desc.p
16+
)
17+
)
18+
end
19+
20+
function GrB_Matrix_reduce_BinaryOp( # w<mask> = accum (w,reduce(A))
21+
w::GrB_Vector, # input/output vector for results
22+
mask::T, # optional mask for w, unused if NULL
23+
accum::U, # optional accum for z=accum(w,t)
24+
op::GrB_BinaryOp, # reduce operator for t=reduce(A)
25+
A::GrB_Matrix, # first input: matrix A
26+
desc::V # descriptor for w, mask, and A
27+
) where {T <: valid_vector_mask_types, U <: valid_accum_types, V <: valid_desc_types}
28+
29+
return GrB_Info(
30+
ccall(
31+
dlsym(graphblas_lib, "GrB_Matrix_reduce_BinaryOp"),
32+
Cint,
33+
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
34+
w.p, mask.p, accum.p, op.p, A.p, desc.p
35+
)
36+
)
37+
end
38+
39+
function GrB_Vector_reduce( # c = accum (c, reduce_to_scalar (u))
40+
accum::U, # optional accum for c=accum(c,t)
41+
monoid::GrB_Monoid, # monoid to do the reduction
42+
u::GrB_Vector{T}, # vector to reduce
43+
desc::V # descriptor (currently unused)
44+
) where {T <: valid_types, U <: valid_accum_types, V <: valid_desc_types}
45+
46+
scalar = Ref(T(0))
47+
fn_name = "GrB_Vector_reduce_" * suffix(T)
48+
49+
res = GrB_Info(
50+
ccall(
51+
dlsym(graphblas_lib, fn_name),
52+
Cint,
53+
(Ptr{T}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
54+
scalar, accum.p, monoid.p, u.p, desc.p
55+
)
56+
)
57+
58+
res != GrB_SUCCESS && return res
59+
return scalar[]
60+
end
61+
62+
function GrB_Matrix_reduce( # c = accum (c, reduce_to_scalar (u))
63+
accum::U, # optional accum for c=accum(c,t)
64+
monoid::GrB_Monoid, # monoid to do the reduction
65+
A::GrB_Matrix{T}, # vector to reduce
66+
desc::V # descriptor (currently unused)
67+
) where {T <: valid_types, U <: valid_accum_types, V <: valid_desc_types}
68+
69+
scalar = Ref(T(0))
70+
fn_name = "GrB_Matrix_reduce_" * suffix(T)
71+
72+
res = GrB_Info(
73+
ccall(
74+
dlsym(graphblas_lib, fn_name),
75+
Cint,
76+
(Ptr{T}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
77+
scalar, A.p, monoid.p, u.p, desc.p
78+
)
79+
)
80+
81+
res != GrB_SUCCESS && return res
82+
return scalar[]
83+
end

src/SuiteSparseGraphBLAS.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ include("Operations/Element_wise_multiplication.jl")
147147
include("Operations/Element_wise_addition.jl")
148148
include("Operations/Extract.jl")
149149
include("Operations/Apply.jl")
150+
include("Operations/Reduce.jl")
150151

151152
export
152153
# Context Methods
@@ -192,6 +193,10 @@ GrB_Vector_extract, GrB_Matrix_extract, GrB_Col_extract,
192193
# Apply
193194
GrB_apply, GrB_Vector_apply, GrB_Matrix_apply
194195

196+
# Reduce
197+
GrB_Matrix_reduce_Monoid, GrB_Matrix_reduce_BinaryOp, GrB_Matrix_reduce,
198+
GrB_Vector_reduce
199+
195200
# Export global variables
196201

197202
# Types

0 commit comments

Comments
 (0)