@@ -10,53 +10,33 @@ let context = Context.defaultContext.ClContext
1010
1111let processor = Context.defaultContext.Queue
1212
13- let scanByKey scan keysAndValues =
14- // select keys
15- Array.map fst keysAndValues
16- // get unique keys
17- |> Array.distinct
18- |> Array.map ( fun key ->
19- // select with certain key
20- Array.filter ( fst >> ((=) key)) keysAndValues
21- // get values
22- |> Array.map snd
23- // scan values and get only values without sum
24- |> ( fst << scan))
25- |> Array.concat
26-
2713let checkResult isEqual keysAndValues actual hostScan =
2814
29- let expected = scanByKey hostScan keysAndValues
30-
31- let keys , values = Array.unzip keysAndValues
32- printfn " ---------------"
33-
34- printfn " keys: %A " keys
35- printfn " values: %A " values
36- printfn $" expected: %A {expected}"
37-
38- printfn " -----------"
15+ let expected =
16+ HostPrimitives.scanByKey hostScan keysAndValues
3917
4018 " Results must be the same"
4119 |> Utils.compareArrays isEqual actual expected
4220
4321let makeTestSequentialSegments isEqual scanHost scanDevice ( keysAndValues : ( int * 'a ) []) =
4422 if keysAndValues.Length > 0 then
4523 let keys , values =
46- Array.sortBy fst keysAndValues
47- |> Array.unzip
24+ Array.sortBy fst keysAndValues |> Array.unzip
4825
4926 let offsets =
5027 HostPrimitives.getUniqueBitmapFirstOccurrence keys
5128 |> HostPrimitives.getBitPositions
5229
5330 let uniqueKeysCount = Array.distinct keys |> Array.length
5431
55- let clKeys = context.CreateClArrayWithSpecificAllocationMode( HostInterop, keys)
32+ let clKeys =
33+ context.CreateClArrayWithSpecificAllocationMode( HostInterop, keys)
5634
57- let clValues = context.CreateClArrayWithSpecificAllocationMode( HostInterop, values)
35+ let clValues =
36+ context.CreateClArrayWithSpecificAllocationMode( HostInterop, values)
5837
59- let clOffsets = context.CreateClArrayWithSpecificAllocationMode( HostInterop, offsets)
38+ let clOffsets =
39+ context.CreateClArrayWithSpecificAllocationMode( HostInterop, offsets)
6040
6141 scanDevice processor uniqueKeysCount clValues clKeys clOffsets
6242
@@ -83,70 +63,21 @@ let sequentialSegmentsTests =
8363 [ createTest 0 <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
8464
8565 if Utils.isFloat64Available context.ClDevice then
86- createTest 0.0 <@ (+) @> (+) Utils.floatIsEqual PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
87-
88- createTest 0.0 f <@ (+) @> (+) Utils.float32IsEqual PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
89-
90- createTest false <@ (||) @> (||) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
91- createTest 0 u <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude ]
92- |> testList " exclude"
93-
94- let includeTests =
95- [ createTest 0 <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
96-
97- if Utils.isFloat64Available context.ClDevice then
98- createTest 0.0 <@ (+) @> (+) Utils.floatIsEqual PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
99-
100- createTest 0.0 f <@ (+) @> (+) Utils.float32IsEqual PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
101-
102- createTest false <@ (||) @> (||) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
103- createTest 0 u <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude ]
104-
105- |> testList " include"
106-
107- testList " Sequential segments" [ excludeTests; includeTests ]
108-
109- let makeTestOneWorkGroup isEqual scanHost scanDevice ( keysAndValues : ( int * 'a ) []) =
110- if keysAndValues.Length > 0 then
111- let keys , values =
112- Array.sortBy fst keysAndValues
113- |> Array.unzip
114-
115- let uniqueKeysCount = Array.distinct keys |> Array.length
116-
117- let clKeys = context.CreateClArrayWithSpecificAllocationMode( HostInterop, keys)
118-
119- let clValues = context.CreateClArrayWithSpecificAllocationMode( HostInterop, values)
120-
121- scanDevice processor uniqueKeysCount clValues clKeys
122-
123- let actual = clValues.ToHostAndFree processor
124- clKeys.Free processor
125-
126- let keysAndValues = Array.zip keys values
127-
128- checkResult isEqual keysAndValues actual scanHost
129-
130- let oneWorkGroupCreateTest ( zero : 'a ) opAddQ opAdd isEqual deviceScan hostScan =
131-
132- let workGroupSize = 256
133-
134- let hostScan = hostScan zero opAdd
135-
136- let deviceScan =
137- deviceScan context workGroupSize opAddQ zero
138-
139- makeTestSequentialSegments isEqual hostScan deviceScan
140- |> testPropertyWithConfig { Utils.defaultConfig with endSize = workGroupSize } $" test on {typeof<'a>}"
141-
142- let oneWorkGroupTests =
143- let excludeTests =
144- [ createTest 0 <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
145-
146- if Utils.isFloat64Available context.ClDevice then
147- createTest 0.0 <@ (+) @> (+) Utils.floatIsEqual PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
148-
149- createTest 0.0 f <@ (+) @> (+) Utils.float32IsEqual PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
66+ createTest
67+ 0.0
68+ <@ (+) @>
69+ (+)
70+ Utils.floatIsEqual
71+ PrefixSum.ByKey.sequentialExclude
72+ HostPrimitives.prefixSumExclude
73+
74+ createTest
75+ 0.0 f
76+ <@ (+) @>
77+ (+)
78+ Utils.float32IsEqual
79+ PrefixSum.ByKey.sequentialExclude
80+ HostPrimitives.prefixSumExclude
15081
15182 createTest false <@ (||) @> (||) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude
15283 createTest 0 u <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialExclude HostPrimitives.prefixSumExclude ]
@@ -156,19 +87,25 @@ let oneWorkGroupTests =
15687 [ createTest 0 <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
15788
15889 if Utils.isFloat64Available context.ClDevice then
159- createTest 0.0 <@ (+) @> (+) Utils.floatIsEqual PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
160-
161- createTest 0.0 f <@ (+) @> (+) Utils.float32IsEqual PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
90+ createTest
91+ 0.0
92+ <@ (+) @>
93+ (+)
94+ Utils.floatIsEqual
95+ PrefixSum.ByKey.sequentialInclude
96+ HostPrimitives.prefixSumInclude
97+
98+ createTest
99+ 0.0 f
100+ <@ (+) @>
101+ (+)
102+ Utils.float32IsEqual
103+ PrefixSum.ByKey.sequentialInclude
104+ HostPrimitives.prefixSumInclude
162105
163106 createTest false <@ (||) @> (||) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude
164107 createTest 0 u <@ (+) @> (+) (=) PrefixSum.ByKey.sequentialInclude HostPrimitives.prefixSumInclude ]
165108
166109 |> testList " include"
167110
168111 testList " Sequential segments" [ excludeTests; includeTests ]
169-
170-
171-
172-
173-
174-
0 commit comments