Có chức năng memcpy không đồng bộ nào trong linux không? Tôi muốn nó làm việc với DMA và thông báo cho tôi khi nó được hoàn thành.memcpy không đồng bộ trong linux?
Trả lời
Theo như tôi biết, CPU không/không thể tự thực hiện DMA. Vì vậy, bạn cần một phần cứng bên ngoài trên xe buýt để làm các trick cho bạn. Tuy nhiên phần lớn phần cứng không thể giải quyết tất cả bộ nhớ vật lý, do đó, một bản sao memcpy chính xác là không thể trừ khi bạn có định nghĩa rất nghiêm ngặt về phạm vi địa chỉ bộ nhớ trong trường hợp sử dụng của bạn. Quay lại đầu trang Nếu không kernel sẽ phải ghi nhớ khối đó vào chính block bộ nhớ của chính bạn, nó sẽ giết mục đích của việc nhân bản memcpy ngay từ đầu :)
Nhưng vẫn còn nếu bạn muốn tạo một "bản sao" của khối bộ nhớ mà không dùng memcpy (Vẫn còn một ý tưởng tồi bằng cách bởi vì truy cập bộ nhớ DMA thường chậm hơn so với CPU), bạn có thể gửi khối bộ nhớ đến card video và kéo nó trở lại bộ đệm khác. Bạn thậm chí có thể đặt khối trong bộ nhớ video (putbitmap()? :)) và thực hiện bitblt tăng tốc phần cứng() để tạo bản sao khi đang di chuyển.
Bạn có nhớ chia sẻ mục tiêu thực sự của mình để mọi người có thể đưa ra các thủ thuật thông minh hơn hay tốt hơn không?
@ssg, Mục tiêu thực tế của tôi là tạo trình phát video được tối ưu hóa, Trong đó tôi sao chép dữ liệu YUV của mình vào hàng đợi của nó. Bây giờ bản sao đó mất 2 giây, Nếu bản sao này xảy ra thông qua DMA hơn Trong thời gian này Trong một chủ đề khác, tôi có thể thực hiện giải mã âm thanh. – SunnyShah
@Sunny Shah, Bạn nên xem xét giải pháp sao chép 0 có lẽ sử dụng bộ nhớ dùng chung? Tại sao bạn sao chép những phần lớn bộ nhớ như thế? – Dipstick
FFMPEG xuất ra YUVFrame làm đầu ra hàm giải mã. khi bạn muốn YUVFrame tiếp theo, nó chỉ chỉnh sửa YUVFrame hiện có để tạo mới. Vì vậy, những gì tôi làm là, tôi sao chép YUVFrame để xếp hàng của bộ đệm và sẽ hiển thị khung từ hàng đợi khi thời gian của nó đến. Bản sao này mất khoảng 7% thời gian xử lý. – SunnyShah
Trên bộ xử lý đa lõi hoặc thậm chí chỉ là bộ xử lý với hyper-threading, bạn có thể sắp xếp những gì bạn muốn bằng cách thực thi (đồng bộ) thông thường (đồng bộ) memcpy
trong một chuỗi riêng biệt. Tôi không nói đó là một ý tưởng hay, chỉ cần chỉ ra điều hiển nhiên.
Bạn có thể thực hiện một số lần phát bằng mremap. Hoặc bạn có thể hack FFmpeg để sử dụng các bộ đệm khác nhau cho các khung hình khác nhau.
- 1. Hiệu năng memcpy kém trong không gian người dùng cho bộ nhớ vật lý mmap'ed trong Linux
- 2. Tôi có thể thực hiện một memcpy copy-on-write trong Linux không?
- 3. Linux đồng bộ hóa số đếm trước
- 4. Postback không đồng bộ và đồng bộ trong ASP.NET
- 5. Đồng bộ hóa cuộc gọi không đồng bộ trong C#
- 6. memcpy trong C#
- 7. Các tín hiệu không đồng bộ được xử lý như thế nào trong Linux?
- 8. Trình điều khiển thiết bị Linux: Biểu tượng "memcpy" không được tìm thấy
- 9. memcpy với startIndex?
- 10. Không đồng bộ CreateProcess?
- 11. Gọi lại đồng bộ và không đồng bộ
- 12. memcpy vs assignment trong C
- 13. Ngôn ngữ đồng bộ và không đồng bộ
- 14. Hoạt động đồng bộ và không đồng bộ
- 15. Đồng bộ Vs Không đồng bộ trên iPhone
- 16. Gọi lại không đồng bộ đồng thời
- 17. Là lực đẩy đồng bộ hoặc không đồng bộ?
- 18. $ phát ra $ phát sóng đồng bộ hoặc không đồng bộ?
- 19. Hợp đồng mã và không đồng bộ
- 20. Quảng cáo google không đồng bộ so với Đồng bộ
- 21. Gửi dispatch_apply đồng bộ hoặc không đồng bộ?
- 22. ADO.NET không đồng bộ
- 23. Is - [UITableView reloadData] không đồng bộ hoặc đồng bộ?
- 24. Số lượng ajax đồng bộ, không đồng bộ yêu cầu
- 25. Cuộc gọi ủy nhiệm không đồng bộ về lửa và không đồng bộ trong C#
- 26. Chức năng giết có đồng bộ không?
- 27. C - Malloc và memcpy (quản lý bộ nhớ)
- 28. Làm thế nào để ngăn chặn tràn bộ đệm memcpy?
- 29. XmlReader không đồng bộ trong .NET?
- 30. Đánh giá không đồng bộ trong Mathematica
Nền tảng nào? Đây có phải là x86 không? –
Đây là bộ vi xử lý ARM9, bộ điều khiển vi mô Freescale iMX233. – SunnyShah