silly debugging
parent
921fec9e6b
commit
06a34d21f1
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
project(blt-gp VERSION 0.1.43)
|
project(blt-gp VERSION 0.1.44)
|
||||||
|
|
||||||
include(CTest)
|
include(CTest)
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
#ifdef BLT_TRACK_ALLOCATIONS
|
#ifdef BLT_TRACK_ALLOCATIONS
|
||||||
tracker.allocate(bytes);
|
tracker.allocate(bytes);
|
||||||
|
std::cout << "Hey our aligned allocator allocated " << bytes << " bytes!\n";
|
||||||
#endif
|
#endif
|
||||||
return std::aligned_alloc(8, bytes);
|
return std::aligned_alloc(8, bytes);
|
||||||
}
|
}
|
||||||
|
@ -104,6 +105,7 @@ namespace blt::gp
|
||||||
return;
|
return;
|
||||||
#ifdef BLT_TRACK_ALLOCATIONS
|
#ifdef BLT_TRACK_ALLOCATIONS
|
||||||
tracker.deallocate(bytes);
|
tracker.deallocate(bytes);
|
||||||
|
std::cout << "[Hey our aligned allocator deallocated " << bytes << " bytes!]\n";
|
||||||
#else
|
#else
|
||||||
(void) bytes;
|
(void) bytes;
|
||||||
#endif
|
#endif
|
||||||
|
@ -134,6 +136,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
#ifdef BLT_TRACK_ALLOCATIONS
|
#ifdef BLT_TRACK_ALLOCATIONS
|
||||||
tracker.allocate(n * sizeof(T));
|
tracker.allocate(n * sizeof(T));
|
||||||
|
// std::cout << "Hey our tracked allocator allocated " << (n * sizeof(T)) << " bytes!\n";
|
||||||
#endif
|
#endif
|
||||||
return static_cast<pointer>(std::malloc(n * sizeof(T)));
|
return static_cast<pointer>(std::malloc(n * sizeof(T)));
|
||||||
}
|
}
|
||||||
|
@ -147,6 +150,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
#ifdef BLT_TRACK_ALLOCATIONS
|
#ifdef BLT_TRACK_ALLOCATIONS
|
||||||
tracker.deallocate(n * sizeof(T));
|
tracker.deallocate(n * sizeof(T));
|
||||||
|
// std::cout << "[Hey our tracked allocator deallocated " << (n * sizeof(T)) << " bytes!]\n";
|
||||||
#else
|
#else
|
||||||
(void) n;
|
(void) n;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -83,6 +83,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
blt::size_t arg_size_bytes = 0;
|
blt::size_t arg_size_bytes = 0;
|
||||||
blt::size_t return_size_bytes = 0;
|
blt::size_t return_size_bytes = 0;
|
||||||
|
argc_t argc{};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct program_operator_storage_t
|
struct program_operator_storage_t
|
||||||
|
@ -118,8 +119,13 @@ namespace blt::gp
|
||||||
program_operator_storage_t& build(Operators& ... operators)
|
program_operator_storage_t& build(Operators& ... operators)
|
||||||
{
|
{
|
||||||
blt::size_t largest = 0;
|
blt::size_t largest = 0;
|
||||||
|
blt::u32 largest_argc = 0;
|
||||||
operator_metadata_t meta;
|
operator_metadata_t meta;
|
||||||
((meta = add_operator(operators), largest = std::max(std::max(meta.arg_size_bytes, meta.return_size_bytes), largest)), ...);
|
((meta = add_operator(operators), largest_argc = std::max(meta.argc.argc, largest_argc),
|
||||||
|
largest = std::max(std::max(meta.arg_size_bytes, meta.return_size_bytes), largest)), ...);
|
||||||
|
|
||||||
|
// largest = largest * largest_argc;
|
||||||
|
BLT_TRACE(largest);
|
||||||
|
|
||||||
storage.eval_func = [&operators..., largest](const tree_t& tree, void* context) -> evaluation_context& {
|
storage.eval_func = [&operators..., largest](const tree_t& tree, void* context) -> evaluation_context& {
|
||||||
const auto& ops = tree.get_operations();
|
const auto& ops = tree.get_operations();
|
||||||
|
@ -130,16 +136,30 @@ namespace blt::gp
|
||||||
results.values.reserve(largest);
|
results.values.reserve(largest);
|
||||||
|
|
||||||
blt::size_t total_so_far = 0;
|
blt::size_t total_so_far = 0;
|
||||||
|
blt::size_t op_pos = 0;
|
||||||
|
|
||||||
for (const auto& operation : blt::reverse_iterate(ops.begin(), ops.end()))
|
for (const auto& operation : blt::reverse_iterate(ops.begin(), ops.end()))
|
||||||
{
|
{
|
||||||
|
op_pos++;
|
||||||
if (operation.is_value)
|
if (operation.is_value)
|
||||||
{
|
{
|
||||||
|
auto cur = tracker.start_measurement();
|
||||||
total_so_far += stack_allocator::aligned_size(operation.type_size);
|
total_so_far += stack_allocator::aligned_size(operation.type_size);
|
||||||
results.values.copy_from(vals.from(total_so_far), stack_allocator::aligned_size(operation.type_size));
|
results.values.copy_from(vals.from(total_so_far), stack_allocator::aligned_size(operation.type_size));
|
||||||
|
tracker.stop_measurement(cur);
|
||||||
|
if (cur.getAllocatedByteDifference() > 0)
|
||||||
|
{
|
||||||
|
BLT_TRACE("Operator %ld allocated! pos: %ld", operation.id, op_pos);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
auto cur = tracker.start_measurement();
|
||||||
call_jmp_table(operation.id, context, results.values, results.values, operators...);
|
call_jmp_table(operation.id, context, results.values, results.values, operators...);
|
||||||
|
tracker.stop_measurement(cur);
|
||||||
|
if (cur.getAllocatedByteDifference() > 0)
|
||||||
|
{
|
||||||
|
BLT_TRACE("Operator %ld allocated! pos: %ld", operation.id, op_pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
|
@ -219,13 +239,6 @@ namespace blt::gp
|
||||||
(storage.system.register_type<Args>(), ...);
|
(storage.system.register_type<Args>(), ...);
|
||||||
storage.system.register_type<Return>();
|
storage.system.register_type<Return>();
|
||||||
|
|
||||||
operator_metadata_t meta;
|
|
||||||
if constexpr (sizeof...(Args) != 0)
|
|
||||||
{
|
|
||||||
meta.arg_size_bytes = (stack_allocator::aligned_size(sizeof(Args)) + ...);
|
|
||||||
}
|
|
||||||
meta.return_size_bytes = sizeof(Return);
|
|
||||||
|
|
||||||
auto return_type_id = storage.system.get_type<Return>().id();
|
auto return_type_id = storage.system.get_type<Return>().id();
|
||||||
auto operator_id = blt::gp::operator_id(storage.operators.size());
|
auto operator_id = blt::gp::operator_id(storage.operators.size());
|
||||||
op.id = operator_id;
|
op.id = operator_id;
|
||||||
|
@ -249,6 +262,15 @@ namespace blt::gp
|
||||||
BLT_ASSERT(info.argc.argc_context - info.argc.argc <= 1 && "Cannot pass multiple context as arguments!");
|
BLT_ASSERT(info.argc.argc_context - info.argc.argc <= 1 && "Cannot pass multiple context as arguments!");
|
||||||
|
|
||||||
storage.operators.push_back(info);
|
storage.operators.push_back(info);
|
||||||
|
|
||||||
|
operator_metadata_t meta;
|
||||||
|
if constexpr (sizeof...(Args) != 0)
|
||||||
|
{
|
||||||
|
meta.arg_size_bytes = (stack_allocator::aligned_size(sizeof(Args)) + ...);
|
||||||
|
}
|
||||||
|
meta.return_size_bytes = sizeof(Return);
|
||||||
|
meta.argc = info.argc;
|
||||||
|
|
||||||
storage.operator_metadata.push_back(meta);
|
storage.operator_metadata.push_back(meta);
|
||||||
storage.print_funcs.push_back([&op](std::ostream& out, stack_allocator& stack) {
|
storage.print_funcs.push_back([&op](std::ostream& out, stack_allocator& stack) {
|
||||||
if constexpr (blt::meta::is_streamable_v<Return>)
|
if constexpr (blt::meta::is_streamable_v<Return>)
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
if (stack.empty())
|
if (stack.empty())
|
||||||
return;
|
return;
|
||||||
if (size_ < stack.bytes_stored + bytes_stored)
|
if (stack.bytes_stored + bytes_stored > size_)
|
||||||
expand(stack.bytes_stored + size_);
|
expand(stack.bytes_stored + size_);
|
||||||
std::memcpy(data_ + bytes_stored, stack.data_, stack.bytes_stored);
|
std::memcpy(data_ + bytes_stored, stack.data_, stack.bytes_stored);
|
||||||
bytes_stored += stack.bytes_stored;
|
bytes_stored += stack.bytes_stored;
|
||||||
|
@ -125,7 +125,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
if (bytes == 0)
|
if (bytes == 0)
|
||||||
return;
|
return;
|
||||||
if (bytes + bytes_stored >= size_)
|
if (bytes + bytes_stored > size_)
|
||||||
expand(bytes + size_);
|
expand(bytes + size_);
|
||||||
std::memcpy(data_ + bytes_stored, stack.data_ + (stack.bytes_stored - bytes), bytes);
|
std::memcpy(data_ + bytes_stored, stack.data_ + (stack.bytes_stored - bytes), bytes);
|
||||||
bytes_stored += bytes;
|
bytes_stored += bytes;
|
||||||
|
@ -135,7 +135,7 @@ namespace blt::gp
|
||||||
{
|
{
|
||||||
if (bytes == 0 || data == nullptr)
|
if (bytes == 0 || data == nullptr)
|
||||||
return;
|
return;
|
||||||
if (bytes + bytes_stored >= size_)
|
if (bytes + bytes_stored > size_)
|
||||||
expand(bytes + size_);
|
expand(bytes + size_);
|
||||||
std::memcpy(data_ + bytes_stored, data, bytes);
|
std::memcpy(data_ + bytes_stored, data, bytes);
|
||||||
bytes_stored += bytes;
|
bytes_stored += bytes;
|
||||||
|
|
|
@ -118,7 +118,14 @@ namespace blt::gp
|
||||||
|
|
||||||
evaluation_context& evaluate(void* context) const
|
evaluation_context& evaluate(void* context) const
|
||||||
{
|
{
|
||||||
return (*func)(*this, context);
|
auto cur = tracker.start_measurement();
|
||||||
|
auto& v = (*func)(*this, context);
|
||||||
|
tracker.stop_measurement(cur);
|
||||||
|
if (cur.getAllocatedByteDifference() > 0)
|
||||||
|
{
|
||||||
|
print(*program, std::cout, false, true, false);
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
blt::size_t get_depth(gp_program& program);
|
blt::size_t get_depth(gp_program& program);
|
||||||
|
@ -194,6 +201,7 @@ namespace blt::gp
|
||||||
tracked_vector<op_container_t> operations;
|
tracked_vector<op_container_t> operations;
|
||||||
blt::gp::stack_allocator values;
|
blt::gp::stack_allocator values;
|
||||||
detail::eval_func_t* func;
|
detail::eval_func_t* func;
|
||||||
|
gp_program* program;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fitness_t
|
struct fitness_t
|
||||||
|
|
|
@ -295,7 +295,7 @@ namespace blt::gp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tree_t::tree_t(gp_program& program): func(&program.get_eval_func())
|
tree_t::tree_t(gp_program& program): func(&program.get_eval_func()), program(&program)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue