Skip to content

Commit d82b408

Browse files
committed
refactor: Vector, Matrix ewisebenchmarsk
1 parent 3676b6b commit d82b408

3 files changed

Lines changed: 110 additions & 74 deletions

File tree

benchmarks/GraphBLAS-sharp.Benchmarks/BenchmarksEWiseAdd.fs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,6 @@ open GraphBLAS.FSharp.Objects.Matrix
1515
open GraphBLAS.FSharp.Benchmarks.MatrixExtensions
1616
open GraphBLAS.FSharp.Backend.Objects.ClContext
1717

18-
type Config() =
19-
inherit ManualConfig()
20-
21-
do
22-
base.AddColumn(
23-
MatrixShapeColumn("RowCount", (fun (matrix,_) -> matrix.ReadMatrixShape().RowCount)) :> IColumn,
24-
MatrixShapeColumn("ColumnCount", (fun (matrix,_) -> matrix.ReadMatrixShape().ColumnCount)) :> IColumn,
25-
MatrixShapeColumn(
26-
"NNZ",
27-
fun (matrix,_) ->
28-
match matrix.Format with
29-
| Coordinate -> matrix.ReadMatrixShape().Nnz
30-
| Array -> 0
31-
)
32-
:> IColumn,
33-
MatrixShapeColumn(
34-
"SqrNNZ",
35-
fun (_,matrix) ->
36-
match matrix.Format with
37-
| Coordinate -> matrix.ReadMatrixShape().Nnz
38-
| Array -> 0
39-
)
40-
:> IColumn,
41-
TEPSColumn() :> IColumn,
42-
StatisticColumn.Min,
43-
StatisticColumn.Max
44-
)
45-
|> ignore
46-
4718
[<AbstractClass>]
4819
[<IterationCount(100)>]
4920
[<WarmupCount(10)>]

benchmarks/GraphBLAS-sharp.Benchmarks/Helpers.fs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ open System.IO
1111
open System.Text.RegularExpressions
1212
open BenchmarkDotNet.Configs
1313
open BenchmarkDotNet.Jobs
14+
open GraphBLAS.FSharp.Tests
15+
open FsCheck
16+
open Expecto
1417

1518
type CommonConfig() =
1619
inherit ManualConfig()
@@ -36,6 +39,35 @@ type CommonConfig() =
3639
)
3740
|> ignore
3841

42+
type Config() =
43+
inherit ManualConfig()
44+
45+
do
46+
base.AddColumn(
47+
MatrixShapeColumn("RowCount", (fun (matrix,_) -> matrix.ReadMatrixShape().RowCount)) :> IColumn,
48+
MatrixShapeColumn("ColumnCount", (fun (matrix,_) -> matrix.ReadMatrixShape().ColumnCount)) :> IColumn,
49+
MatrixShapeColumn(
50+
"NNZ",
51+
fun (matrix,_) ->
52+
match matrix.Format with
53+
| Coordinate -> matrix.ReadMatrixShape().Nnz
54+
| Array -> 0
55+
)
56+
:> IColumn,
57+
MatrixShapeColumn(
58+
"SqrNNZ",
59+
fun (_,matrix) ->
60+
match matrix.Format with
61+
| Coordinate -> matrix.ReadMatrixShape().Nnz
62+
| Array -> 0
63+
)
64+
:> IColumn,
65+
TEPSColumn() :> IColumn,
66+
StatisticColumn.Min,
67+
StatisticColumn.Max
68+
)
69+
|> ignore
70+
3971
type MatrixShapeColumn(columnName: string, getShape: (MtxReader * MtxReader) -> int) =
4072
interface IColumn with
4173
member this.AlwaysShow: bool = true
@@ -223,3 +255,56 @@ module Utils =
223255
random.NextBytes buffer
224256
System.BitConverter.ToSingle(buffer, 0)
225257

