@@ -82,50 +82,54 @@ let correctnessOnNumbers<'a when 'a : struct and 'a : equality>
8282 ( case : OperationCase )
8383 ( matrixA : 'a [,], matrixB : 'a [,]) =
8484
85- let eWiseAdd ( matrixA : 'a [,]) ( matrixB : 'a [,]) =
86- let l = matrixA |> Seq.cast< 'a>
87- let r = matrixB |> Seq.cast< 'a>
85+ let eWiseAddNaive ( matrixA : 'a [,]) ( matrixB : 'a [,]) =
86+ let left = matrixA |> Seq.cast< 'a>
87+ let right = matrixB |> Seq.cast< 'a>
8888
89- ( l , r )
89+ ( left , right )
9090 ||> Seq.map2
9191 ( fun x y ->
9292 if isZero x && isZero y then None
9393 else Some <| sum x y
9494 )
9595 |> Seq.choose id
9696
97- let eWiseAddGb ( matrixA : 'a [,]) ( matrixB : 'a [,]) =
98- let l = createMatrix< 'a> case.MatrixCase [| matrixA; isZero|]
99- let r = createMatrix< 'a> case.MatrixCase [| matrixB; isZero|]
97+ let eWiseAddGB ( matrixA : 'a [,]) ( matrixB : 'a [,]) =
98+ try
99+ let left = createMatrix< 'a> case.MatrixCase [| matrixA; isZero|]
100+ let right = createMatrix< 'a> case.MatrixCase [| matrixB; isZero|]
100101
101- logger.info (
102- eventX " Left matrix is \n {matrix}"
103- >> setField " matrix" l
104- )
102+ logger.debug (
103+ eventX " Left matrix is \n {matrix}"
104+ >> setField " matrix" left
105+ )
105106
106- logger.info (
107- eventX " Right matrix is \n {matrix}"
108- >> setField " matrix" r
109- )
107+ logger.debug (
108+ eventX " Right matrix is \n {matrix}"
109+ >> setField " matrix" right
110+ )
111+
112+ opencl {
113+ let! result = left.EWiseAdd right None semiring
114+ let! tuples = result.GetTuples()
115+ return ! tuples.ToHost()
116+ }
117+ |> oclContext.RunSync
118+ |> ( fun tuples -> tuples.Values)
119+ |> Seq.ofArray
110120
111- opencl {
112- let! result = l.EWiseAdd r None semiring
113- let! tuples = result.GetTuples()
114- return ! tuples.ToHost()
115- }
116- |> oclContext.RunSync
117- |> ( fun tuples -> tuples.Values)
118- |> Seq.ofArray
121+ finally
122+ oclContext.Provider.CloseAllBuffers()
119123
120- let expected = eWiseAdd matrixA matrixB
121- let actual = eWiseAddGb matrixA matrixB
124+ let expected = eWiseAddNaive matrixA matrixB
125+ let actual = eWiseAddGB matrixA matrixB
122126
123- logger.info (
127+ logger.debug (
124128 eventX " Expected result is {matrix}"
125129 >> setField " matrix" ( sprintf " %A " <| List.ofSeq expected)
126130 )
127131
128- logger.info (
132+ logger.debug (
129133 eventX " Actual result is {matrix}"
130134 >> setField " matrix" ( sprintf " %A " <| List.ofSeq actual)
131135 )
@@ -141,45 +145,50 @@ let correctnessOnNumbers<'a when 'a : struct and 'a : equality>
141145 |> Expect.all difference isZero
142146
143147let correctnessOnBool ( case : OperationCase ) ( matrixA : bool [,], matrixB : bool [,]) =
144- let eWiseAdd ( matrixA : bool [,]) ( matrixB : bool [,]) =
145- let l = matrixA |> Seq.cast< bool>
146- let r = matrixB |> Seq.cast< bool>
148+ let eWiseAddNaive ( matrixA : bool [,]) ( matrixB : bool [,]) =
149+ let left = matrixA |> Seq.cast< bool>
150+ let right = matrixB |> Seq.cast< bool>
147151
148- ( l , r )
152+ ( left , right )
149153 ||> Seq.map2 (||)
154+ |> Seq.filter id
150155
151- let eWiseAddGb ( matrixA : bool [,]) ( matrixB : bool [,]) =
152- let l = createMatrix< bool> case.MatrixCase [| matrixA; not |]
153- let r = createMatrix< bool> case.MatrixCase [| matrixB; not |]
156+ let eWiseAddGB ( matrixA : bool [,]) ( matrixB : bool [,]) =
157+ try
158+ let left = createMatrix< bool> case.MatrixCase [| matrixA; not |]
159+ let right = createMatrix< bool> case.MatrixCase [| matrixB; not |]
154160
155- logger.info (
156- eventX " Left matrix is \n {matrix}"
157- >> setField " matrix" l
158- )
161+ logger.debug (
162+ eventX " Left matrix is \n {matrix}"
163+ >> setField " matrix" left
164+ )
159165
160- logger.info (
161- eventX " Right matrix is \n {matrix}"
162- >> setField " matrix" r
163- )
166+ logger.debug (
167+ eventX " Right matrix is \n {matrix}"
168+ >> setField " matrix" right
169+ )
170+
171+ opencl {
172+ let! result = left.EWiseAdd right None AnyAll.bool
173+ let! tuples = result.GetTuples()
174+ return ! tuples.ToHost()
175+ }
176+ |> oclContext.RunSync
177+ |> ( fun tuples -> tuples.Values)
178+ |> Seq.ofArray
164179
165- opencl {
166- let! result = l.EWiseAdd r None AnyAll.bool
167- let! tuples = result.GetTuples()
168- return ! tuples.ToHost()
169- }
170- |> oclContext.RunSync
171- |> ( fun tuples -> tuples.Values)
172- |> Seq.ofArray
180+ finally
181+ oclContext.Provider.CloseAllBuffers()
173182
174- let expected = eWiseAdd matrixA matrixB
175- let actual = eWiseAddGb matrixA matrixB
183+ let expected = eWiseAddNaive matrixA matrixB
184+ let actual = eWiseAddGB matrixA matrixB
176185
177- logger.info (
186+ logger.debug (
178187 eventX " Expected result is {matrix}"
179188 >> setField " matrix" ( sprintf " %A " <| List.ofSeq expected)
180189 )
181190
182- logger.info (
191+ logger.debug (
183192 eventX " Actual result is {matrix}"
184193 >> setField " matrix" ( sprintf " %A " <| List.ofSeq actual)
185194 )
@@ -191,7 +200,7 @@ let correctnessOnBool (case: OperationCase) (matrixA: bool[,], matrixB: bool[,])
191200 ( expected, actual)
192201 ||> Seq.map2 (<>)
193202
194- logger.info (
203+ logger.debug (
195204 eventX " Difference result is {matrix}"
196205 >> setField " matrix" ( sprintf " %A " <| List.ofSeq difference)
197206 )
@@ -202,23 +211,23 @@ let correctnessOnBool (case: OperationCase) (matrixA: bool[,], matrixB: bool[,])
202211let config = {
203212 FsCheckConfig.defaultConfig with
204213 arbitrary = [ typeof< PairOfSparseMatrices>]
205- startSize = 10
214+ startSize = 0
206215 maxTest = 10
207216}
208217
209218// https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/language-specification/types#value-types
210219let testFixtures case = [
211220 case
212221 |> correctnessOnNumbers< int> (+) (-) ((=) 0 ) AddMult.int
213- |> ptestPropertyWithConfig config ( sprintf " Correctness on int, %A , %A " case.MatrixCase case.MaskCase)
222+ |> testPropertyWithConfig config ( sprintf " Correctness on int, %A , %A " case.MatrixCase case.MaskCase)
214223
215224 case
216225 |> correctnessOnNumbers< float> (+) (-) ( fun x -> abs x < Accuracy.medium.absolute) AddMult.float
217- |> ptestPropertyWithConfig config ( sprintf " Correctness on float, %A , %A " case.MatrixCase case.MaskCase)
226+ |> testPropertyWithConfig config ( sprintf " Correctness on float, %A , %A " case.MatrixCase case.MaskCase)
218227
219228 case
220229 |> correctnessOnBool
221- |> testPropertyWithConfigStdGen ( 248983341 , 296859677 ) config ( sprintf " Correctness on bool, %A , %A " case.MatrixCase case.MaskCase)
230+ |> testPropertyWithConfig config ( sprintf " Correctness on bool, %A , %A " case.MatrixCase case.MaskCase)
222231]
223232
224233let tests =
0 commit comments