Nén thích ứng CPU


10

Giả sử tôi cần gửi một số dữ liệu từ máy tính này sang máy tính khác, qua mạng khá nhanh ... ví dụ: kết nối 100Mbit tiêu chuẩn (~ 10MB / s). Ổ đĩa của tôi là ổ cứng chuẩn, vì vậy tốc độ của chúng nằm trong khoảng từ 30MB / s đến 100MB / s. Vì vậy, tôi đoán rằng việc nén dữ liệu khi đang bay có thể giúp ích.

Nhưng ... tôi không muốn bị giới hạn bởi CPU. Nếu tôi chọn một thuật toán chuyên sâu về CPU, quá trình chuyển sẽ thực sự chậm hơn so với việc không nén.

Điều này rất khó với các máy nén như GZIP và BZIP2 vì bạn thường đặt cường độ nén một lần cho toàn bộ quá trình truyền và luồng dữ liệu của tôi đôi khi rất dễ, đôi khi khó nén - điều này làm cho quá trình không tối ưu vì đôi khi tôi không sử dụng CPU đầy đủ, và đôi khi băng thông không được sử dụng đúng mức.

Có một chương trình nén nào thích ứng với CPU / băng thông hiện tại và đạt được điểm tốt để việc truyền tải sẽ tối ưu? Lý tưởng cho Linux, nhưng tôi vẫn tò mò về tất cả các giải pháp. Tôi muốn thấy một cái gì đó tương thích với bộ giải nén GZIP / BZIP2, nhưng điều này là không cần thiết.

Vì vậy, tôi muốn tối ưu hóa tổng thời gian truyền, không chỉ đơn giản là lượng byte cần gửi.

Ngoài ra tôi không cần giải nén thời gian thực ... nén thời gian thực là đủ. Máy chủ đích có thể xử lý dữ liệu sau này trong thời gian rảnh rỗi. Tôi biết điều này không thay đổi nhiều (nén thường tốn nhiều CPU hơn giải nén), nhưng nếu có một giải pháp có thể sử dụng thực tế này, thì tốt hơn hết.

Mỗi lần tôi chuyển dữ liệu khác nhau và tôi thực sự muốn thực hiện các lần chuyển một lần này càng nhanh càng tốt. Vì vậy, tôi sẽ không được hưởng lợi từ việc chuyển nhiều lần nhanh hơn do nén mạnh hơn.

Cảm ơn,


1
+1 ý tưởng thú vị và có khả năng hữu ích. Nếu bạn từng tìm thấy một số cách tốt để làm điều này, tôi muốn nghe về nó.
David Cary

Câu trả lời:


3

Đây là một chủ đề nghiên cứu hiện tại - chủ yếu trong lĩnh vực mạng cảm biến, mục tiêu là giảm thiểu việc sử dụng năng lượng, thay vì tối đa hóa thông lượng. Nguyên tắc nén thích ứng là như nhau tuy nhiên.

Đây là một bài báo gần đây từ một giáo sư tại USC .

Có lẽ bạn có thể đi thực hiện thuật toán của mình? Tôi chắc chắn sẽ có nhiều người quan tâm đến việc thực hiện tốt.


Tôi rất thích, nếu tôi có thể ... những hạn chế thời gian thông thường của con người áp dụng ở đây. Tôi vẫn có thể là người đầu tiên kiểm tra nó ;-) Cảm ơn bạn đã liên kết đến các bài báo, tôi có thể cố gắng tìm những người khác có thể quan tâm.
liori

2

Hum, câu hỏi này cũ hơn một năm nay, vì vậy điều này có thể vượt qua không được chú ý:

Dù sao, Google gần đây đã xuất bản Snappy có thể chính xác là những gì bạn đang tìm kiếm, cụ thể là:

[...] Nó không nhằm mục đích nén tối đa hoặc tương thích với bất kỳ thư viện nén nào khác; thay vào đó, nó nhắm đến tốc độ rất cao và nén hợp lý. Chẳng hạn, so với chế độ nhanh nhất của zlib, Snappy là một thứ tự cường độ nhanh hơn cho hầu hết các đầu vào, nhưng các tệp nén kết quả là lớn hơn từ 20% đến 100% [...]

Nó được triển khai trong C ++ với các ràng buộc có sẵn cho C và một loạt các ngôn ngữ khác.


Ồ, không, nó sẽ không được chú ý, ít nhất là bởi tôi ;-) Và dường như nó không thích nghi theo nghĩa tôi tìm kiếm - nó chỉ nhanh thôi.
liori
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.