Skip to content

Commit 2027a50

Browse files
authored
Merge pull request #18 from dpanfilyonok/classes-reorganization
Changed API
2 parents 66f116d + 5c4f3e1 commit 2027a50

57 files changed

Lines changed: 1712 additions & 1375 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

benchmarks/GraphBLAS-sharp.Benchmarks/BenchmarksBFS.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ type BFSBenchmark4CSRMatrix() =
2020

2121
[<GlobalSetup>]
2222
member this.BuildMatrix() =
23-
matrix <- CSRMatrix(this.PathToGraph)
24-
source <- random.Next matrix.RowCount
23+
matrix <- MatrixCSR <| CSRMatrix.FromFile this.PathToGraph
24+
source <- random.Next <| Matrix.rowCount matrix
2525

2626
[<Benchmark>]
2727
member this.LevelBFS() =
28-
levelBFS matrix source
28+
BFS.levelSingleSource matrix source
2929

3030
/// Sequence of paths to files where data for benchmarking will be taken from
3131
static member GraphPaths = seq {

benchmarks/GraphBLAS-sharp.Benchmarks/BenchmarksEWiseAdd.fs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ type EWiseAddBenchmarks4Float32() =
9797
let mutable leftCOO = Unchecked.defaultof<Matrix<float32>>
9898
let mutable rightCOO = Unchecked.defaultof<Matrix<float32>>
9999

100-
member val FirstMatrix = Unchecked.defaultof<COOFormat<float32>> with get, set
101-
member val SecondMatrix = Unchecked.defaultof<COOFormat<float32>> with get, set
100+
member val FirstMatrix = Unchecked.defaultof<COOMatrix<float32>> with get, set
101+
member val SecondMatrix = Unchecked.defaultof<COOMatrix<float32>> with get, set
102102

103103
[<GlobalSetup>]
104104
member this.FormInputData() =
@@ -130,13 +130,13 @@ type EWiseAddBenchmarks4Float32() =
130130
Array.blit this.FirstMatrix.Values 0 leftVals 0 this.FirstMatrix.Values.Length
131131

132132
leftCOO <-
133-
COOMatrix(
133+
COOMatrix.FromTuples(
134134
this.FirstMatrix.RowCount,
135135
this.FirstMatrix.ColumnCount,
136136
leftRows,
137137
leftCols,
138138
leftVals
139-
) :> Matrix<float32>
139+
) |> MatrixCOO
140140

141141
let rightRows = Array.zeroCreate<int> this.SecondMatrix.Rows.Length
142142
let rightCols = Array.zeroCreate<int> this.SecondMatrix.Columns.Length
@@ -146,19 +146,20 @@ type EWiseAddBenchmarks4Float32() =
146146
Array.blit this.SecondMatrix.Values 0 rightVals 0 this.SecondMatrix.Values.Length
147147

148148
rightCOO <-
149-
COOMatrix(
149+
COOMatrix.FromTuples(
150150
this.SecondMatrix.RowCount,
151151
this.SecondMatrix.ColumnCount,
152152
rightRows,
153153
rightCols,
154154
rightVals
155-
) :> Matrix<float32>
155+
) |> MatrixCOO
156156

157157
[<Benchmark>]
158158
member this.EWiseAdditionCOOFloat32() =
159159
let (ClContext context) = this.OclContext
160-
leftCOO.EWiseAdd rightCOO None Float32Semiring.addMult
161-
|> context.RunSync
160+
(leftCOO, rightCOO) ||> Matrix.eWiseAdd AddMult.float32
161+
|> EvalGB.withClContext context
162+
|> EvalGB.runSync
162163

163164
static member InputMatricesProvider =
164165
"EWiseAddBenchmarks4Float32.txt"
@@ -176,8 +177,8 @@ type EWiseAddBenchmarks4Bool() =
176177
let mutable leftCOO = Unchecked.defaultof<Matrix<bool>>
177178
let mutable rightCOO = Unchecked.defaultof<Matrix<bool>>
178179

179-
member val FirstMatrix = Unchecked.defaultof<COOFormat<bool>> with get, set
180-
member val SecondMatrix = Unchecked.defaultof<COOFormat<bool>> with get, set
180+
member val FirstMatrix = Unchecked.defaultof<COOMatrix<bool>> with get, set
181+
member val SecondMatrix = Unchecked.defaultof<COOMatrix<bool>> with get, set
181182

182183
[<GlobalSetup>]
183184
member this.FormInputData() =
@@ -201,13 +202,13 @@ type EWiseAddBenchmarks4Bool() =
201202
Array.blit this.FirstMatrix.Columns 0 leftCols 0 this.FirstMatrix.Columns.Length
202203

203204
leftCOO <-
204-
COOMatrix(
205+
COOMatrix.FromTuples(
205206
this.FirstMatrix.RowCount,
206207
this.FirstMatrix.ColumnCount,
207208
leftRows,
208209
leftCols,
209210
leftVals
210-
) :> Matrix<bool>
211+
) |> MatrixCOO
211212

212213
let rightRows = Array.zeroCreate<int> this.SecondMatrix.Rows.Length
213214
let rightCols = Array.zeroCreate<int> this.SecondMatrix.Columns.Length
@@ -216,19 +217,20 @@ type EWiseAddBenchmarks4Bool() =
216217
Array.blit this.SecondMatrix.Columns 0 rightCols 0 this.SecondMatrix.Columns.Length
217218

218219
rightCOO <-
219-
COOMatrix(
220+
COOMatrix.FromTuples(
220221
this.SecondMatrix.RowCount,
221222
this.SecondMatrix.ColumnCount,
222223
rightRows,
223224
rightCols,
224225
rightVals
225-
) :> Matrix<bool>
226+
) |> MatrixCOO
226227

227228
[<Benchmark>]
228229
member this.EWiseAdditionCOOBool() =
229230
let (ClContext context) = this.OclContext
230-
leftCOO.EWiseAdd rightCOO None BooleanSemiring.anyAll
231-
|> context.RunSync
231+
(leftCOO, rightCOO) ||> Matrix.eWiseAdd AnyAll.bool
232+
|> EvalGB.withClContext context
233+
|> EvalGB.runSync
232234

233235
static member InputMatricesProvider =
234236
"EWiseAddBenchmarks4Bool.txt"

benchmarks/GraphBLAS-sharp.Benchmarks/Utils.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ module Utils =
122122
ColumnCount = mtx.Shape.ColumnCount
123123
}
124124

