@@ -14,16 +14,18 @@ open BenchmarkDotNet.Order
1414open Brahma.FSharp .OpenCL .WorkflowBuilder .Basic
1515open Brahma.FSharp .OpenCL .WorkflowBuilder .Evaluation
1616open OpenCL.Net
17+ open Brahma.OpenCL
18+ open System.Text .RegularExpressions
1719
18- type Config () =
20+ type Config < 'a > () =
1921 inherit ManualConfig()
2022
2123 do
2224 base .AddColumn(
23- MatrixShapeColumn( " RowCount" , fun matrix -> matrix.MatrixStructure.RowCount) :> IColumn,
24- MatrixShapeColumn( " ColumnCount" , fun matrix -> matrix.MatrixStructure.ColumnCount) :> IColumn,
25- MatrixShapeColumn( " NNZ" , fun matrix -> matrix.MatrixStructure.Values.Length) :> IColumn,
26- TEPSColumn() :> IColumn,
25+ MatrixShapeColumn< 'a > (" RowCount" , fun matrix -> matrix.MatrixStructure.RowCount) :> IColumn,
26+ MatrixShapeColumn< 'a > (" ColumnCount" , fun matrix -> matrix.MatrixStructure.ColumnCount) :> IColumn,
27+ MatrixShapeColumn< 'a > (" NNZ" , fun matrix -> matrix.MatrixStructure.Values.Length) :> IColumn,
28+ TEPSColumn< 'a > () :> IColumn,
2729 StatisticColumn.Min,
2830 StatisticColumn.Max
2931 ) |> ignore
@@ -34,77 +36,46 @@ type Config() =
3436 )
3537 ) |> ignore
3638
37- [<Config( typeof< Config>) >]
39+ type Float32Config = Config< float32>
40+ type BoolConfig = Config< bool>
41+
3842[<SimpleJob( RunStrategy.Monitoring, targetCount= 2 ) >]
3943type EWiseAddBenchmarks () =
40- member val FirstMatrix = Unchecked.defaultof< COOFormat< float32>> with get, set
41- member val SecondMatrix = Unchecked.defaultof< COOFormat< float32>> with get, set
42-
43- // [<ParamsSource("InputMatricesProvider")>]
44- // member val InputMatrix = Unchecked.defaultof<InputMatrixFormat> with get, set
45-
4644 [<ParamsSource( " AvaliableContexts" ) >]
4745 member val OclContext = Unchecked.defaultof< ClContext> with get, set
4846
49- // [<GlobalSetup>]
50- // member this.FormInputData() =
51- // let transposeCOO (matrix: COOFormat<float32>) =
52- // (matrix.Rows, matrix.Columns, matrix.Values)
53- // |||> Array.zip3
54- // |> Array.sortBy (fun (row, col, value) -> row)
55- // |> Array.unzip3
56- // |>
57- // fun (rows, cols, values) ->
58- // {
59- // Rows = cols
60- // Columns = rows
61- // Values = values
62- // RowCount = matrix.ColumnCount
63- // ColumnCount = matrix.RowCount
64- // }
65-
66- // this.FirstMatrix <- this.InputMatrix.MatrixStructure
67- // this.SecondMatrix <- this.InputMatrix.MatrixStructure |> transposeCOO
68-
6947 [<IterationCleanup>]
7048 member this.ClearBuffers () =
7149 let ( ClContext context ) = this.OclContext
7250 context.Provider.CloseAllBuffers()
7351
74- /// Sequence of paths to files where data for benchmarking will be taken from
75- // static member InputMatricesProvider =
76- // let matricesFilenames =
77- // seq {
78- // "arc130.mtx"
79- // "linux_call_graph.mtx"
80- // "webbase-1M.mtx"
81- // }
82-
83- // matricesFilenames
84- // |> Seq.map
85- // (fun matrixFilename ->
86- // let getFullPathToMatrix filename =
87- // Path.Combine [|
88- // __SOURCE_DIRECTORY__
89- // "Datasets"
90- // "EWiseAddDatasets"
91- // filename
92- // |]
93-
94- // let fullPath = getFullPathToMatrix matrixFilename
95- // let matrixName = Path.GetFileNameWithoutExtension matrixFilename
96- // let matrixStructure = GraphReader.readMtx fullPath
97- // {
98- // MatrixName = matrixName
99- // MatrixStructure = matrixStructure
100- // }
101- // )
102-
10352 static member AvaliableContexts =
53+ let pathToConfig =
54+ Path.Combine [|
55+ __ SOURCE_ DIRECTORY__
56+ " Configs"
57+ " Context.txt"
58+ |] |> Path.GetFullPath
59+
60+ use reader = new StreamReader( pathToConfig)
61+ let platformRegex = Regex <| reader.ReadLine()
62+ let deviceType =
63+ match reader.ReadLine() with
64+ | " Cpu" -> DeviceType.Cpu
65+ | " Gpu" -> DeviceType.Gpu
66+ | " All" -> DeviceType.All
67+ | _ -> failwith " Unsupported"
68+
10469 let mutable e = ErrorCode.Unknown
10570 Cl.GetPlatformIDs & e
106- |> Array.collect ( fun platform -> Cl.GetDeviceIDs( platform, DeviceType.All , & e))
71+ |> Array.collect ( fun platform -> Cl.GetDeviceIDs( platform, deviceType , & e))
10772 |> Seq.ofArray
73+ |> Seq.filter
74+ ( fun device ->
75+ let platform = Cl.GetDeviceInfo( device, DeviceInfo.Platform, & e) .CastTo< Platform>()
76+ let platformName = Cl.GetPlatformInfo( platform, PlatformInfo.Name, & e) .ToString()
77+ platformRegex.IsMatch platformName
78+ )
10879 |> Seq.map
10980 ( fun device ->
11081 let platform = Cl.GetDeviceInfo( device, DeviceInfo.Platform, & e) .CastTo< Platform>()
@@ -113,45 +84,57 @@ type EWiseAddBenchmarks() =
11384 OpenCLEvaluationContext( platformName, deviceType) |> ClContext
11485 )
11586
87+ [<Config( typeof< Float32Config>) >]
11688type EWiseAddBenchmarks4Float32 () =
11789 inherit EWiseAddBenchmarks()
11890
11991 let mutable leftCOO = Unchecked.defaultof< Matrix< float32>>
12092 let mutable rightCOO = Unchecked.defaultof< Matrix< float32>>
12193
94+ member val FirstMatrix = Unchecked.defaultof< COOFormat< float32>> with get, set
95+ member val SecondMatrix = Unchecked.defaultof< COOFormat< float32>> with get, set
96+
97+ [<ParamsSource( " InputMatricesProvider" ) >]
98+ member val InputMatrix = Unchecked.defaultof< InputMatrixFormat< float32>> with get, set
99+
100+ [<GlobalSetup>]
101+ member this.FormInputData () =
102+ this.FirstMatrix <- this.InputMatrix.MatrixStructure
103+ this.SecondMatrix <- this.InputMatrix.MatrixStructure |> Utils.transposeCOO
104+
122105 [<IterationSetup>]
123106 member this.BuildCOO () =
124- let leftRows = Array.zeroCreate< int> base .FirstMatrix.Rows.Length
125- let leftCols = Array.zeroCreate< int> base .FirstMatrix.Columns.Length
126- let leftVals = Array.zeroCreate< float32> base .FirstMatrix.Values.Length
127- Array.blit base .FirstMatrix.Rows 0 leftRows 0 base .FirstMatrix.Rows.Length
128- Array.blit base .FirstMatrix.Columns 0 leftCols 0 base .FirstMatrix.Columns.Length
129- Array.blit base .FirstMatrix.Values 0 leftVals 0 base .FirstMatrix.Values.Length
107+ let leftRows = Array.zeroCreate< int> this .FirstMatrix.Rows.Length
108+ let leftCols = Array.zeroCreate< int> this .FirstMatrix.Columns.Length
109+ let leftVals = Array.zeroCreate< float32> this .FirstMatrix.Values.Length
110+ Array.blit this .FirstMatrix.Rows 0 leftRows 0 this .FirstMatrix.Rows.Length
111+ Array.blit this .FirstMatrix.Columns 0 leftCols 0 this .FirstMatrix.Columns.Length
112+ Array.blit this .FirstMatrix.Values 0 leftVals 0 this .FirstMatrix.Values.Length
130113
131114 leftCOO <-
132115 Matrix.Build< float32>(
133- base .FirstMatrix.RowCount,
134- base .FirstMatrix.ColumnCount,
135- leftRows ,
136- leftCols ,
137- leftVals ,
116+ this .FirstMatrix.RowCount,
117+ this .FirstMatrix.ColumnCount,
118+ this.FirstMatrix.Rows ,
119+ this.FirstMatrix.Columns ,
120+ this.FirstMatrix.Values ,
138121 COO
139122 )
140123
141- let rightRows = Array.zeroCreate< int> base .SecondMatrix.Rows.Length
142- let rightCols = Array.zeroCreate< int> base .SecondMatrix.Columns.Length
143- let rightVals = Array.zeroCreate< float32> base .SecondMatrix.Values.Length
144- Array.blit base .SecondMatrix.Rows 0 rightRows 0 base .SecondMatrix.Rows.Length
145- Array.blit base .SecondMatrix.Columns 0 rightCols 0 base .SecondMatrix.Columns.Length
146- Array.blit base .SecondMatrix.Values 0 rightVals 0 base .SecondMatrix.Values.Length
124+ let rightRows = Array.zeroCreate< int> this .SecondMatrix.Rows.Length
125+ let rightCols = Array.zeroCreate< int> this .SecondMatrix.Columns.Length
126+ let rightVals = Array.zeroCreate< float32> this .SecondMatrix.Values.Length
127+ Array.blit this .SecondMatrix.Rows 0 rightRows 0 this .SecondMatrix.Rows.Length
128+ Array.blit this .SecondMatrix.Columns 0 rightCols 0 this .SecondMatrix.Columns.Length
129+ Array.blit this .SecondMatrix.Values 0 rightVals 0 this .SecondMatrix.Values.Length
147130
148131 rightCOO <-
149132 Matrix.Build< float32>(
150- base .SecondMatrix.RowCount,
151- base .SecondMatrix.ColumnCount,
152- rightRows ,
153- rightCols ,
154- rightVals ,
133+ this .SecondMatrix.RowCount,
134+ this .SecondMatrix.ColumnCount,
135+ this.SecondMatrix.Rows ,
136+ this.SecondMatrix.Columns ,
137+ this.SecondMatrix.Values ,
155138 COO
156139 )
157140
@@ -163,69 +146,86 @@ type EWiseAddBenchmarks4Float32() =
163146
164147 static member InputMatricesProvider =
165148 let matricesFilenames =
166- seq {
167- " arc130.mtx"
168- " linux_call_graph.mtx"
169- " webbase-1M.mtx"
170- }
149+ let pathToConfig =
150+ Path.Combine [|
151+ __ SOURCE_ DIRECTORY__
152+ " Configs"
153+ " EWiseAddBenchmarks4Float32.txt"
154+ |] |> Path.GetFullPath
155+
156+ File.ReadAllLines pathToConfig
157+ |> Seq.ofArray
158+ |> Seq.filter ( fun line -> not <| line.StartsWith " !" )
159+
160+ let matrixHandler ( matrixFilename : string ) =
161+ match Path.GetExtension matrixFilename with
162+ | " .mtx" ->
163+ let mtx = GraphReader.readMtx <| Utils.getFullPathToMatrix matrixFilename
164+ match mtx.Format, mtx.Field with
165+ | " coordinate" , " real" -> Utils.makeCOO mtx <| FromString float32
166+ | " coordinate" , " integer" -> Utils.makeCOO mtx <| FromString float32
167+ | " coordinate" , " pattern" ->
168+ let rand = System.Random()
169+ let nextSingle ( random : System.Random ) =
170+ let buffer = Array.zeroCreate< byte> 4
171+ random.NextBytes buffer
172+ System.BitConverter.ToSingle( buffer, 0 )
173+
174+ Utils.makeCOO mtx <| FromUnit ( fun () -> nextSingle rand)
175+ | _ -> failwith " Unsupported matrix format"
176+ | _ -> failwith " Unsupported matrix format"
171177
172178 matricesFilenames
173- |> Seq.map
174- ( fun matrixFilename ->
175- let getFullPathToMatrix filename =
176- Path.Combine [|
177- __ SOURCE_ DIRECTORY__
178- " Datasets"
179- " EWiseAddDatasets"
180- filename
181- |]
182-
183- let fullPath = getFullPathToMatrix matrixFilename
184- let matrixName = Path.GetFileNameWithoutExtension matrixFilename
185- let matrixStructure = GraphReader.readMtx fullPath
186- {
187- MatrixName = matrixName
188- MatrixStructure = matrixStructure
189- }
190- )
179+ |> Seq.map ( fun filename ->
180+ {
181+ MatrixName = Path.GetFileNameWithoutExtension filename
182+ MatrixStructure = matrixHandler filename
183+ })
191184
185+ [<Config( typeof< BoolConfig>) >]
192186type EWiseAddBenchmarks4Bool () =
193187 inherit EWiseAddBenchmarks()
194188
195189 let mutable leftCOO = Unchecked.defaultof< Matrix< bool>>
196190 let mutable rightCOO = Unchecked.defaultof< Matrix< bool>>
197191
192+ member val FirstMatrix = Unchecked.defaultof< COOFormat< bool>> with get, set
193+ member val SecondMatrix = Unchecked.defaultof< COOFormat< bool>> with get, set
194+
195+ [<ParamsSource( " InputMatricesProvider" ) >]
196+ member val InputMatrix = Unchecked.defaultof< InputMatrixFormat< bool>> with get, set
197+
198198 [<IterationSetup>]
199199 member this.BuildCOO () =
200- let leftRows = Array.zeroCreate< int> base .FirstMatrix.Rows.Length
201- let leftCols = Array.zeroCreate< int> base .FirstMatrix.Columns.Length
202- let leftVals = Array.create< bool> base .FirstMatrix.Values.Length true
203- Array.blit base .FirstMatrix.Rows 0 leftRows 0 base .FirstMatrix.Rows.Length
204- Array.blit base .FirstMatrix.Columns 0 leftCols 0 base .FirstMatrix.Columns.Length
200+ let leftRows = Array.zeroCreate< int> this .FirstMatrix.Rows.Length
201+ let leftCols = Array.zeroCreate< int> this .FirstMatrix.Columns.Length
202+ let leftVals = Array.create< bool> this .FirstMatrix.Values.Length true
203+ Array.blit this .FirstMatrix.Rows 0 leftRows 0 this .FirstMatrix.Rows.Length
204+ Array.blit this .FirstMatrix.Columns 0 leftCols 0 this .FirstMatrix.Columns.Length
205205
206206 leftCOO <-
207207 Matrix.Build< bool>(
208- base .FirstMatrix.RowCount,
209- base .FirstMatrix.ColumnCount,
210- leftRows ,
211- leftCols ,
212- leftVals ,
208+ this .FirstMatrix.RowCount,
209+ this .FirstMatrix.ColumnCount,
210+ this.FirstMatrix.Rows ,
211+ this.FirstMatrix.Columns ,
212+ this.FirstMatrix.Values ,
213213 COO
214214 )
215215
216- let rightRows = Array.zeroCreate< int> base .SecondMatrix.Rows.Length
217- let rightCols = Array.zeroCreate< int> base .SecondMatrix.Columns.Length
218- let rightVals = Array.create< bool> base .SecondMatrix.Values.Length true
219- Array.blit base .SecondMatrix.Rows 0 rightRows 0 base .SecondMatrix.Rows.Length
220- Array.blit base .SecondMatrix.Columns 0 rightCols 0 base .SecondMatrix.Columns.Length
216+ let rightRows = Array.zeroCreate< int> this .SecondMatrix.Rows.Length
217+ let rightCols = Array.zeroCreate< int> this .SecondMatrix.Columns.Length
218+ let rightVals = Array.create< bool> this .SecondMatrix.Values.Length true
219+ Array.blit this .SecondMatrix.Rows 0 rightRows 0 this .SecondMatrix.Rows.Length
220+ Array.blit this .SecondMatrix.Columns 0 rightCols 0 this .SecondMatrix.Columns.Length
221221
222222 rightCOO <-
223223 Matrix.Build< bool>(
224- base .SecondMatrix.RowCount,
225- base .SecondMatrix.ColumnCount,
226- rightRows ,
227- rightCols ,
228- rightVals ,
224+ this .SecondMatrix.RowCount,
225+ this .SecondMatrix.ColumnCount,
226+ this.SecondMatrix.Rows ,
227+ this.SecondMatrix.Columns ,
228+ this.SecondMatrix.Values ,
229229 COO
230230 )
231231
@@ -234,3 +234,34 @@ type EWiseAddBenchmarks4Bool() =
234234 let ( ClContext context ) = this.OclContext
235235 leftCOO.EWiseAdd rightCOO None BooleanSemiring.anyAll
236236 |> context.RunSync
237+
238+ static member InputMatricesProvider =
239+ let matricesFilenames =
240+ let pathToConfig =
241+ Path.Combine [|
242+ __ SOURCE_ DIRECTORY__
243+ " Configs"
244+ " EWiseAddBenchmarks4Bool.txt"
245+ |] |> Path.GetFullPath
246+
247+ File.ReadAllLines pathToConfig
248+ |> Seq.ofArray
249+ |> Seq.filter ( fun line -> not <| line.StartsWith " !" )
250+
251+ let matrixHandler ( matrixFilename : string ) =
252+ match Path.GetExtension matrixFilename with
253+ | " .mtx" ->
254+ let mtx = GraphReader.readMtx <| Utils.getFullPathToMatrix matrixFilename
255+ match mtx.Format, mtx.Field with
256+ | " coordinate" , " real" -> Utils.makeCOO mtx <| FromString ( fun _ -> true )
257+ | " coordinate" , " integer" -> Utils.makeCOO mtx <| FromString ( fun _ -> true )
258+ | " coordinate" , " pattern" -> Utils.makeCOO mtx <| FromUnit ( fun _ -> true )
259+ | _ -> failwith " Unsupported matrix format"
260+ | _ -> failwith " Unsupported matrix format"
261+
262+ matricesFilenames
263+ |> Seq.map ( fun filename ->
264+ {
265+ MatrixName = Path.GetFileNameWithoutExtension filename
266+ MatrixStructure = matrixHandler filename
267+ })
0 commit comments