Skip to content

Commit 1edfaa4

Browse files
add multiplication operations
1 parent eb83cff commit 1edfaa4

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

src/Operations/Multiplication.jl

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
2+
function GrB_mxm( # C<Mask> = accum (C, A*B)
3+
C::GrB_Matrix, # input/output matrix for results
4+
Mask::GrB_Matrix, # optional mask for C, unused if NULL
5+
accum::GrB_BinaryOp, # optional accum for Z=accum(C,T)
6+
semiring::GrB_Semiring, # defines '+' and '*' for A*B
7+
A::GrB_Matrix, # first input: matrix A
8+
B::GrB_Matrix, # second input: matrix B
9+
desc::GrB_Descriptor # descriptor for C, Mask, A, and B
10+
)
11+
12+
return GrB_Info(
13+
ccall(
14+
dlsym(graphblas_lib, "GrB_mxm"),
15+
Cint,
16+
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
17+
C.p, Mask.p, accum.p, semiring.p, A.p, B.p, desc.p
18+
)
19+
)
20+
end
21+
22+
function GrB_vxm( # w'<Mask> = accum (w, u'*A)
23+
w::GrB_Vector, # input/output vector for results
24+
mask::GrB_Vector, # optional mask for w, unused if NULL
25+
accum::GrB_BinaryOp, # optional accum for z=accum(w,t)
26+
semiring::GrB_Semiring, # defines '+' and '*' for u'*A
27+
u::GrB_Vector, # first input: vector u
28+
A::GrB_Matrix, # second input: matrix A
29+
desc::GrB_Descriptor # descriptor for w, mask, and A
30+
)
31+
32+
return GrB_Info(
33+
ccall(
34+
dlsym(graphblas_lib, "GrB_vxm"),
35+
Cint,
36+
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
37+
w.p, mask.p, accum.p, semiring.p, u.p, A.p, desc.p
38+
)
39+
)
40+
end
41+
42+
function GrB_mxv( # w<Mask> = accum (w, A*u)
43+
w::GrB_Vector, # input/output vector for results
44+
mask::GrB_Vector, # optional mask for w, unused if NULL
45+
accum::GrB_BinaryOp, # optional accum for z=accum(w,t)
46+
semiring::GrB_Semiring, # defines '+' and '*' for A*B
47+
A::GrB_Matrix, # first input: matrix A
48+
u::GrB_Vector, # second input: vector u
49+
desc::GrB_Descriptor # descriptor for w, mask, and A
50+
)
51+
52+
return GrB_Info(
53+
ccall(
54+
dlsym(graphblas_lib, "GrB_mxv"),
55+
Cint,
56+
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
57+
w.p, mask.p, accum.p, semiring.p, A.p, u.p, desc.p
58+
)
59+
)
60+
end

src/SuiteSparseGraphBLAS.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ include("Object_Methods/Vector_Methods.jl")
138138
include("Object_Methods/Algebra_Methods.jl")
139139
include("Object_Methods/Descriptor_Methods.jl")
140140
include("Object_Methods/Print_Objects.jl")
141+
include("Operations/Multiplication.jl")
141142

142143
export
143144
# Context Methods
@@ -160,7 +161,10 @@ GrB_UnaryOp_new, GrB_BinaryOp_new, GrB_Monoid_new, GrB_Semiring_new,
160161

161162
# Print functions
162163
@GxB_UnaryOp_fprint, @GxB_BinaryOp_fprint, @GxB_Monoid_fprint, @GxB_Semiring_fprint,
163-
@GxB_Matrix_fprint, @GxB_Vector_fprint, @GxB_Descriptor_fprint, @GxB_fprint
164+
@GxB_Matrix_fprint, @GxB_Vector_fprint, @GxB_Descriptor_fprint, @GxB_fprint,
165+
166+
# GraphBLAS Operations
167+
GrB_mxm, GrB_vxm, GrB_mxv
164168

165169
# Export global variables
166170

0 commit comments

Comments
 (0)