CUDA Thrust: redu_by_key только для некоторых значений в массиве, основываясь на значениях в «ключевом» массиве

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

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

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