allocator fun
parent
bc25144476
commit
7a8573270a
2
libs/BLT
2
libs/BLT
|
@ -1 +1 @@
|
||||||
Subproject commit be4a61cc8040ffc1f86bd582a7de5d67397cdb16
|
Subproject commit 06892a3418b8340701a57393e725dc5379305897
|
|
@ -98,20 +98,21 @@ namespace fb
|
||||||
|
|
||||||
std::array<blt::i32, static_cast<int>(type_t::END)> arg_c = {2, 2, 2, 2, 0};
|
std::array<blt::i32, static_cast<int>(type_t::END)> arg_c = {2, 2, 2, 2, 0};
|
||||||
|
|
||||||
|
template<typename ALLOC>
|
||||||
class tree1
|
class tree1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
blt::bump_allocator<true> alloc{sizeof(node_t) * 8192};
|
ALLOC alloc{sizeof(node_t) * 8192};
|
||||||
private:
|
private:
|
||||||
struct node_t
|
struct node_t
|
||||||
{
|
{
|
||||||
blt::bump_allocator<true>& alloc;
|
ALLOC& alloc;
|
||||||
std::array<node_t*, 2> children{nullptr};
|
std::array<node_t*, 2> children{nullptr};
|
||||||
double value = 0;
|
double value = 0;
|
||||||
blt::i32 argc;
|
blt::i32 argc;
|
||||||
type_t type;
|
type_t type;
|
||||||
|
|
||||||
explicit node_t(type_t type, blt::bump_allocator<true>& alloc):
|
explicit node_t(type_t type, ALLOC& alloc):
|
||||||
alloc(alloc), argc(arg_c[static_cast<int>(type)]), type(type)
|
alloc(alloc), argc(arg_c[static_cast<int>(type)]), type(type)
|
||||||
{
|
{
|
||||||
if (type == type_t::VALUE)
|
if (type == type_t::VALUE)
|
||||||
|
@ -183,7 +184,7 @@ namespace fb
|
||||||
|
|
||||||
void create(blt::u64 size)
|
void create(blt::u64 size)
|
||||||
{
|
{
|
||||||
root = alloc.emplace<node_t>(random_type(), alloc);
|
root = alloc.template emplace<node_t>(random_type(), alloc);
|
||||||
std::stack<std::pair<node_t*, blt::size_t>> stack;
|
std::stack<std::pair<node_t*, blt::size_t>> stack;
|
||||||
stack.emplace(root, 0);
|
stack.emplace(root, 0);
|
||||||
while (!stack.empty())
|
while (!stack.empty())
|
||||||
|
@ -198,14 +199,14 @@ namespace fb
|
||||||
{
|
{
|
||||||
if (depth >= size)
|
if (depth >= size)
|
||||||
{
|
{
|
||||||
node->children[i] = alloc.emplace<node_t>(type_t::VALUE, alloc);
|
node->children[i] = alloc.template emplace<node_t>(type_t::VALUE, alloc);
|
||||||
//BLT_INFO("Skipping due to size, value %lf", node->children[i]->value);
|
//BLT_INFO("Skipping due to size, value %lf", node->children[i]->value);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (choice())
|
if (choice())
|
||||||
node->children[i] = alloc.emplace<node_t>(random_type(), alloc);
|
node->children[i] = alloc.template emplace<node_t>(random_type(), alloc);
|
||||||
else
|
else
|
||||||
node->children[i] = alloc.emplace<node_t>(random_type_sub(), alloc);
|
node->children[i] = alloc.template emplace<node_t>(random_type_sub(), alloc);
|
||||||
//BLT_INFO("child %p to %p has type generated %ld with argc %d, value %lf", node->children[i], node,
|
//BLT_INFO("child %p to %p has type generated %ld with argc %d, value %lf", node->children[i], node,
|
||||||
// static_cast<int>(node->children[i]->type), node->children[i]->argc, node->children[i]->value);
|
// static_cast<int>(node->children[i]->type), node->children[i]->argc, node->children[i]->value);
|
||||||
if (depth < size)
|
if (depth < size)
|
||||||
|
@ -224,28 +225,36 @@ namespace fb
|
||||||
|
|
||||||
~tree1()
|
~tree1()
|
||||||
{
|
{
|
||||||
|
BLT_START_INTERVAL("Tree Destruction", blt::type_string<ALLOC>() + ": Single Class Tree");
|
||||||
alloc.destroy(root);
|
alloc.destroy(root);
|
||||||
alloc.deallocate(root);
|
alloc.deallocate(root);
|
||||||
|
BLT_END_INTERVAL("Tree Destruction", blt::type_string<ALLOC>() + ": Single Class Tree");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void funny()
|
template<typename ALLOC>
|
||||||
|
void bump()
|
||||||
{
|
{
|
||||||
blt::bump_allocator2 alloc;
|
|
||||||
|
|
||||||
constexpr auto size = 512;
|
constexpr auto size = 512;
|
||||||
constexpr auto tree_size = 17;
|
constexpr auto tree_size = 17;
|
||||||
engine.reset();
|
engine.reset();
|
||||||
tree1 love[size];
|
tree1<ALLOC> love[size];
|
||||||
for (auto& i : love)
|
for (auto& i : love)
|
||||||
i.create(tree_size);
|
i.create(tree_size);
|
||||||
BLT_START_INTERVAL("Tree Evaluation", "Single Class Bump Allocated Tree");
|
BLT_START_INTERVAL("Tree Evaluation", blt::type_string<ALLOC>() + ": Single Class Tree");
|
||||||
for (auto& i : love)
|
for (auto& i : love)
|
||||||
{
|
|
||||||
blt::black_box(i.evaluate());
|
blt::black_box(i.evaluate());
|
||||||
}
|
BLT_END_INTERVAL("Tree Evaluation", blt::type_string<ALLOC>() + ": Single Class Tree");
|
||||||
BLT_END_INTERVAL("Tree Evaluation", "Single Class Bump Allocated Tree");
|
}
|
||||||
|
|
||||||
|
void funny()
|
||||||
|
{
|
||||||
|
bump<blt::bump_allocator<true>>();
|
||||||
|
bump<blt::bump_allocator2<4096 * 512, true, 4096 * 512>>();
|
||||||
|
bump<blt::bump_allocator2<4096 * 512, false, 4096 * 512>>();
|
||||||
|
|
||||||
BLT_PRINT_PROFILE("Tree Evaluation");
|
BLT_PRINT_PROFILE("Tree Evaluation");
|
||||||
|
BLT_PRINT_PROFILE("Tree Destruction");
|
||||||
}
|
}
|
||||||
|
|
||||||
void execute()
|
void execute()
|
||||||
|
|
Loading…
Reference in New Issue