@@ -129,6 +129,63 @@ module Utils =
129129
130130 result
131131
132+ let prefixSumExclude ( array : 'a []) zero plus =
133+ let mutable sum = zero
134+
135+ for i in 0 .. array.Length - 1 do
136+ let currentItem = array.[ i]
137+ array.[ i] <- sum
138+
139+ sum <- plus currentItem sum
140+
141+ sum
142+
143+ let prefixSumInclude ( array : 'a []) zero plus =
144+ let mutable sum = zero
145+
146+ for i in 0 .. array.Length - 1 do
147+ sum <- plus array.[ i] sum
148+
149+ array.[ i] <- sum
150+
151+ sum
152+
153+ let getUniqueBitmap < 'a when 'a : equality > ( array : 'a []) =
154+ let bitmap = Array.zeroCreate array.Length
155+
156+ for i in 0 .. array.Length - 2 do
157+ if array.[ i] <> array.[ i + 1 ] then bitmap.[ i] <- 1
158+
159+ // set last 1
160+ bitmap.[ bitmap.Length - 1 ] <- 1
161+
162+ bitmap
163+
164+ let scatter ( positions : int array ) ( values : 'a array ) ( resultValues : 'a array ) =
165+ for i in 0 .. positions.Length - 2 do
166+ if positions.[ i] <> positions.[ i + 1 ] then
167+ let valuePosition = positions.[ i]
168+ let value = values.[ i]
169+
170+ resultValues.[ valuePosition] <- value
171+
172+ // set last value
173+ let lastPosition = positions.[ positions.Length - 1 ]
174+ let lastValue = values.[ values.Length - 1 ]
175+
176+ resultValues.[ lastPosition] <- lastValue
177+
178+ let gather ( positions : int []) ( values : 'a []) ( result : 'a []) =
179+ for i in 0 .. positions.Length do
180+ let position = positions.[ i]
181+ let value = values.[ position]
182+
183+ result.[ position] <- value
184+
185+ let castMatrixToCSR = function
186+ | Matrix.CSR matrix -> matrix
187+ | _ -> failwith " matrix format must be CSR"
188+
132189module Context =
133190 type TestContext =
134191 { ClContext: ClContext
0 commit comments