At first I'd like to notice that I've read about sum reduction, but it's not what I want to achieve.
Let's say I have array with elements:
array[0] = 2
array[1] = 1
array[2] = -1
array[3] = 3
array[4] = -1
array[5] = 2
Result should be:
array[0] = array[0] = 2
array[1] = array[0] + array[1] = 2 + 1 = 3
array[2] = -1 (when -1 omitting)
array[3] = array[0] + array[1] + array[3] = 2 + 1 + 3 = 6 (ommited array[2] due to -1 value)
array[4] = -1 (omitting)
array[5] = array[0] + array[1] + array[3] + array[5] = 2 + 1 + 3 + 2 = 8
In general it should be:
array[0] = array[0]
array[1] = array[0] + array[1]
array[2] = array[1] + array[2]
array[3] = array[2] + array[3]
array[4] = array[3] + array[4]
array[5] = array[4] + array[5]
or just
array[n] += array[n-1] where n > 0
(ommiting -1 could be added later).
And I want to do this parallel in CUDA. What is the fastest way to achieve this?
You can use
thrust::inclusive_scan
:output