Xin lỗi vì câu hỏi chủ đề mơ hồ, nhưng tôi đang nghiên cứu một số quy trình xử lý video học thuật. Các thuật toán được viết bằng MATLAB, và trong khi nó tốt cho mục đích phát triển, nó xử lý một video ở khoảng 60spf, hoặc xung quanh .0166fps. Không cần phải nói, điều này sẽ không đủ cho trình diễn và như vậy, vì vậy công việc mùa hè của tôi là chuyển đổi thói quen thành thứ gì đó sẽ chạy nhanh hơn đáng kể.Giải pháp tốt nhất cho vấn đề song song đáng xấu hổ là gì?
Tôi đã viết lại phần chậm nhất của mã cho CUDA, giải pháp GPGPU của nvidia. Tuy nhiên, đó cũng là một phần lớn của mã mà dường như được thực hiện tốt hơn trên CPU, vì nó tương đối nối tiếp. Vấn đề là, máy tôi đã được cung cấp có 2 bộ vi xử lý Xeon, với tổng số 8 lõi logic, và nó có vẻ là một sự xấu hổ để tắc nghẽn mã GPU bằng cách mã hóa chỉ cho lõi đơn. Quá trình chuyển đổi video có chức năng trong mỗi khung hình không phụ thuộc vào các khung hình khác, vì vậy tôi đã suy nghĩ một số loại hàng đợi/luồng không đồng bộ sẽ tốt nhất.
Đây là câu hỏi của tôi: cách tốt nhất để đạt được loại song song này với tỷ lệ nỗ lực tốt nhất để tăng tốc độ sản lượng là gì?
Một số giải pháp mà tôi đã xem xét là OpenMP, .net TPL và pthread đơn giản.
Tôi chỉ có tiếp xúc cơ bản với lập trình không đồng bộ, vì vậy tôi muốn sử dụng thư viện hoặc một thứ gì đó thay vì lộn xộn xung quanh với mutexes và rào cản và tự bắn mình vào chân nhiều lần. Tôi không ngại học, bởi vì đó là một trong những mục tiêu của tôi cho mùa hè này, nhưng đồng thời, song song là cứng. Tuy nhiên, nếu sự khác biệt về tốc độ thực sự rất đáng chú ý, tôi sẵn sàng kéo tóc ra trong vài tuần. : P
Xin cảm ơn trước.
Nếu bạn có thể giải quyết vấn đề thành nhiều phần có thể được thực hiện mà không bị nhiễu (với các điểm đồng bộ được xác định rõ), thì "thư viện" được sử dụng chỉ là đường ... một cách đơn giản là sử dụng thread pool, hàng đợi đồng thời (một cho đầu vào, một cho đầu ra), và chỉ truy cập các đối tượng/dữ liệu mà thread "sở hữu" (điều này có thể được mở rộng đến các cấu trúc bên ngoài bất biến). –