Skip to content

Commit 8ca161d

Browse files
committed
refactor: kronecker, tests, sparse.map
1 parent 7522725 commit 8ca161d

File tree

6 files changed

+54
-60
lines changed

6 files changed

+54
-60
lines changed

src/GraphBLAS-sharp.Backend/Matrix/CSR/Kronecker.fs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace GraphBLAS.FSharp.Backend.Matrix.CSR
22

3-
open FSharp.Quotations.Evaluator
43
open FSharpx.Collections
54
open Microsoft.FSharp.Quotations
5+
open FSharp.Quotations.Evaluator.QuotationEvaluationExtensions
66
open Brahma.FSharp
77
open GraphBLAS.FSharp.Backend.Quotes
88
open GraphBLAS.FSharp.Backend.Common
@@ -74,7 +74,7 @@ module internal Kronecker =
7474
let createClArray =
7575
ClArray.zeroCreate clContext workGroupSize
7676

77-
let opOnHost = QuotationEvaluator.Evaluate op
77+
let opOnHost = op.Evaluate()
7878

7979
fun (queue: MailboxProcessor<_>) (matrixZero: COO<'c> option) (matrixLeft: CSR<'a>) (matrixRight: CSR<'b>) ->
8080

@@ -410,9 +410,8 @@ module internal Kronecker =
410410
let startIndex =
411411
insertNonZero queue rowsEdges matrixRight matrixLeft.Values leftColumns resultMatrix
412412

413-
match matrixZero with
414-
| Some m -> insertZero queue startIndex zeroCounts m resultMatrix
415-
| _ -> ()
413+
matrixZero
414+
|> Option.iter (fun m -> insertZero queue startIndex zeroCounts m resultMatrix)
416415

417416
resultMatrix
418417

@@ -442,14 +441,16 @@ module internal Kronecker =
442441
getSize queue matrixZero matrixLeft matrixRight
443442

444443
if size = 0 then
444+
matrixZero
445+
|> Option.iter (fun m -> m.Dispose queue)
446+
445447
None
446448
else
447449
let result =
448450
mapAll queue allocationMode size matrixZero matrixLeft matrixRight
449451

450-
match matrixZero with
451-
| Some m -> m.Dispose queue
452-
| _ -> ()
452+
matrixZero
453+
|> Option.iter (fun m -> m.Dispose queue)
453454

454455
bitonic queue result.Rows result.Columns result.Values
455456

src/GraphBLAS-sharp.Backend/Matrix/CSR/Map.fs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ open GraphBLAS.FSharp.Backend.Objects
99
open GraphBLAS.FSharp.Backend.Objects.ClCell
1010
open GraphBLAS.FSharp.Backend.Objects.ClMatrix
1111
open GraphBLAS.FSharp.Backend.Objects.ClContext
12+
open GraphBLAS.FSharp.Backend.Objects.ArraysExtensions
1213

1314
module internal Map =
1415
let preparePositions<'a, 'b> op (clContext: ClContext) workGroupSize =
@@ -101,10 +102,10 @@ module internal Map =
101102
let resultRows, resultColumns, resultValues, _ =
102103
setPositions queue allocationMode rows columns values bitmap
103104

104-
queue.Post(Msg.CreateFreeMsg<_>(bitmap))
105-
queue.Post(Msg.CreateFreeMsg<_>(values))
106-
queue.Post(Msg.CreateFreeMsg<_>(rows))
107-
queue.Post(Msg.CreateFreeMsg<_>(columns))
105+
bitmap.Free queue
106+
values.Free queue
107+
rows.Free queue
108+
columns.Free queue
108109

109110
{ Context = clContext
110111
RowCount = matrix.RowCount

src/GraphBLAS-sharp.Backend/Vector/Sparse/Common.fs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,14 @@ module internal Common =
7979
fun (processor: MailboxProcessor<_>) allocationMode (vectors: Sparse<'a> seq) ->
8080

8181
let vectorIndices, _ =
82-
(0, vectors)
83-
||> Seq.mapFold
84-
(fun offset vector ->
85-
let newIndices =
86-
mapIndices processor allocationMode offset vector.Indices
87-
88-
newIndices, offset + vector.Size)
82+
vectors
83+
|> Seq.mapFold
84+
(fun offset vector ->
85+
let newIndices =
86+
mapIndices processor allocationMode offset vector.Indices
87+
88+
newIndices, offset + vector.Size)
89+
0
8990

9091
let vectorValues =
9192
vectors |> Seq.map (fun vector -> vector.Values)

src/GraphBLAS-sharp.Backend/Vector/Sparse/Map.fs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace GraphBLAS.FSharp.Backend.Vector.Sparse
22

3-
open FSharp.Quotations.Evaluator
3+
open FSharp.Quotations.Evaluator.QuotationEvaluationExtensions
44
open Microsoft.FSharp.Quotations
55
open Brahma.FSharp
66
open GraphBLAS.FSharp.Backend
@@ -10,6 +10,7 @@ open GraphBLAS.FSharp.Backend.Objects.ClVector
1010
open GraphBLAS.FSharp.Backend.Common.ClArray
1111
open GraphBLAS.FSharp.Backend.Objects.ClCell
1212
open GraphBLAS.FSharp.Backend.Objects.ClContext
13+
open GraphBLAS.FSharp.Backend.Objects.ArraysExtensions
1314

1415
module Map =
1516
module WithValueOption =
@@ -79,7 +80,7 @@ module Map =
7980
let map =
8081
preparePositions op clContext workGroupSize
8182

82-
let opOnHost = op |> QuotationEvaluator.Evaluate
83+
let opOnHost = op.Evaluate()
8384

8485
let setPositions =
8586
Common.setPositionsOption<'c> clContext workGroupSize
@@ -100,29 +101,22 @@ module Map =
100101
let result =
101102
setPositions queue allocationMode values indices bitmap
102103

103-
queue.Post(Msg.CreateFreeMsg<_>(indices))
104-
queue.Post(Msg.CreateFreeMsg<_>(values))
105-
queue.Post(Msg.CreateFreeMsg<_>(bitmap))
104+
indices.Free queue
105+
values.Free queue
106+
bitmap.Free queue
106107

107108
result
108-
|> Option.bind
109+
|> Option.map
109110
(fun (resultValues, resultIndices) ->
110111
{ Context = clContext
111112
Size = size
112113
Indices = resultIndices
113-
Values = resultValues }
114-
|> Some)
114+
Values = resultValues })
115115
| None ->
116116
opOnHost value None
117-
|> Option.bind
117+
|> Option.map
118118
(fun resultValue ->
119-
let resultValues =
120-
create queue allocationMode size resultValue
121-
122-
let resultIndices = init queue allocationMode size
123-
124119
{ Context = clContext
125120
Size = size
126-
Indices = resultIndices
127-
Values = resultValues }
128-
|> Some)
121+
Indices = init queue allocationMode size
122+
Values = create queue allocationMode size resultValue })

