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