CUDA Thrust: redu_by_key только для некоторых значений в массиве, основываясь на значениях в «ключевом» массиве
Допустим, у меня есть два массива device_vector <byte>,d_keys
а такжеd_data
.
Еслиd_data
представляет собой, например, уплощенную двумерную матрицу 3х5 (например, {1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3}) иd_keys
является одномерным массивом размером 5 (например, {1, 0, 0, 1, 1}), как я могу сделать сокращение таким образом, чтобы в конечном итоге я добавил только значения для каждой строки, если соответствующийd_keys
значение равно единице (например, заканчивается результатом {10, 23, 14})?
sum_rows.cu Пример позволяет мне добавить каждое значение вd_data
, но это не совсем верно.
В качестве альтернативы, я могу, для каждого ряда, использоватьzip_iterator
и объединитьd_keys
с одним рядомd_data
в то время, и сделатьtransform_reduce
добавление только в том случае, если значение ключа равно единице, но тогда мне придется перебиратьd_data
массив.
Что мне действительно нужно, это какой-тоtransform_reduce_by_key
функциональность, которая не является встроенной, но, безусловно, должен быть способ сделать это!