CUDA Thrust: reduction_by_key tylko na niektórych wartościach w tablicy, opartych na wartościach off w tablicy „key”
Powiedzmy, że mam dwie tablice device_vector <byte>,d_keys
id_data
.
Jeślid_data
to na przykład spłaszczona tablica 2D 3x5 (np. {1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3}) id_keys
jest tablicą 1D o rozmiarze 5 (np. {1, 0, 0, 1, 1}), jak mogę zrobić redukcję tak, że w końcu dodam tylko wartości w przeliczeniu na wiersz, jeśli odpowiadająced_keys
wartość wynosi jeden (np. kończy się wynikiem {10, 23, 14})?
Thesum_rows.cu przykład pozwala mi dodać każdą wartośćd_data
, ale to nie do końca prawda.
Alternatywnie, mogę, w przeliczeniu na rząd, użyć azip_iterator
i połączd_keys
z jednym rzędemd_data
na raz i zróbtransform_reduce
, dodając tylko wtedy, gdy wartość klucza wynosi jeden, ale wtedy musiałbym przejść przezd_data
szyk.
To, czego naprawdę potrzebuję, to coś w rodzajutransform_reduce_by_key
funkcjonalność, która nie jest wbudowana, ale na pewno musi istnieć sposób, aby to zrobić!