Tôi đang sử dụng CUDA/Lực đẩy/CUDPP. Theo tôi hiểu, trong Luồng luồng, một số mục nhất định trong một mảng được đánh dấu là không hợp lệ và sau đó "bị xóa".Nén dòng CUDA: hiểu khái niệm
Bây giờ, "xóa" thực sự có ý nghĩa gì ở đây? Giả sử các mảng ban đầu A
và có chiều dài 6. Nếu 2 yếu tố này là không hợp lệ (bằng bất cứ điều kiện chúng tôi có thể cung cấp) sau đó
Có hệ thống tạo ra một mới mảng có kích thước 4 trong GPU-bộ nhớ để lưu trữ các yếu tố hợp lệ để có được kết quả cuối cùng?
HOẶC có thực tế loại bỏ các thành phần không hợp lệ khỏi bộ nhớ và thu hẹp mảng gốc A xuống đến kích thước 4 chỉ giữ nguyên tố hợp lệ không?
Đối với cả hai trường hợp, điều đó không có nghĩa là phân bổ bộ nhớ động đang diễn ra dưới mui xe? Nhưng tôi đã nghe nói rằng phân bổ bộ nhớ động là không thể trong thế giới CUDA.
Có một khả năng khác, đó là kích thước của cấp phát bộ nhớ không thay đổi và 4 thành phần đầu tiên hợp lệ, 2 phần tử cuối cùng không được xác định. Nhưng thực sự câu hỏi này là tất cả về các vấn đề thực hiện, và ai nói rằng CUDPP hoặc lực đẩy làm việc như nhau? – talonmies
ArrayFire là một lựa chọn tốt hơn/dễ dàng hơn so với Thrust và cũng miễn phí, ít nhất là cho việc sử dụng GPU đơn lẻ. http://accelereyes.com/arrayfire – arrayfire