mesh-rb 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/ext/mesh/extconf.rb +22 -4
  4. data/ext/mesh/mesh.tar.gz +0 -0
  5. data/lib/mesh/version.rb +1 -1
  6. data/mesh.gemspec +3 -2
  7. metadata +4 -120
  8. data/ext/mesh/mesh/.bazelrc +0 -20
  9. data/ext/mesh/mesh/.bazelversion +0 -1
  10. data/ext/mesh/mesh/.clang-format +0 -15
  11. data/ext/mesh/mesh/.dockerignore +0 -5
  12. data/ext/mesh/mesh/.editorconfig +0 -16
  13. data/ext/mesh/mesh/.gitattributes +0 -4
  14. data/ext/mesh/mesh/.github/workflows/main.yml +0 -144
  15. data/ext/mesh/mesh/.gitignore +0 -51
  16. data/ext/mesh/mesh/AUTHORS +0 -5
  17. data/ext/mesh/mesh/CMakeLists.txt +0 -270
  18. data/ext/mesh/mesh/CODE_OF_CONDUCT.md +0 -77
  19. data/ext/mesh/mesh/Dockerfile +0 -30
  20. data/ext/mesh/mesh/LICENSE +0 -201
  21. data/ext/mesh/mesh/Makefile +0 -81
  22. data/ext/mesh/mesh/README.md +0 -97
  23. data/ext/mesh/mesh/WORKSPACE +0 -50
  24. data/ext/mesh/mesh/bazel +0 -350
  25. data/ext/mesh/mesh/mesh-pldi19-powers.pdf +0 -0
  26. data/ext/mesh/mesh/src/BUILD +0 -222
  27. data/ext/mesh/mesh/src/CMakeLists.txt +0 -85
  28. data/ext/mesh/mesh/src/bitmap.h +0 -590
  29. data/ext/mesh/mesh/src/cheap_heap.h +0 -170
  30. data/ext/mesh/mesh/src/common.h +0 -377
  31. data/ext/mesh/mesh/src/copts.bzl +0 -31
  32. data/ext/mesh/mesh/src/d_assert.cc +0 -75
  33. data/ext/mesh/mesh/src/fixed_array.h +0 -124
  34. data/ext/mesh/mesh/src/global_heap.cc +0 -547
  35. data/ext/mesh/mesh/src/global_heap.h +0 -569
  36. data/ext/mesh/mesh/src/gnu_wrapper.cc +0 -75
  37. data/ext/mesh/mesh/src/internal.h +0 -356
  38. data/ext/mesh/mesh/src/libmesh.cc +0 -239
  39. data/ext/mesh/mesh/src/mac_wrapper.cc +0 -528
  40. data/ext/mesh/mesh/src/measure_rss.cc +0 -44
  41. data/ext/mesh/mesh/src/measure_rss.h +0 -20
  42. data/ext/mesh/mesh/src/meshable_arena.cc +0 -776
  43. data/ext/mesh/mesh/src/meshable_arena.h +0 -309
  44. data/ext/mesh/mesh/src/meshing.h +0 -60
  45. data/ext/mesh/mesh/src/mini_heap.h +0 -532
  46. data/ext/mesh/mesh/src/mmap_heap.h +0 -104
  47. data/ext/mesh/mesh/src/one_way_mmap_heap.h +0 -77
  48. data/ext/mesh/mesh/src/partitioned_heap.h +0 -111
  49. data/ext/mesh/mesh/src/plasma/mesh.h +0 -33
  50. data/ext/mesh/mesh/src/real.cc +0 -52
  51. data/ext/mesh/mesh/src/real.h +0 -36
  52. data/ext/mesh/mesh/src/rng/mwc.h +0 -296
  53. data/ext/mesh/mesh/src/rng/mwc64.h +0 -58
  54. data/ext/mesh/mesh/src/rpl_printf.c +0 -1991
  55. data/ext/mesh/mesh/src/runtime.cc +0 -393
  56. data/ext/mesh/mesh/src/runtime.h +0 -114
  57. data/ext/mesh/mesh/src/shuffle_vector.h +0 -287
  58. data/ext/mesh/mesh/src/size_classes.def +0 -251
  59. data/ext/mesh/mesh/src/static/if.h +0 -36
  60. data/ext/mesh/mesh/src/static/log.h +0 -43
  61. data/ext/mesh/mesh/src/testing/benchmark/local_refill.cc +0 -103
  62. data/ext/mesh/mesh/src/testing/big-alloc.c +0 -28
  63. data/ext/mesh/mesh/src/testing/fragmenter.cc +0 -128
  64. data/ext/mesh/mesh/src/testing/global-large-stress.cc +0 -25
  65. data/ext/mesh/mesh/src/testing/local-alloc.c +0 -16
  66. data/ext/mesh/mesh/src/testing/meshing_benchmark.cc +0 -189
  67. data/ext/mesh/mesh/src/testing/thread.cc +0 -35
  68. data/ext/mesh/mesh/src/testing/unit/alignment.cc +0 -56
  69. data/ext/mesh/mesh/src/testing/unit/bitmap_test.cc +0 -274
  70. data/ext/mesh/mesh/src/testing/unit/concurrent_mesh_test.cc +0 -185
  71. data/ext/mesh/mesh/src/testing/unit/mesh_test.cc +0 -143
  72. data/ext/mesh/mesh/src/testing/unit/rng_test.cc +0 -22
  73. data/ext/mesh/mesh/src/testing/unit/size_class_test.cc +0 -66
  74. data/ext/mesh/mesh/src/testing/unit/triple_mesh_test.cc +0 -285
  75. data/ext/mesh/mesh/src/testing/userfaultfd-kernel-copy.cc +0 -164
  76. data/ext/mesh/mesh/src/thread_local_heap.cc +0 -163
  77. data/ext/mesh/mesh/src/thread_local_heap.h +0 -268
  78. data/ext/mesh/mesh/src/wrapper.cc +0 -433
  79. data/ext/mesh/mesh/support/export_mesh.cmake +0 -28
  80. data/ext/mesh/mesh/support/gen-size-classes +0 -57
  81. data/ext/mesh/mesh/support/install_all_configs +0 -33
  82. data/ext/mesh/mesh/support/remove_export_mesh.cmake +0 -48
  83. data/ext/mesh/mesh/support/update-bazelisk +0 -8
  84. data/ext/mesh/mesh/theory/32m80.png +0 -0
  85. data/ext/mesh/mesh/theory/64m80ind.png +0 -0
  86. data/ext/mesh/mesh/theory/bound_comparison.py +0 -67
  87. data/ext/mesh/mesh/theory/bounds/impdeg+1 +0 -135
  88. data/ext/mesh/mesh/theory/choose.py +0 -43
  89. data/ext/mesh/mesh/theory/common.py +0 -42
  90. data/ext/mesh/mesh/theory/compute_exp_Y.py +0 -134
  91. data/ext/mesh/mesh/theory/createRandomString.py +0 -69
  92. data/ext/mesh/mesh/theory/deg_bound_check.py +0 -100
  93. data/ext/mesh/mesh/theory/degcheck.py +0 -47
  94. data/ext/mesh/mesh/theory/dumps/32,1,80,dumb.txt +0 -81
  95. data/ext/mesh/mesh/theory/dumps/32,2,80,dumb.txt +0 -81
  96. data/ext/mesh/mesh/theory/dumps/32,3,80,dumb.txt +0 -81
  97. data/ext/mesh/mesh/theory/dumps/32,4,80,dumb.txt +0 -81
  98. data/ext/mesh/mesh/theory/dumps/32,5,80,dumb.txt +0 -81
  99. data/ext/mesh/mesh/theory/dumps/32,6,80,dumb.txt +0 -81
  100. data/ext/mesh/mesh/theory/dumps/32,7,80,dumb.txt +0 -81
  101. data/ext/mesh/mesh/theory/dumps/32,8,80,dumb.txt +0 -81
  102. data/ext/mesh/mesh/theory/dumps/32,9,80,dumb.txt +0 -81
  103. data/ext/mesh/mesh/theory/experiment.py +0 -303
  104. data/ext/mesh/mesh/theory/experiment_raw_results/.gitignore +0 -0
  105. data/ext/mesh/mesh/theory/greedy_experiment.py +0 -66
  106. data/ext/mesh/mesh/theory/greedy_experiment_copy.py +0 -46
  107. data/ext/mesh/mesh/theory/greedy_experiment_q.py +0 -75
  108. data/ext/mesh/mesh/theory/makeGraph.py +0 -64
  109. data/ext/mesh/mesh/theory/manyreps.png +0 -0
  110. data/ext/mesh/mesh/theory/manystrings.png +0 -0
  111. data/ext/mesh/mesh/theory/match_vs_color_experiment.py +0 -94
  112. data/ext/mesh/mesh/theory/maxmatch_vs_E[Y].py +0 -162
  113. data/ext/mesh/mesh/theory/maxmatch_vs_greedymatch.py +0 -96
  114. data/ext/mesh/mesh/theory/maxvdeg+1imp++32,80.png +0 -0
  115. data/ext/mesh/mesh/theory/mesh_util.py +0 -322
  116. data/ext/mesh/mesh/theory/meshers.py +0 -452
  117. data/ext/mesh/mesh/theory/meshingBenchmark.py +0 -96
  118. data/ext/mesh/mesh/theory/occupancyComparison.py +0 -133
  119. data/ext/mesh/mesh/theory/randmatch_vs_greedymatch.py +0 -97
  120. data/ext/mesh/mesh/theory/randmatch_vs_greedymatch_q.py +0 -103
  121. data/ext/mesh/mesh/theory/randmatch_vs_greedymatch_time.py +0 -117
  122. data/ext/mesh/mesh/theory/read_mesh_dump.py +0 -82
  123. data/ext/mesh/mesh/theory/test.py +0 -70
  124. data/ext/mesh/mesh/tools/bazel +0 -1
