A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
remote-channel-bundle-manager.cc
Go to the documentation of this file.
1
/*
2
* Copyright 2013. Lawrence Livermore National Security, LLC.
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License version 2 as
6
* published by the Free Software Foundation;
7
*
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
12
*
13
* You should have received a copy of the GNU General Public License
14
* along with this program; if not, write to the Free Software
15
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
*
17
* Author: Steven Smith <smith84@llnl.gov>
18
*
19
*/
20
27
#include "
remote-channel-bundle-manager.h
"
28
29
#include "
null-message-simulator-impl.h
"
30
#include "
remote-channel-bundle.h
"
31
32
#include "ns3/simulator.h"
33
34
namespace
ns3
35
{
36
37
bool
ns3::RemoteChannelBundleManager::g_initialized
=
false
;
38
ns3::RemoteChannelBundleManager::RemoteChannelMap
39
ns3::RemoteChannelBundleManager::g_remoteChannelBundles
;
40
41
Ptr<RemoteChannelBundle>
42
RemoteChannelBundleManager::Find
(uint32_t systemId)
43
{
44
auto
kv =
g_remoteChannelBundles
.find(systemId);
45
46
if
(kv ==
g_remoteChannelBundles
.end())
47
{
48
return
nullptr
;
49
}
50
else
51
{
52
return
kv->second;
53
}
54
}
55
56
Ptr<RemoteChannelBundle>
57
RemoteChannelBundleManager::Add
(uint32_t systemId)
58
{
59
NS_ASSERT
(!
g_initialized
);
60
NS_ASSERT
(
g_remoteChannelBundles
.find(systemId) ==
g_remoteChannelBundles
.end());
61
62
Ptr<RemoteChannelBundle>
remoteChannelBundle = Create<RemoteChannelBundle>(systemId);
63
64
g_remoteChannelBundles
[systemId] = remoteChannelBundle;
65
66
return
remoteChannelBundle;
67
}
68
69
std::size_t
70
RemoteChannelBundleManager::Size
()
71
{
72
return
g_remoteChannelBundles
.size();
73
}
74
75
void
76
RemoteChannelBundleManager::InitializeNullMessageEvents
()
77
{
78
NS_ASSERT
(!
g_initialized
);
79
80
for
(
auto
iter =
g_remoteChannelBundles
.begin(); iter !=
g_remoteChannelBundles
.end(); ++iter)
81
{
82
Ptr<RemoteChannelBundle>
bundle = iter->second;
83
bundle->Send(bundle->GetDelay());
84
85
NullMessageSimulatorImpl::GetInstance
()->
ScheduleNullMessageEvent
(bundle);
86
}
87
88
g_initialized
=
true
;
89
}
90
91
Time
92
RemoteChannelBundleManager::GetSafeTime
()
93
{
94
NS_ASSERT
(
g_initialized
);
95
96
Time
safeTime =
Simulator::GetMaximumSimulationTime
();
97
98
for
(
auto
kv =
g_remoteChannelBundles
.begin(); kv !=
g_remoteChannelBundles
.end(); ++kv)
99
{
100
safeTime =
Min
(safeTime, kv->second->GetGuaranteeTime());
101
}
102
103
return
safeTime;
104
}
105
106
void
107
RemoteChannelBundleManager::Destroy
()
108
{
109
NS_ASSERT
(
g_initialized
);
110
111
g_remoteChannelBundles
.clear();
112
g_initialized
=
false
;
113
}
114
115
}
// namespace ns3
ns3::NullMessageSimulatorImpl::GetInstance
static NullMessageSimulatorImpl * GetInstance()
Definition:
null-message-simulator-impl.cc:580
ns3::NullMessageSimulatorImpl::ScheduleNullMessageEvent
void ScheduleNullMessageEvent(Ptr< RemoteChannelBundle > bundle)
Definition:
null-message-simulator-impl.cc:264
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition:
ptr.h:77
ns3::RemoteChannelBundleManager::GetSafeTime
static Time GetSafeTime()
Get the safe time across all channels in this bundle.
Definition:
remote-channel-bundle-manager.cc:92
ns3::RemoteChannelBundleManager::Find
static Ptr< RemoteChannelBundle > Find(uint32_t systemId)
Get the bundle corresponding to a remote rank.
Definition:
remote-channel-bundle-manager.cc:42
ns3::RemoteChannelBundleManager::InitializeNullMessageEvents
static void InitializeNullMessageEvents()
Setup initial Null Message events for every RemoteChannelBundle.
Definition:
remote-channel-bundle-manager.cc:76
ns3::RemoteChannelBundleManager::g_remoteChannelBundles
static RemoteChannelMap g_remoteChannelBundles
The remote channel bundles.
Definition:
remote-channel-bundle-manager.h:110
ns3::RemoteChannelBundleManager::Add
static Ptr< RemoteChannelBundle > Add(uint32_t systemId)
Add RemoteChannelBundle from this task to MPI task on other side of the link.
Definition:
remote-channel-bundle-manager.cc:57
ns3::RemoteChannelBundleManager::RemoteChannelMap
std::unordered_map< uint32_t, Ptr< RemoteChannelBundle > > RemoteChannelMap
Container for all remote channel bundles for this task.
Definition:
remote-channel-bundle-manager.h:108
ns3::RemoteChannelBundleManager::Size
static std::size_t Size()
Get the number of ns-3 channels in this bundle.
Definition:
remote-channel-bundle-manager.cc:70
ns3::RemoteChannelBundleManager::Destroy
static void Destroy()
Destroy the singleton.
Definition:
remote-channel-bundle-manager.cc:107
ns3::RemoteChannelBundleManager::g_initialized
static bool g_initialized
Protect manager class from being initialized twice or incorrect ordering of method calls.
Definition:
remote-channel-bundle-manager.h:116
ns3::Simulator::GetMaximumSimulationTime
static Time GetMaximumSimulationTime()
Get the maximum representable simulation time.
Definition:
simulator.cc:311
ns3::Time
Simulation virtual time values and global simulation resolution.
Definition:
nstime.h:105
NS_ASSERT
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition:
assert.h:66
ns3::Min
int64x64_t Min(const int64x64_t &a, const int64x64_t &b)
Minimum.
Definition:
int64x64.h:229
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
null-message-simulator-impl.h
Declaration of class ns3::NullMessageSimulatorImpl.
remote-channel-bundle-manager.h
Declaration of class ns3::RemoteChannelBundleManager.
remote-channel-bundle.h
Declaration of class ns3::RemoteChannelBundle.
src
mpi
model
remote-channel-bundle-manager.cc
Generated on Sun Mar 3 2024 17:11:05 for ns-3 by
1.9.1