FreeNOS
MpiProxy.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 Niek Linnenbank
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 as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __SERVER_MPIPROXY_MPIPROXY_H
19#define __SERVER_MPIPROXY_MPIPROXY_H
20
21#include <Types.h>
22#include <Index.h>
23#include <Memory.h>
24#include <Array.h>
25#include <POSIXApplication.h>
26#include <sys/socket.h>
27
28class NetworkClient;
29class MemoryChannel;
30
51{
52 private:
53
55 static const u16 UdpPort = 6660;
56
58 static const Size ReceiveTimeoutMs = 500;
59
61 static const Size MaximumChannels = 128u;
62
63 public:
64
66 static const Size MaximumPacketSize = 1448;
67
78
96
97 public:
98
105 MpiProxy(int argc, char **argv);
106
110 virtual ~MpiProxy();
111
117 virtual Result initialize();
118
124 virtual Result exec();
125
126 private:
127
137 Result udpSend(const void *packet,
138 const Size size,
139 const struct sockaddr & addr) const;
140
150 Result udpSendMultiple(const struct iovec *vec,
151 const Size count,
152 const struct sockaddr & addr) const;
153
163 Result udpReceive(void *packet,
164 Size & size,
165 struct sockaddr & addr) const;
166
176 Result processRequest(const u8 *packet,
177 const Size size,
178 const struct sockaddr & addr);
179
190 const u8 *packet,
191 const Size size);
192
204 const u8 *packet,
205 const Size size,
206 const struct sockaddr & addr);
207
221 const u8 *packet,
222 const Size size,
223 const struct sockaddr & addr);
224
236 const u8 *packet,
237 const Size size,
238 const struct sockaddr & addr);
239
248 Result createChannels(const Size rankId,
249 const Size coreCount);
250
260 Result startLocalProcess(const char *command,
261 const Size rankId,
262 const Size coreCount);
263
275 const char *command,
276 const Size rankId,
277 const Size coreCount);
278
279 private:
280
283
286
289
292
295
298};
299
305#endif /* __SERVER_MPIPROXY_MPIPROXY_H */
SystemDescriptorHeader header
Definition IntelACPI.h:0
u8 coreId
Definition IntelACPI.h:1
Result
Result codes.
Definition Application.h:54
This is a wrapper class for a fixed size array.
Definition Array.h:40
Index is a N-sized array of pointers to items of type T.
Definition Index.h:37
Unidirectional point-to-point channel using shared memory.
Server that bridges IP/UDP to local MPI communication channels.
Definition MpiProxy.h:51
virtual Result exec()
Run the server.
Definition MpiProxy.cpp:109
int m_sock
IP/UDP socket for external communication.
Definition MpiProxy.h:282
static const Size ReceiveTimeoutMs
Timeout in milliseconds to wait for packet receive.
Definition MpiProxy.h:58
Result udpSendMultiple(const struct iovec *vec, const Size count, const struct sockaddr &addr) const
Send multiple UDP packets.
Definition MpiProxy.cpp:160
Result startLocalProcess(const char *command, const Size rankId, const Size coreCount)
Start a process on the local processor.
Definition MpiProxy.cpp:580
Index< MemoryChannel, MaximumChannels > m_writeChannels
Stores all channels for sending data to processes.
Definition MpiProxy.h:294
Result processSend(const Header *header, const u8 *packet, const Size size)
Process MPI send request.
Definition MpiProxy.cpp:252
Result processRecv(const Header *header, const u8 *packet, const Size size, const struct sockaddr &addr)
Process MPI recv request.
Definition MpiProxy.cpp:295
NetworkClient * m_client
Networking client object.
Definition MpiProxy.h:285
Result startRemoteProcess(const Size coreId, const char *command, const Size rankId, const Size coreCount)
Start a process on a secondary processor.
Definition MpiProxy.cpp:642
Result processTerminate(const Header *header, const u8 *packet, const Size size, const struct sockaddr &addr)
Process MPI terminate request.
Definition MpiProxy.cpp:435
Array< ProcessID, MaximumChannels > m_pids
Records the PID of each process participating in the computation.
Definition MpiProxy.h:297
virtual ~MpiProxy()
Destructor.
Definition MpiProxy.cpp:54
Operation
Encodes various MPI operations.
Definition MpiProxy.h:72
@ MpiOpRecv
Definition MpiProxy.h:74
@ MpiOpSend
Definition MpiProxy.h:73
@ MpiOpTerminate
Definition MpiProxy.h:76
@ MpiOpExec
Definition MpiProxy.h:75
Index< MemoryChannel, MaximumChannels > m_readChannels
Stores all channels for receiving data from processes.
Definition MpiProxy.h:291
Result processRequest(const u8 *packet, const Size size, const struct sockaddr &addr)
Process incoming packet.
Definition MpiProxy.cpp:222
Result createChannels(const Size rankId, const Size coreCount)
Create communication channels.
Definition MpiProxy.cpp:496
static const Size MaximumPacketSize
Maximum size of packet payload.
Definition MpiProxy.h:66
Result processExec(const Header *header, const u8 *packet, const Size size, const struct sockaddr &addr)
Process execute request.
Definition MpiProxy.cpp:384
Memory::Range m_memChannelBase
Memory base address for local MPI communication.
Definition MpiProxy.h:288
virtual Result initialize()
Initialize the server.
Definition MpiProxy.cpp:64
static const Size MaximumChannels
Maximum number of supported MPI channels.
Definition MpiProxy.h:61
Result udpSend(const void *packet, const Size size, const struct sockaddr &addr) const
Send UDP packet.
Definition MpiProxy.cpp:142
static const u16 UdpPort
Port number for IP/UDP traffic.
Definition MpiProxy.h:55
Result udpReceive(void *packet, Size &size, struct sockaddr &addr) const
Receive UDP packet.
Definition MpiProxy.cpp:185
Networking Client implementation.
POSIX-compatible application.
unsigned int u32
Unsigned 32-bit number.
Definition Types.h:53
unsigned short u16
Unsigned 16-bit number.
Definition Types.h:56
unsigned int Size
Any sane size indicator cannot go negative.
Definition Types.h:128
unsigned char u8
Unsigned 8-bit number.
Definition Types.h:59
Memory range.
Definition Memory.h:56
Packet payload header for MPI messages via IP/UDP.
Definition MpiProxy.h:83
Input/Output vector for multi-packet operations.
Definition socket.h:45
Defines a socket address and port pair.
Definition socket.h:36