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ố j
củ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.