@@ -1,287 +0,0 @@
1
- // -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil -*-
2
- // Copyright 2019 The Mesh Authors. All rights reserved.
3
- // Use of this source code is governed by the Apache License,
4
- // Version 2.0, that can be found in the LICENSE file.
5
-
6
- #pragma once
7
- #ifndef MESH_SHUFFLE_VECTOR_H
8
- #define MESH_SHUFFLE_VECTOR_H
9
-
10
- #include <iterator>
11
- #include <random>
12
- #include <utility>
13
-
14
- #include "rng/mwc.h"
15
-
16
- #include "internal.h"
17
-
18
- #include "mini_heap.h"
19
-
20
- using mesh::debug;
21
-
22
- namespace mesh {
23
-
24
- namespace sv {
25
- class Entry {
26
- public:
27
- Entry() noexcept : _mhOffset{0}, _bitOffset{0} {
28
- }
29
-
30
- explicit Entry(uint8_t mhOff, uint8_t bitOff) : _mhOffset{mhOff}, _bitOffset{bitOff} {
31
- }
32
-
33
- Entry(const Entry &rhs) = default;
34
-
35
- constexpr Entry(Entry &&rhs) = default;
36
-
37
- Entry &operator=(const Entry &rhs) = default;
38
-
39
- bool operator==(const Entry &rhs) const {
40
- return _mhOffset == rhs._mhOffset && _bitOffset == rhs._bitOffset;
41
- }
42
-
43
- inline uint8_t ATTRIBUTE_ALWAYS_INLINE miniheapOffset() const {
44
- return _mhOffset;
45
- }
46
-
47
- inline uint8_t ATTRIBUTE_ALWAYS_INLINE bit() const {
48
- return _bitOffset;
49
- }
50
-
51
- private:
52
- uint8_t _mhOffset;
53
- uint8_t _bitOffset;
54
- };
55
- static_assert(sizeof(Entry) == 2, "Entry too big!");
56
- } // namespace sv
57
-
58
- class ShuffleVector {
59
- private:
60
- DISALLOW_COPY_AND_ASSIGN(ShuffleVector);
61
-
62
- public:
63
- ShuffleVector() : _prng(internal::seed(), internal::seed()) {
64
- // set initialized = false;
65
- }
66
-
67
- ~ShuffleVector() {
68
- d_assert(_attachedMiniheaps.size() == 0);
69
- }
70
-
71
- // post: list has the index of all bits set to 1 in it, in a random order
72
- inline uint32_t ATTRIBUTE_ALWAYS_INLINE refillFrom(uint8_t mhOffset, internal::Bitmap &bitmap) {
73
- d_assert(_maxCount > 0);
74
- d_assert_msg(_maxCount <= kMaxShuffleVectorLength, "objCount? %zu <= %zu", _maxCount, kMaxShuffleVectorLength);
75
-
76
- if (isFull()) {
77
- return 0;
78
- }
79
-
80
- // d_assert(_maxCount == _attachedMiniheap->maxCount());
81
-
82
- internal::RelaxedFixedBitmap newBitmap{static_cast<uint32_t>(_maxCount)};
83
- newBitmap.setAll(_maxCount);
84
-
85
- internal::RelaxedFixedBitmap localBits{static_cast<uint32_t>(_maxCount)};
86
- bitmap.setAndExchangeAll(localBits.mut_bits(), newBitmap.bits());
87
- localBits.invert();
88
-
89
- uint32_t allocCount = 0;
90
-
91
- const uint32_t maxCount = static_cast<uint32_t>(_maxCount);
92
- for (auto const &i : localBits) {
93
- // FIXME: this incredibly lurky conditional is because
94
- // RelaxedFixedBitmap iterates over all 256 bits it has,
95
- // regardless of the _maxCount set in the constructor -- we
96
- // should fix that.
97
- if (i >= maxCount) {
98
- break;
99
- }
100
-
101
- if (unlikely(isFull())) {
102
- // TODO: we don't have any more space in our shuffle vector
103
- // for these bits we've pulled out of the MiniHeap's bitmap,
104
- // so we need to set them as free again. we should measure
105
- // how often this happens, as its gonna be slow
106
- refillFullSlowpath(bitmap, i);
107
- } else {
108
- _off--;
109
- d_assert(_off >= 0);
110
- d_assert(_off < _maxCount);
111
- _list[_off] = sv::Entry{mhOffset, static_cast<uint8_t>(i)};
112
- allocCount++;
113
- }
114
- }
115
-
116
- return allocCount;
117
- }
118
-
119
- void ATTRIBUTE_NEVER_INLINE refillFullSlowpath(internal::Bitmap &bitmap, size_t i) {
120
- bitmap.unset(i);
121
- }
122
-
123
- FixedArray<MiniHeap, kMaxMiniheapsPerShuffleVector> &miniheaps() {
124
- return _attachedMiniheaps;
125
- }
126
-
127
- void refillMiniheaps() {
128
- while (_off < _maxCount) {
129
- const auto entry = pop();
130
- _attachedMiniheaps[entry.miniheapOffset()]->freeOff(entry.bit());
131
- }
132
- }
133
-
134
- inline bool isFull() const {
135
- return _off <= 0;
136
- }
137
-
138
- inline bool isExhausted() const {
139
- return _off >= _maxCount;
140
- }
141
-
142
- inline size_t maxCount() const {
143
- return _maxCount;
144
- }
145
-
146
- inline bool ATTRIBUTE_ALWAYS_INLINE localRefill() {
147
- uint32_t addedCapacity = 0;
148
- const auto miniheapCount = _attachedMiniheaps.size();
149
- for (uint32_t i = 0; i < miniheapCount && !isFull(); i++, _attachedOff++) {
150
- if (_attachedOff >= miniheapCount) {
151
- _attachedOff = 0;
152
- }
153
-
154
- auto mh = _attachedMiniheaps[_attachedOff];
155
- if (mh->isFull()) {
156
- continue;
157
- }
158
-
159
- const auto allocCount = refillFrom(_attachedOff, mh->writableBitmap());
160
- addedCapacity |= allocCount;
161
- }
162
-
163
- if (addedCapacity > 0) {
164
- if (kEnableShuffleOnInit) {
165
- internal::mwcShuffle(&_list[_off], &_list[_maxCount], _prng);
166
- }
167
- return true;
168
- }
169
-
170
- return false;
171
- }
172
-
173
- // number of items in the list
174
- inline uint32_t ATTRIBUTE_ALWAYS_INLINE length() const {
175
- return _maxCount - _off;
176
- }
177
-
178
- // Pushing an element onto the freelist does a round of the
179
- // Fisher-Yates shuffle if randomization level is >= 2.
180
- inline void ATTRIBUTE_ALWAYS_INLINE push(sv::Entry entry) {
181
- d_assert(_off > 0); // we must have at least 1 free space in the list
182
-
183
- _off--;
184
- _list[_off] = entry;
185
-
186
- if (kEnableShuffleOnFree) {
187
- size_t swapOff = _prng.inRange(_off, maxCount() - 1);
188
- std::swap(_list[_off], _list[swapOff]);
189
- }
190
- }
191
-
192
- inline sv::Entry ATTRIBUTE_ALWAYS_INLINE pop() {
193
- d_assert(_off >= 0);
194
- d_assert(_off < _maxCount);
195
-
196
- auto val = _list[_off];
197
- _off++;
198
-
199
- return val;
200
- }
201
-
202
- inline void ATTRIBUTE_ALWAYS_INLINE free(MiniHeap *mh, void *ptr) {
203
- // const auto ptrval = reinterpret_cast<uintptr_t>(ptr);
204
- // const size_t off = (ptrval - _start) / _objectSize;
205
- // const size_t off = (ptrval - _start) * _objectSizeReciprocal;
206
- const size_t off = mh->getUnmeshedOff(reinterpret_cast<const void *>(_arenaBegin), ptr);
207
- // hard_assert_msg(off == off2, "%zu != %zu", off, off2);
208
-
209
- d_assert(off < 256);
210
-
211
- if (likely(_off > 0)) {
212
- push(sv::Entry{mh->svOffset(), static_cast<uint8_t>(off)});
213
- } else {
214
- freeFullSlowpath(mh, off);
215
- }
216
- }
217
-
218
- void ATTRIBUTE_NEVER_INLINE freeFullSlowpath(MiniHeap *mh, size_t off) {
219
- mh->freeOff(off);
220
- }
221
-
222
- // an attach takes ownership of the reference to mh
223
- inline void reinit() {
224
- _off = _maxCount;
225
- _attachedOff = 0;
226
-
227
- internal::mwcShuffle(_attachedMiniheaps.array_begin(), _attachedMiniheaps.array_end(), _prng);
228
-
229
- for (size_t i = 0; i < _attachedMiniheaps.size(); i++) {
230
- const auto mh = _attachedMiniheaps[i];
231
- _start[i] = mh->getSpanStart(_arenaBegin);
232
- mh->setSvOffset(i);
233
- d_assert(mh->isAttached());
234
- }
235
-
236
- const bool addedCapacity = localRefill();
237
- d_assert(addedCapacity);
238
- }
239
-
240
- inline void *ATTRIBUTE_ALWAYS_INLINE ptrFromOffset(sv::Entry off) const {
241
- d_assert(off.miniheapOffset() < _attachedMiniheaps.size());
242
- return reinterpret_cast<void *>(_start[off.miniheapOffset()] + off.bit() * _objectSize);
243
- }
244
-
245
- inline void *ATTRIBUTE_ALWAYS_INLINE malloc() {
246
- d_assert(!isExhausted());
247
- const auto off = pop();
248
- return ptrFromOffset(off);
249
- }
250
-
251
- inline size_t getSize() {
252
- return _objectSize;
253
- }
254
-
255
- // called once, on initialization of ThreadLocalHeap
256
- inline void initialInit(const char *arenaBegin, uint32_t sz) {
257
- _arenaBegin = arenaBegin;
258
- _objectSize = sz;
259
- _objectSizeReciprocal = 1.0 / (float)sz;
260
- _maxCount = max(kPageSize / sz, kMinStringLen);
261
- // initially, we are unattached and therefor have no capacity.
262
- // Setting _off to _maxCount causes isExhausted() to return true
263
- // so that we don't separately have to check !isAttached() in the
264
- // malloc fastpath.
265
- _off = _maxCount;
266
- }
267
-
268
- private:
269
- uintptr_t _start[kMaxMiniheapsPerShuffleVector]; // 32 32
270
- const char *_arenaBegin; // 8 40
271
- int16_t _maxCount{0}; // 2 42
272
- int16_t _off{0}; // 2 44
273
- uint32_t _objectSize{0}; // 4 48
274
- FixedArray<MiniHeap, kMaxMiniheapsPerShuffleVector> _attachedMiniheaps{}; // 36 128
275
- MWC _prng; // 36 84
276
- float _objectSizeReciprocal{0.0}; // 4 88
277
- uint32_t _attachedOff{0}; //
278
- sv::Entry _list[kMaxShuffleVectorLength] CACHELINE_ALIGNED; // 512 640
279
- };
280
-
281
- static_assert(HL::gcd<sizeof(ShuffleVector), CACHELINE_SIZE>::value == CACHELINE_SIZE,
282
- "ShuffleVector not multiple of cacheline size!");
283
- // FIXME should fit in 640
284
- // static_assert(sizeof(ShuffleVector) == 704, "ShuffleVector not expected size!");
285
- } // namespace mesh
286
-
287
- #endif // MESH_SHUFFLE_VECTOR_H
@@ -1,251 +0,0 @@
1
- // small size classes
2
- 1, // 0 -> 16
3
- 1, // 8 -> 16
4
- 1, // 16 -> 16
5
- 2, // 24 -> 32
6
- 2, // 32 -> 32
7
- 3, // 40 -> 48
8
- 3, // 48 -> 48
9
- 4, // 56 -> 64
10
- 4, // 64 -> 64
11
- 5, // 72 -> 80
12
- 5, // 80 -> 80
13
- 6, // 88 -> 96
14
- 6, // 96 -> 96
15
- 7, // 104 -> 112
16
- 7, // 112 -> 112
17
- 8, // 120 -> 128
18
- 8, // 128 -> 128
19
- 9, // 136 -> 160
20
- 9, // 144 -> 160
21
- 9, // 152 -> 160
22
- 9, // 160 -> 160
23
- 10, // 168 -> 192
24
- 10, // 176 -> 192
25
- 10, // 184 -> 192
26
- 10, // 192 -> 192
27
- 11, // 200 -> 224
28
- 11, // 208 -> 224
29
- 11, // 216 -> 224
30
- 11, // 224 -> 224
31
- 12, // 232 -> 256
32
- 12, // 240 -> 256
33
- 12, // 248 -> 256
34
- 12, // 256 -> 256
35
- 13, // 264 -> 320
36
- 13, // 272 -> 320
37
- 13, // 280 -> 320
38
- 13, // 288 -> 320
39
- 13, // 296 -> 320
40
- 13, // 304 -> 320
41
- 13, // 312 -> 320
42
- 13, // 320 -> 320
43
- 14, // 328 -> 384
44
- 14, // 336 -> 384
45
- 14, // 344 -> 384
46
- 14, // 352 -> 384
47
- 14, // 360 -> 384
48
- 14, // 368 -> 384
49
- 14, // 376 -> 384
50
- 14, // 384 -> 384
51
- 15, // 392 -> 448
52
- 15, // 400 -> 448
53
- 15, // 408 -> 448
54
- 15, // 416 -> 448
55
- 15, // 424 -> 448
56
- 15, // 432 -> 448
57
- 15, // 440 -> 448
58
- 15, // 448 -> 448
59
- 16, // 456 -> 512
60
- 16, // 464 -> 512
61
- 16, // 472 -> 512
62
- 16, // 480 -> 512
63
- 16, // 488 -> 512
64
- 16, // 496 -> 512
65
- 16, // 504 -> 512
66
- 16, // 512 -> 512
67
- 17, // 520 -> 640
68
- 17, // 528 -> 640
69
- 17, // 536 -> 640
70
- 17, // 544 -> 640
71
- 17, // 552 -> 640
72
- 17, // 560 -> 640
73
- 17, // 568 -> 640
74
- 17, // 576 -> 640
75
- 17, // 584 -> 640
76
- 17, // 592 -> 640
77
- 17, // 600 -> 640
78
- 17, // 608 -> 640
79
- 17, // 616 -> 640
80
- 17, // 624 -> 640
81
- 17, // 632 -> 640
82
- 17, // 640 -> 640
83
- 18, // 648 -> 768
84
- 18, // 656 -> 768
85
- 18, // 664 -> 768
86
- 18, // 672 -> 768
87
- 18, // 680 -> 768
88
- 18, // 688 -> 768
89
- 18, // 696 -> 768
90
- 18, // 704 -> 768
91
- 18, // 712 -> 768
92
- 18, // 720 -> 768
93
- 18, // 728 -> 768
94
- 18, // 736 -> 768
95
- 18, // 744 -> 768
96
- 18, // 752 -> 768
97
- 18, // 760 -> 768
98
- 18, // 768 -> 768
99
- 19, // 776 -> 896
100
- 19, // 784 -> 896
101
- 19, // 792 -> 896
102
- 19, // 800 -> 896
103
- 19, // 808 -> 896
104
- 19, // 816 -> 896
105
- 19, // 824 -> 896
106
- 19, // 832 -> 896
107
- 19, // 840 -> 896
108
- 19, // 848 -> 896
109
- 19, // 856 -> 896
110
- 19, // 864 -> 896
111
- 19, // 872 -> 896
112
- 19, // 880 -> 896
113
- 19, // 888 -> 896
114
- 19, // 896 -> 896
115
- 20, // 904 -> 1024
116
- 20, // 912 -> 1024
117
- 20, // 920 -> 1024
118
- 20, // 928 -> 1024
119
- 20, // 936 -> 1024
120
- 20, // 944 -> 1024
121
- 20, // 952 -> 1024
122
- 20, // 960 -> 1024
123
- 20, // 968 -> 1024
124
- 20, // 976 -> 1024
125
- 20, // 984 -> 1024
126
- 20, // 992 -> 1024
127
- 20, // 1000 -> 1024
128
- 20, // 1008 -> 1024
129
- 20, // 1016 -> 1024
130
- 20, // 1024 -> 1024
131
- // large size classes
132
- 21, // 1152 -> 2048
133
- 21, // 1280 -> 2048
134
- 21, // 1408 -> 2048
135
- 21, // 1536 -> 2048
136
- 21, // 1664 -> 2048
137
- 21, // 1792 -> 2048
138
- 21, // 1920 -> 2048
139
- 21, // 2048 -> 2048
140
- 22, // 2176 -> 4096
141
- 22, // 2304 -> 4096
142
- 22, // 2432 -> 4096
143
- 22, // 2560 -> 4096
144
- 22, // 2688 -> 4096
145
- 22, // 2816 -> 4096
146
- 22, // 2944 -> 4096
147
- 22, // 3072 -> 4096
148
- 22, // 3200 -> 4096
149
- 22, // 3328 -> 4096
150
- 22, // 3456 -> 4096
151
- 22, // 3584 -> 4096
152
- 22, // 3712 -> 4096
153
- 22, // 3840 -> 4096
154
- 22, // 3968 -> 4096
155
- 22, // 4096 -> 4096
156
- 23, // 4224 -> 8192
157
- 23, // 4352 -> 8192
158
- 23, // 4480 -> 8192
159
- 23, // 4608 -> 8192
160
- 23, // 4736 -> 8192
161
- 23, // 4864 -> 8192
162
- 23, // 4992 -> 8192
163
- 23, // 5120 -> 8192
164
- 23, // 5248 -> 8192
165
- 23, // 5376 -> 8192
166
- 23, // 5504 -> 8192
167
- 23, // 5632 -> 8192
168
- 23, // 5760 -> 8192
169
- 23, // 5888 -> 8192
170
- 23, // 6016 -> 8192
171
- 23, // 6144 -> 8192
172
- 23, // 6272 -> 8192
173
- 23, // 6400 -> 8192
174
- 23, // 6528 -> 8192
175
- 23, // 6656 -> 8192
176
- 23, // 6784 -> 8192
177
- 23, // 6912 -> 8192
178
- 23, // 7040 -> 8192
179
- 23, // 7168 -> 8192
180
- 23, // 7296 -> 8192
181
- 23, // 7424 -> 8192
182
- 23, // 7552 -> 8192
183
- 23, // 7680 -> 8192
184
- 23, // 7808 -> 8192
185
- 23, // 7936 -> 8192
186
- 23, // 8064 -> 8192
187
- 23, // 8192 -> 8192
188
- 24, // 8320 -> 16384
189
- 24, // 8448 -> 16384
190
- 24, // 8576 -> 16384
191
- 24, // 8704 -> 16384
192
- 24, // 8832 -> 16384
193
- 24, // 8960 -> 16384
194
- 24, // 9088 -> 16384
195
- 24, // 9216 -> 16384
196
- 24, // 9344 -> 16384
197
- 24, // 9472 -> 16384
198
- 24, // 9600 -> 16384
199
- 24, // 9728 -> 16384
200
- 24, // 9856 -> 16384
201
- 24, // 9984 -> 16384
202
- 24, // 10112 -> 16384
203
- 24, // 10240 -> 16384
204
- 24, // 10368 -> 16384
205
- 24, // 10496 -> 16384
206
- 24, // 10624 -> 16384
207
- 24, // 10752 -> 16384
208
- 24, // 10880 -> 16384
209
- 24, // 11008 -> 16384
210
- 24, // 11136 -> 16384
211
- 24, // 11264 -> 16384
212
- 24, // 11392 -> 16384
213
- 24, // 11520 -> 16384
214
- 24, // 11648 -> 16384
215
- 24, // 11776 -> 16384
216
- 24, // 11904 -> 16384
217
- 24, // 12032 -> 16384
218
- 24, // 12160 -> 16384
219
- 24, // 12288 -> 16384
220
- 24, // 12416 -> 16384
221
- 24, // 12544 -> 16384
222
- 24, // 12672 -> 16384
223
- 24, // 12800 -> 16384
224
- 24, // 12928 -> 16384
225
- 24, // 13056 -> 16384
226
- 24, // 13184 -> 16384
227
- 24, // 13312 -> 16384
228
- 24, // 13440 -> 16384
229
- 24, // 13568 -> 16384
230
- 24, // 13696 -> 16384
231
- 24, // 13824 -> 16384
232
- 24, // 13952 -> 16384
233
- 24, // 14080 -> 16384
234
- 24, // 14208 -> 16384
235
- 24, // 14336 -> 16384
236
- 24, // 14464 -> 16384
237
- 24, // 14592 -> 16384
238
- 24, // 14720 -> 16384
239
- 24, // 14848 -> 16384
240
- 24, // 14976 -> 16384
241
- 24, // 15104 -> 16384
242
- 24, // 15232 -> 16384
243
- 24, // 15360 -> 16384
244
- 24, // 15488 -> 16384
245
- 24, // 15616 -> 16384
246
- 24, // 15744 -> 16384
247
- 24, // 15872 -> 16384
248
- 24, // 16000 -> 16384
249
- 24, // 16128 -> 16384
250
- 24, // 16256 -> 16384
251
- 24, // 16384 -> 16384