Đối với ứng dụng của tôi, tôi phải xử lý một loạt các đối tượng (ví dụ: int
s). Để kết thúc này, tôi lưu trữ các yếu tố trong một mảng liên tục đơnGiảm hiệu quả từng phần cho các mảng của các phần tử, độ lệch và độ dài của các danh sách con
arr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14...}
và các thông tin về xô (danh sách con) được cho bởi offsets tới phần tử đầu tiên trong thùng tương ứng và độ dài của sublist.
Vì vậy, ví dụ, cho
offsets = {0,3,8,..}
sublist_lengths = {3,5,2,...}
sẽ dẫn đến việc chia rẽ sau:
0 1 2 || 3 4 5 6 7 || 8 9 || ...
Những gì tôi đang tìm kiếm là một cách hơi nói chung và hiệu quả để chạy các thuật toán, như cắt giảm, trên các nhóm chỉ sử dụng hạt nhân tùy chỉnh hoặc thư viện thrust
. Cách tổng hợp các xô nên cung cấp:
3 || 25 || 17 || ...
Những gì tôi đã đi lên với:
tùy chọn 1: hạt nhân tùy chỉnh đòi hỏi khá nhiều mày mò, bản vào bộ nhớ chia sẻ, sự lựa chọn đúng đắn kích thước khối và lưới và thực hiện riêng các thuật toán, như quét, giảm, v.v. Ngoài ra, mọi thao tác đơn lẻ sẽ yêu cầu một hạt nhân riêng. Nói chung nó là rõ ràng với tôi làm thế nào để làm điều này, nhưng sau khi đã sử dụng
thrust
cho mấy ngày vừa qua tôi có ấn tượng rằng có thể có một cách thông minh hơnphương án 2: tạo ra một loạt các phím từ các khoảng trống (
{0,0,0,1,1,1,1,1,2,2,3,...}
trong ví dụ trên) và sử dụngthrust::reduce_by_key
. Tuy nhiên, tôi không thích thế hệ danh sách bổ sung.tùy chọn 3: Sử dụng
thrust::transform_iterator
cùng vớithrust::counting_iterator
để tạo đưa ra ở trên danh sách chủ chốt khi đang bay. Thật không may, tôi không thể đưa ra một thực hiện mà không yêu cầu gia số của các chỉ số vào danh sách bù đắp trên thiết bị và đánh bại song song.
Cách nào tốt nhất để thực hiện việc này?
Sự giống nhau với ma trận hàng thưa thớt đã nén tôi cũng vậy. – talonmies