tests/GraphBLAS-sharp.Tests/Backend/Matrix/Kronecker.fs

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
open Expecto
44
open Expecto.Logging
5-
open Brahma.FSharp
65
open GraphBLAS.FSharp.Tests
76
open GraphBLAS.FSharp.Tests.Context
87
open GraphBLAS.FSharp.Tests.TestCases
@@ -22,7 +21,10 @@ let logger = Log.create "kronecker.Tests"
2221

2322
let workGroupSize = Utils.defaultWorkGroupSize
2423

25-
let makeTest context processor zero isEqual op kroneckerFun (leftMatrix: 'a [,], rightMatrix: 'a [,]) =
24+
let makeTest testContext zero isEqual op kroneckerFun (leftMatrix: 'a [,], rightMatrix: 'a [,]) =
25+
let context = testContext.ClContext
26+
let processor = testContext.Queue
27+
2628
let m1 =
2729
Utils.createMatrixFromArray2D CSR leftMatrix (isEqual zero)
2830

@@ -49,7 +51,7 @@ let makeTest context processor zero isEqual op kroneckerFun (leftMatrix: 'a [,],
4951
kroneckerFun processor ClContext.HostInterop m1 m2
5052

5153
let actual =
52-
Option.bind (fun (m: ClMatrix<'a>) -> m.ToHost processor |> Some) result
54+
Option.map (fun (m: ClMatrix<'a>) -> m.ToHost processor) result
5355

5456
m1.Dispose processor
5557
m2.Dispose processor
@@ -62,34 +64,29 @@ let makeTest context processor zero isEqual op kroneckerFun (leftMatrix: 'a [,],
6264
"Matrices should be equal"
6365
|> Expect.equal actual expectedOption
6466

65-
let createGeneralTest (context: ClContext) (processor: MailboxProcessor<Msg>) (zero: 'a) isEqual op opQ testName =
66-
67-
let kronecker =
68-
Matrix.kronecker opQ context workGroupSize
69-
70-
makeTest context processor zero isEqual op kronecker
67+
let createGeneralTest testContext (zero: 'a) isEqual op opQ testName =
68+
Matrix.kronecker opQ testContext.ClContext workGroupSize
69+
|> makeTest testContext zero isEqual op
7170
|> testPropertyWithConfig config $"test on %A{typeof<'a>} %s{testName}"
7271

7372
let generalTests (testContext: TestContext) =
74-
[ let context = testContext.ClContext
75-
let queue = testContext.Queue
76-
queue.Error.Add(fun e -> failwithf "%A" e)
73+
[ testContext.Queue.Error.Add(fun e -> failwithf "%A" e)
7774

78-
createGeneralTest context queue false (=) (&&) ArithmeticOperations.boolMulOption "mul"
79-
createGeneralTest context queue false (=) (||) ArithmeticOperations.boolSumOption "sum"
75+
createGeneralTest testContext false (=) (&&) ArithmeticOperations.boolMulOption "mul"
76+
createGeneralTest testContext false (=) (||) ArithmeticOperations.boolSumOption "sum"
8077

81-
createGeneralTest context queue 0 (=) (*) ArithmeticOperations.intMulOption "mul"
82-
createGeneralTest context queue 0 (=) (+) ArithmeticOperations.intSumOption "sum"
78+
createGeneralTest testContext 0 (=) (*) ArithmeticOperations.intMulOption "mul"
79+
createGeneralTest testContext 0 (=) (+) ArithmeticOperations.intSumOption "sum"
8380

84-
createGeneralTest context queue 0uy (=) (*) ArithmeticOperations.byteMulOption "mul"
85-
createGeneralTest context queue 0uy (=) (+) ArithmeticOperations.byteSumOption "sum"
81+
createGeneralTest testContext 0uy (=) (*) ArithmeticOperations.byteMulOption "mul"
82+
createGeneralTest testContext 0uy (=) (+) ArithmeticOperations.byteSumOption "sum"
8683

87-
createGeneralTest context queue 0.0f Utils.float32IsEqual (*) ArithmeticOperations.float32MulOption "mul"
88-
createGeneralTest context queue 0.0f Utils.float32IsEqual (+) ArithmeticOperations.float32SumOption "sum"
84+
createGeneralTest testContext 0.0f Utils.float32IsEqual (*) ArithmeticOperations.float32MulOption "mul"
85+
createGeneralTest testContext 0.0f Utils.float32IsEqual (+) ArithmeticOperations.float32SumOption "sum"
8986

90-
if Utils.isFloat64Available context.ClDevice then
91-
createGeneralTest context queue 0.0 Utils.floatIsEqual (*) ArithmeticOperations.floatMulOption "mul"
92-
createGeneralTest context queue 0.0 Utils.floatIsEqual (+) ArithmeticOperations.floatSumOption "sum" ]
87+
if Utils.isFloat64Available testContext.ClContext.ClDevice then
88+
createGeneralTest testContext 0.0 Utils.floatIsEqual (*) ArithmeticOperations.floatMulOption "mul"
89+
createGeneralTest testContext 0.0 Utils.floatIsEqual (+) ArithmeticOperations.floatSumOption "sum" ]
9390

9491
let tests =
9592
gpuTests "Backend.Matrix.kronecker tests" generalTests

tests/GraphBLAS-sharp.Tests/GraphBLAS-sharp.Tests.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<Compile Include="Backend/Matrix/Merge.fs" />
5454
<Compile Include="Backend/Matrix/ExpandRows.fs" />
5555
<Compile Include="Backend/Matrix/SubRows.fs" />
56-
<Compile Include="Backend\Matrix\Kronecker.fs" />
56+
<Compile Include="Backend/Matrix/Kronecker.fs" />
5757
<Compile Include="Backend/Vector/AssignByMask.fs" />
5858
<Compile Include="Backend/Vector/Convert.fs" />
5959
<Compile Include="Backend/Vector/Copy.fs" />

0 commit comments

Comments
 (0)