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 функциональность, которая не является встроенной, но, безусловно, должен быть способ сделать это!

Ответы на вопрос(2)

Ваш ответ на вопрос