đóng gói bit và nén các cấu trúc dữ liệu trong điện toán khoa học


8

Gần đây tôi đã xem qua bài báo này , trong đó mô tả một kế hoạch tiết kiệm bộ nhớ trong việc biểu diễn các ma trận thưa thớt. Một số nguyên 32 bit có thể lưu trữ số lượng lên tới ~ 4 tỷ. Nhưng khi bạn giải quyết một PDE, bạn đã đi song song và phân vùng vấn đề từ lâu trước khi số lượng ẩn số lên tới gần 4 tỷ. Ý tưởng của họ là sắp xếp lại ma trận cho băng thông nhỏ. Thay vì lưu trữ các chỉ số jcủa tất cả các cột khác không trong một hàng nhất định i, chúng lưu trữ phần bù j - i, có xu hướng nhỏ về độ lớn nhờ vào sự sắp xếp lại. Các offset sau đó có thể được lưu trữ bằng cách sử dụng ít bit hơn số nguyên 32 bit. Có nhiều số học hơn để làm khi lặp qua các mục nhập khác không của ma trận, nhưng việc tiết kiệm trong bộ nhớ cache ít hơn sẽ bỏ lỡ nhiều hơn là bù cho nó. Trong bài báo nàyhọ đã xem xét cụ thể việc sử dụng các chỉ mục 16 bit theo định dạng ma trận phân cấp, nhưng cuối cùng thì đó cũng là một ý tưởng tương tự. Ngoài ra còn có thư viện zfp , nhiều hơn để nén dữ liệu dấu phẩy động.

Vì "flops là miễn phí" bây giờ và nút cổ chai là truy cập bộ nhớ, các loại thủ thuật này dường như thực sự hứa hẹn để sử dụng bộ đệm CPU tốt hơn.

Tôi đã truy quét hầu hết các tác phẩm được trích dẫn / trích dẫn của hai bài báo này. Tôi đang tìm kiếm bất kỳ tài liệu tham khảo nào khác về hiệu quả của việc đóng gói bit, cho phép nhân vectơ ma trận thưa thớt và cho bất kỳ vấn đề nào khác trong khoa học tính toán . Ví dụ, tôi tưởng tượng bạn có thể thiết kế các cấu trúc dữ liệu hiệu quả hơn nhiều cho các biểu đồ hoặc cho các lưới không có cấu trúc sử dụng ý tưởng này.

Câu trả lời:


7

Giảm bộ nhớ cho ma trận thưa thớt

n×nn23×3

Một mô tả đầy đủ hơn về định dạng có thể được tìm thấy ở đây: http://www.netlib.org/utk/people/JackDongarra/etemsheet/node375.html

Ngoài ra, việc lưu trữ các khối dày đặc trong ma trận thưa thớt cho phép bạn vectơ phép nhân vectơ ma trận bằng các hướng dẫn SSE hoặc AVX, nhưng có lẽ bạn sẽ không thấy tốc độ lớn ở đây vì như bạn đã lưu ý, bạn vẫn sẽ bị giới hạn bộ nhớ .

n

https: //bebop.cs.ber siêu.edu / pub / vucuc2005-ubcsr-split.pdf

Tất nhiên, không có gì ngăn bạn chơi các trò chơi đóng gói bit với ma trận BCSR được sắp xếp lại để giảm thêm yêu cầu bộ nhớ, nhưng trước tiên bạn có thể nên chọn trái cây treo thấp.

Bit-nói chung

Nếu bạn đặc biệt quan tâm đến các ứng dụng đóng gói bit, việc này được thực hiện mạnh mẽ trong dự án LLVM. Một trong những ý tưởng (thông minh?) Của nó là sử dụng cái mà họ gọi là PulumIntPair, nơi lưu trữ một con trỏ và một số nguyên nhỏ trong không gian của một con trỏ. Ý tưởng ở đây là tận dụng thực tế là (trên các hệ thống linux x64), các con trỏ được trả về bởi malloc được căn chỉnh 16 byte, cung cấp cho bạn 4 bit ở phía dưới để làm gì đó. Họ làm tất cả những thứ điên rồ bằng cách sử dụng ý tưởng này, xây dựng các cấu trúc dữ liệu phức tạp sống trong không gian của một con trỏ. Đây là một cuộc hội thảo thú vị được đưa ra vài năm trước bởi một trong những người tối ưu hóa LLVM. Anh ấy bắt đầu nói về điều này lúc 22:00. Mặc dù vậy, cảnh báo công bằng: đây là tại một hội nghị C ++, vì vậy có một lượng lớn C ++ phức tạp không đáng có liên quan.

https://www.youtube.com/watch?v=vElZc6zSIXM&t=22m&ab_channel=CppCon

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.