49 auto unshifted = polynomials.get_unshifted();
50 auto all_labels = polynomials.get_labels();
54 size_t alloc_size = 0;
55 size_t virtual_size = 0;
57 size_t fit_4bytes = 0;
58 size_t fit_8bytes = 0;
59 size_t fit_16bytes = 0;
60 size_t fit_32bytes = 0;
61 size_t actual_mem = 0;
62 double compressed_mem = 0;
67 totals.name =
"TOTAL";
70 for (
auto& poly : unshifted) {
72 stats.name = (idx < all_labels.size()) ? all_labels[idx] :
"unknown_" +
std::to_string(idx);
75 if (poly.is_empty()) {
76 all_stats.push_back(stats);
80 stats.alloc_size = poly.size();
81 stats.virtual_size = poly.virtual_size();
82 stats.actual_mem = stats.alloc_size *
sizeof(
Fr);
85 for (
size_t i = 0; i < stats.alloc_size; ++i) {
88 if (elem.
data[0] == 0 && elem.
data[1] == 0 && elem.
data[2] == 0 && elem.
data[3] == 0) {
96 if (bytes_needed <= 4) {
98 stats.compressed_mem += 4;
99 }
else if (bytes_needed <= 8) {
101 stats.compressed_mem += 8;
102 }
else if (bytes_needed <= 16) {
104 stats.compressed_mem += 16;
107 stats.compressed_mem += 32;
112 totals.alloc_size += stats.alloc_size;
113 totals.virtual_size += stats.virtual_size;
114 totals.num_zeros += stats.num_zeros;
115 totals.fit_4bytes += stats.fit_4bytes;
116 totals.fit_8bytes += stats.fit_8bytes;
117 totals.fit_16bytes += stats.fit_16bytes;
118 totals.fit_32bytes += stats.fit_32bytes;
119 totals.actual_mem += stats.actual_mem;
120 totals.compressed_mem += stats.compressed_mem;
122 all_stats.push_back(stats);
126 auto mb = [](
auto bytes) {
return static_cast<double>(bytes) / (1024.0 * 1024.0); };
128 std::ostringstream oss;
129 oss <<
"\n=== Polynomial Memory Analysis ===\n";
130 oss << std::left <<
std::setw(36) <<
"Polynomial"
131 <<
" | " << std::right <<
std::setw(10) <<
"AllocSize"
140 oss << std::string(140,
'-') <<
"\n";
142 auto print_row = [&](
const PolyStats& s) {
143 if (s.alloc_size == 0 && s.name !=
"TOTAL") {
146 oss << std::left <<
std::setw(36) << s.name <<
" | " << std::right <<
std::setw(10) << s.alloc_size <<
" | "
148 << s.fit_8bytes <<
" | " <<
std::setw(10) << s.fit_16bytes <<
" | " <<
std::setw(10) << s.fit_32bytes
153 for (
const auto& s : all_stats) {
156 oss << std::string(140,
'-') <<
"\n";
160 totals.actual_mem > 0 ? 100.0 * (1.0 - totals.compressed_mem /
static_cast<double>(totals.actual_mem)) : 0.0;