258+
module VectorGenerator =
259+
let private pairOfVectorsOfEqualSize (valuesGenerator: Gen<'a>) createVector =
260+
gen {
261+
let! length = Gen.sized <| fun size -> Gen.constant size
262+
263+
let! leftArray = Gen.arrayOfLength length valuesGenerator
264+
265+
let! rightArray = Gen.arrayOfLength length valuesGenerator
266+
267+
return (createVector leftArray, createVector rightArray)
268+
}
269+
270+
let intPair format =
271+
fun array -> Utils.createVectorFromArray format array ((=) 0)
272+
|> pairOfVectorsOfEqualSize Arb.generate<int32>
273+
274+
let floatPair format =
275+
let normalFloatGenerator =
276+
(Arb.Default.NormalFloat()
277+
|> Arb.toGen
278+
|> Gen.map float)
279+
280+
let fIsEqual x y = abs (x - y) < Accuracy.medium.absolute || x = y
281+
282+
let createVector array = Utils.createVectorFromArray format array (fIsEqual 0.0)
283+
284+
pairOfVectorsOfEqualSize normalFloatGenerator createVector
285+
286+
module MatrixGenerator =
287+
let private pairOfMatricesOfEqualSizeGenerator (valuesGenerator: Gen<'a>) createMatrix =
288+
gen {
289+
let! nrows, ncols = Generators.dimension2DGenerator
290+
let! matrixA = valuesGenerator |> Gen.array2DOfDim (nrows, ncols)
291+
let! matrixB = valuesGenerator |> Gen.array2DOfDim (nrows, ncols)
292+
return (createMatrix matrixA, createMatrix matrixB)
293+
}
294+
295+
let intPairOfEqualSizes format =
296+
fun array -> Utils.createMatrixFromArray2D format array ((=) 0)
297+
|> pairOfMatricesOfEqualSizeGenerator Arb.generate<int32>
298+
299+
let floatPairOfEqualSizes format =
300+
let normalFloatGenerator =
301+
(Arb.Default.NormalFloat()
302+
|> Arb.toGen
303+
|> Gen.map float)
304+
305+
let fIsEqual x y = abs (x - y) < Accuracy.medium.absolute || x = y
306+
307+
fun array -> Utils.createMatrixFromArray2D format array (fIsEqual 0.0)
308+
|> pairOfMatricesOfEqualSizeGenerator normalFloatGenerator
309+
310+

benchmarks/GraphBLAS-sharp.Benchmarks/VectorEWiseAddGen.fs

Lines changed: 25 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,14 @@ type VectorEWiseBenchmarks<'elem when 'elem : struct>(
8585

8686
abstract member GlobalSetup : unit -> unit
8787

88+
abstract member IterationSetup: unit -> unit
89+
90+
abstract member Benchmark : unit -> unit
91+
8892
abstract member IterationCleanup : unit -> unit
8993

9094
abstract member GlobalCleanup : unit -> unit
9195

92-
abstract member Benchmark : unit -> unit
9396

9497
type VectorEWiseBenchmarksWithoutDataTransfer<'elem when 'elem : struct>(
9598
buildFunToBenchmark,
@@ -100,22 +103,25 @@ type VectorEWiseBenchmarksWithoutDataTransfer<'elem when 'elem : struct>(
100103
generator)
101104

102105
[<GlobalSetup>]
103-
override this.GlobalSetup() =
106+
override this.GlobalSetup() = ()
107+
108+
[<IterationSetup>]
109+
override this.IterationSetup() =
104110
this.CreateVectors ()
105111
this.LoadVectorsToGPU ()
106112

113+
[<Benchmark>]
114+
override this.Benchmark () =
115+
this.EWiseAddition()
116+
this.Processor.PostAndReply(Msg.MsgNotifyMe)
117+
107118
[<IterationCleanup>]
108119
override this.IterationCleanup () =
109120
this.ClearResult()
110-
111-
[<GlobalCleanup>]
112-
override this.GlobalCleanup () =
113121
this.ClearInputVectors()
114122

115-
[<Benchmark>]
116-
override this.Benchmark () =
117-
this.EWiseAddition()
118-
this.Processor.PostAndReply(Msg.MsgNotifyMe)
123+
[<GlobalCleanup>]
124+
override this.GlobalCleanup() = ()
119125

120126
type VectorEWiseBenchmarksWithDataTransfer<'elem when 'elem : struct>(
121127
buildFunToBenchmark,
@@ -126,16 +132,11 @@ type VectorEWiseBenchmarksWithDataTransfer<'elem when 'elem : struct>(
126132
generator)
127133

128134
[<GlobalSetup>]
129-
override this.GlobalSetup() =
130-
this.CreateVectors()
131-
132-
[<GlobalCleanup>]
133-
override this.GlobalCleanup () = ()
135+
override this.GlobalSetup() = ()
134136

135-
[<IterationCleanup>]
136-
override this.IterationCleanup () =
137-
this.ClearInputVectors()
138-
this.ClearResult()
137+
[<IterationSetup>]
138+
override this.IterationSetup() =
139+
this.CreateVectors()
139140

140141
[<Benchmark>]
141142
override this.Benchmark () =
@@ -145,34 +146,13 @@ type VectorEWiseBenchmarksWithDataTransfer<'elem when 'elem : struct>(
145146
this.ResultVector.ToHost this.Processor |> ignore
146147
this.Processor.PostAndReply Msg.MsgNotifyMe
147148

148-
module VectorGenerator =
149-
let private pairOfVectorsOfEqualSize (valuesGenerator: Gen<'a>) createVector =
150-
gen {
151-
let! length = Gen.sized <| fun size -> Gen.constant size
152-
153-
let! leftArray = Gen.arrayOfLength length valuesGenerator
154-
155-
let! rightArray = Gen.arrayOfLength length valuesGenerator
156-
157-
return (createVector leftArray, createVector rightArray)
158-
}
159-
160-
let intPair format =
161-
let createVector array = Utils.createVectorFromArray format array ((=) 0)
162-
163-
pairOfVectorsOfEqualSize Arb.generate<int32> createVector
164-
165-
let floatPair format =
166-
let normalFloatGenerator =
167-
(Arb.Default.NormalFloat()
168-
|> Arb.toGen
169-
|> Gen.map float)
170-
171-
let fIsEqual x y = abs (x - y) < Accuracy.medium.absolute || x = y
172-
173-
let createVector array = Utils.createVectorFromArray format array (fIsEqual 0.0)
149+
[<IterationCleanup>]
150+
override this.IterationCleanup () =
151+
this.ClearInputVectors()
152+
this.ClearResult()
174153

175-
pairOfVectorsOfEqualSize normalFloatGenerator createVector
154+
[<GlobalCleanup>]
155+
override this.GlobalCleanup() = ()
176156

177157
/// Without data transfer
178158

0 commit comments

Comments
 (0)