Skip to content

Commit 38ceee3

Browse files
committed
Radix returns sorted keys
1 parent 6f08dad commit 38ceee3

3 files changed

Lines changed: 26 additions & 11 deletions

File tree

src/GraphBLAS-sharp.Backend/Common/Sort/Radix.fs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ module Radix =
268268
failwith "Mismatch of key lengths and value. Lengths must be the same"
269269

270270
if values.Length <= 1 then
271-
dataCopy processor allocationMode values
271+
copy processor DeviceOnly keys, dataCopy processor DeviceOnly values
272272
else
273273
let firstKeys = copy processor DeviceOnly keys
274274

@@ -321,11 +321,10 @@ module Radix =
321321
localOffset.Free processor
322322
shift.Free processor
323323

324-
(fst keysPair).Free processor
325324
(snd keysPair).Free processor
326325
(snd valuesPair).Free processor
327326

328-
(fst valuesPair)
327+
(fst keysPair, fst valuesPair)
329328

330329
let runByKeysStandard clContext workGroupSize =
331330
runByKeys clContext workGroupSize defaultBitCount

src/GraphBLAS-sharp.Backend/Matrix/SpGeMM/Expand.fs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,21 +181,31 @@ module Expand =
181181

182182
fun (processor: MailboxProcessor<_>) (values: ClArray<'a>) (columns: ClArray<int>) (rows: ClArray<int>) ->
183183
// sort by columns
184-
let valuesSortedByColumns =
184+
let keys, valuesSortedByColumns =
185185
sortByKeyValues processor DeviceOnly columns values
186186

187-
let rowsSortedByColumns =
187+
keys.Free processor
188+
189+
let keys, rowsSortedByColumns =
188190
sortByKeyIndices processor DeviceOnly columns rows
189191

192+
keys.Free processor
193+
194+
//TODO: already sorted above?
190195
let sortedColumns = sortKeys processor columns
191196

192197
// sort by rows
193-
let valuesSortedByRows =
198+
let keys, valuesSortedByRows =
194199
sortByKeyValues processor DeviceOnly rowsSortedByColumns valuesSortedByColumns
195200

196-
let columnsSortedByRows =
201+
keys.Free processor
202+
203+
let keys, columnsSortedByRows =
197204
sortByKeyIndices processor DeviceOnly rowsSortedByColumns sortedColumns
198205

206+
keys.Free processor
207+
208+
//TODO: already sorted above?
199209
let sortedRows = sortKeys processor rowsSortedByColumns
200210

201211
valuesSortedByColumns.Free processor

tests/GraphBLAS-sharp.Tests/Backend/Common/Sort/Radix.fs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@ let processor = Context.defaultContext.Queue
1717

1818
let context = Context.defaultContext.ClContext
1919

20-
let checkResultByKeys (inputArray: (int * 'a) []) (actualValues: 'a []) =
21-
let expectedValues = Seq.sortBy fst inputArray |> Seq.map snd
20+
let checkResultByKeys (inputArray: (int * 'a) []) (actualKeys: int []) (actualValues: 'a []) =
21+
let expected = Seq.sortBy fst inputArray
22+
let expectedKeys = expected |> Seq.map fst
23+
let expectedValues = expected |> Seq.map snd
24+
25+
"Keys must be the same"
26+
|> Expect.sequenceEqual expectedKeys actualKeys
2227

2328
"Values must be the same"
2429
|> Expect.sequenceEqual expectedValues actualValues
@@ -32,12 +37,13 @@ let makeTestByKeys<'a when 'a: equality> sortFun (array: (int * 'a) []) =
3237
let clKeys = keys.ToDevice context
3338
let clValues = values.ToDevice context
3439

35-
let clActualValues: ClArray<'a> =
40+
let clActualKeys, clActualValues: ClArray<int> * ClArray<'a> =
3641
sortFun processor HostInterop clKeys clValues
3742

43+
let actualKeys = clActualKeys.ToHostAndFree processor
3844
let actualValues = clActualValues.ToHostAndFree processor
3945

40-
checkResultByKeys array actualValues
46+
checkResultByKeys array actualKeys actualValues
4147

4248
let createTestByKeys<'a when 'a: equality and 'a: struct> =
4349
let sort =

0 commit comments

Comments
 (0)