Program Listing for File SendBufferManager.cpp
↰ Return to documentation for file (BackendLibfabric/SendBufferManager.cpp)
#include "SendBufferManager.hpp"
#include <tracy/Tracy.hpp>
netio3::libfabric::SendBufferManager::SendBufferManager(
ConnectionParametersSendBuffered connection_params,
DomainManager& domain_manager) :
m_conn_parameters{std::move(connection_params)}
{
init_buffers(domain_manager);
}
netio3::libfabric::SendBufferManager::~SendBufferManager()
{
ERS_DEBUG(2, "Entered");
for (const auto& buffer : m_buffers) {
close_buffer(buffer);
}
ERS_DEBUG(2, "Finished");
}
std::size_t netio3::libfabric::SendBufferManager::get_num_available_buffers()
{
ZoneScoped;
return m_min_num_available_buffers.exchange(
m_num_available_buffers.load(std::memory_order_relaxed), std::memory_order_relaxed);
}
void netio3::libfabric::SendBufferManager::init_buffers(DomainManager& domain_manager)
{
ZoneScoped;
ERS_DEBUG(2,
std::format("Registering {} buffers of size {}",
m_conn_parameters.num_buf,
m_conn_parameters.buf_size));
m_buffers.reserve(m_conn_parameters.num_buf);
for (std::uint64_t key = 0; key < m_conn_parameters.num_buf; ++key) {
m_buffers.emplace_back(m_conn_parameters.buf_size, key);
register_buffer(m_buffers.back(), domain_manager, FI_SEND);
m_available_buffers.push(key);
++m_num_available_buffers;
}
m_min_num_available_buffers = m_num_available_buffers.load();
}