Tôi có một ứng dụng mà tôi cần lấy cường độ trung bình của hình ảnh cho khoảng 1 triệu hình ảnh. Nó "cảm thấy" giống như một công việc cho một shader mảnh của GPU, nhưng các shader fragment là cho các tính toán cục bộ cho mỗi pixel, trong khi hình ảnh trung bình là một hoạt động toàn cục.Tổng cường độ hình ảnh trong GPU
Một cách tiếp cận tôi xem là tải hình ảnh vào kết cấu, áp dụng hiệu ứng nhòe hộp 2x2, tải kết quả trở lại vào kết cấu N/2 x N/2 và lặp lại cho đến khi đầu ra là 1x1. Tuy nhiên, điều này sẽ có các ứng dụng đăng nhập n của trình đổ bóng.
Có cách nào để thực hiện điều đó trong một lần không? Hay tôi nên chia nhỏ và sử dụng CUDA/OpenCL?
Ứng dụng của tôi đang thực hiện kết hợp Chamfer của mô hình 3D được chiếu với hình ảnh đầu vào. Tôi vẽ một hình ảnh chứa các cạnh hình bóng của mô hình của tôi và đối với mọi pixel cạnh, tôi sử dụng bảng tra cứu để tìm pixel cạnh gần nhất trong hình ảnh đầu vào. Sau đó, tôi cần kết quả trung bình, cho tôi biết mô hình phù hợp với dữ liệu. Tôi đã thử đọc các điểm ảnh được hiển thị từ opengl và thực hiện kết hợp chamfer trên CPU, nhưng hoạt động đọc là một nút cổ chai lớn.Tôi đã hy vọng rằng bằng cách làm toàn bộ điều trên GPU và chỉ đọc trong một giá trị duy nhất, tôi sẽ nhận được một tốc độ lớn. –
(ctd) Vì tôi có thể vượt qua bảng tra cứu dưới dạng kết cấu, tôi có thể thực hiện tra cứu trong trình đổ bóng, nhưng tôi vẫn có nút cổ chai của việc đọc dữ liệu vào bộ nhớ chính. –
Không có gì buộc bạn làm mờ 2x2, - bạn có thể làm ví dụ làm mờ với hộp 16x16 và sau đó kết quả tải vào N/16 x N/16 kết cấu. Theo cách đó, bạn có thể đạt được tốc độ lớn và ít hoạt động sao chép ... –