diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-02-25 16:29:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-02-25 16:29:08 +0000 |
commit | 830902094e2c13e5e2b511266cd41c905898feda (patch) | |
tree | 227f2519c97927a3d169a113bbf5070c5ee95ca6 /vespalib | |
parent | 0cd172e2126c52774ad60310a6dd1441b4752891 (diff) |
Add method the considers elemsize when computing number of elements that will maximize 2^N bytes block
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/tests/alloc/alloc_test.cpp | 15 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/alloc.h | 6 |
2 files changed, 21 insertions, 0 deletions
diff --git a/vespalib/src/tests/alloc/alloc_test.cpp b/vespalib/src/tests/alloc/alloc_test.cpp index c52170fc8ec..d37abb15c2f 100644 --- a/vespalib/src/tests/alloc/alloc_test.cpp +++ b/vespalib/src/tests/alloc/alloc_test.cpp @@ -47,6 +47,21 @@ TEST("test roundUp2inN") { EXPECT_EQUAL(16u, roundUp2inN(9)); } +TEST("test roundUp2inN elems") { + EXPECT_EQUAL(0u, roundUp2inN(0, 17)); + EXPECT_EQUAL(1u, roundUp2inN(1, 17)); + EXPECT_EQUAL(3u, roundUp2inN(2, 17)); + EXPECT_EQUAL(3u, roundUp2inN(3, 17)); + EXPECT_EQUAL(7u, roundUp2inN(4, 17)); + EXPECT_EQUAL(7u, roundUp2inN(5, 17)); + EXPECT_EQUAL(7u, roundUp2inN(6, 17)); + EXPECT_EQUAL(7u, roundUp2inN(7, 17)); + EXPECT_EQUAL(15u, roundUp2inN(8, 17)); + EXPECT_EQUAL(15u, roundUp2inN(9, 17)); + EXPECT_EQUAL(15u, roundUp2inN(15, 17)); + EXPECT_EQUAL(30u, roundUp2inN(16, 17)); +} + TEST("test basics") { { Alloc h = Alloc::allocHeap(100); diff --git a/vespalib/src/vespa/vespalib/util/alloc.h b/vespalib/src/vespa/vespalib/util/alloc.h index 71a3bd2407a..a1bb6af6514 100644 --- a/vespalib/src/vespa/vespalib/util/alloc.h +++ b/vespalib/src/vespa/vespalib/util/alloc.h @@ -80,8 +80,14 @@ private: namespace vespalib { +/// Rounds up to the closest number that is a power of 2 inline size_t roundUp2inN(size_t minimum) { return 2ul << Optimized::msbIdx(minimum - 1); } +/// Rounds minElems up to the closest number where minElems*elemSize is a power of 2 +inline size_t roundUp2inN(size_t minElems, size_t elemSize) { + return roundUp2inN(minElems * elemSize)/elemSize; +} + } |