allocator fun

main
Brett 2024-03-06 23:23:03 -05:00
parent bc25144476
commit 7a8573270a
2 changed files with 25 additions and 16 deletions

@ -1 +1 @@
Subproject commit be4a61cc8040ffc1f86bd582a7de5d67397cdb16 Subproject commit 06892a3418b8340701a57393e725dc5379305897

View File

@ -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()