125-
let transposeCOO (matrix: COOFormat<'a>) =
125+
let transposeCOO (matrix: COOMatrix<'a>) =
126126
printfn "Start transpose COO"
127127

128128
(matrix.Columns, matrix.Rows, matrix.Values)

src/GraphBLAS-sharp/Abstracts.fs

Lines changed: 0 additions & 120 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
namespace GraphBLAS.FSharp
2+
3+
open Microsoft.FSharp.Quotations
4+
5+
type UnaryOp<'a, 'b> = UnaryOp of Expr<'a -> 'b>
6+
type BinaryOp<'a, 'b, 'c> = BinaryOp of Expr<'a -> 'b -> 'c>
7+
8+
type ClosedUnaryOp<'a> = ClosedUnaryOp of Expr<'a -> 'a>
9+
type ClosedBinaryOp<'a> = ClosedBinaryOp of Expr<'a -> 'a -> 'a>
10+
11+
/// Magma with associative (magma is set with closed binary operator)
12+
type ISemigroup<'a> =
13+
abstract Op: ClosedBinaryOp<'a>
14+
15+
/// Semigroup with identity
16+
type IMonoid<'a> =
17+
abstract Plus: ClosedBinaryOp<'a>
18+
abstract Zero: 'a
19+
20+
/// Monoid with associative binary operator,
21+
/// for wich Zero is annihilator
22+
type ISemiring<'a> =
23+
abstract Zero: 'a
24+
abstract Plus: ClosedBinaryOp<'a>
25+
abstract Times: ClosedBinaryOp<'a>
26+
27+
type Semigroup<'a> =
28+
{
29+
AssociativeOp: ClosedBinaryOp<'a>
30+
}
31+
32+
interface ISemigroup<'a> with
33+
member this.Op = this.AssociativeOp
34+
35+
type Monoid<'a> =
36+
{
37+
AssociativeOp: ClosedBinaryOp<'a>
38+
Identity: 'a
39+
}
40+
41+
interface ISemigroup<'a> with
42+
member this.Op = this.AssociativeOp
43+
44+
interface IMonoid<'a> with
45+
member this.Plus = this.AssociativeOp
46+
member this.Zero = this.Identity
47+
48+
type Semiring<'a> =
49+
{
50+
PlusMonoid: Monoid<'a>
51+
TimesSemigroup: Semigroup<'a>
52+
}
53+
54+
interface IMonoid<'a> with
55+
member this.Zero = this.PlusMonoid.Identity
56+
member this.Plus = this.PlusMonoid.AssociativeOp
57+
58+
interface ISemiring<'a> with
59+
member this.Times = this.TimesSemigroup.AssociativeOp
60+
member this.Zero = this.PlusMonoid.Identity
61+
member this.Plus = this.PlusMonoid.AssociativeOp
Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,23 @@
11
namespace GraphBLAS.FSharp.Algorithms
22

33
open GraphBLAS.FSharp.Predefined
4-
open GraphBLAS.FSharp.Helpers
54
open GraphBLAS.FSharp
6-
open Brahma.FSharp.OpenCL.WorkflowBuilder.Basic
7-
open Brahma.FSharp.OpenCL.WorkflowBuilder.Evaluation
85

9-
[<AutoOpen>]
106
module BFS =
11-
let levelBFS (matrix: Matrix<bool>) (source: int) : OpenCLEvaluation<Vector<int>> =
12-
let vertexCount = matrix.RowCount
13-
let levels = Vector.ofArray <| Array.zeroCreate vertexCount <| (=) 0
14-
let frontier = Vector.ofTuples vertexCount [source, true]
7+
let levelSingleSource (matrix: Matrix<bool>) (source: int) = graphblas {
8+
let vertexCount = Matrix.rowCount matrix
9+
let! levels = Vector.zeroCreate vertexCount
10+
let! frontier = Vector.ofList vertexCount [source, true]
1511

16-
opencl {
17-
let mutable currentLevel = 1
18-
while currentLevel < vertexCount do
19-
let! frontierMask = frontier.GetMask()
20-
do! levels.Assign(frontierMask, Scalar currentLevel)
21-
let! levelsComplemented = levels.GetMask(isComplemented = true)
22-
let! frontier = frontier.Vxm matrix levelsComplemented BooleanSemiring.anyAll
23-
currentLevel <- currentLevel + 1
12+
let mutable currentLevel = 1
13+
while currentLevel < vertexCount do
14+
let! frontierMask = Vector.mask frontier
15+
do! levels |> Vector.fillSubVector frontierMask (Scalar currentLevel)
2416

25-
return levels
26-
}
17+
let! levelsComplemented = Vector.complemented levels
18+
let! frontier = (frontier, matrix) ||> Vector.vxmWithMask AnyAll.bool levelsComplemented
2719

28-
// let parentBFS (matrix: Matrix<bool>) (source: int) : Vector<int> =
29-
// let vertexCount = matrix.RowCount
30-
// let parents = SparseVector(vertexCount, [source, -1])
20+
currentLevel <- currentLevel + 1
3121

32-
// let id = DenseVector(Array.init vertexCount id, IntegerMonoid.add)
33-
// let frontier = SparseVector(vertexCount, [source, source])
34-
35-
// for _ in 1 .. vertexCount - 1 do
36-
// frontier.[parents.Complemented] <- (frontier @. matrix) parents.Complemented IntegerSemiring.minFirst
37-
// parents.[frontier.Mask] <- frontier
38-
// frontier.[frontier.Mask] <- id
39-
40-
// upcast parents
22+
return levels
23+
}

src/GraphBLAS-sharp/Algorithms/SSSP.fs

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)