Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef SHMSYSTEMV_H_
#define SHMSYSTEMV_H_
#include <sys/types.h>
#include <sys/ipc.h>
#include "core/Capsule.h"
namespace adios
{
/**
* Buffer and Metadata are allocated in virtual memory using interprocess communication (IPC) of Unix's System V
*/
class ShmSystemV : public Capsule
{
public:
char* m_Data = nullptr; ///< reference to a shared memory data buffer created with shmget
size_t m_DataSize = 2147483648; ///< size of the allocated shared memory segment, needs a default (2 Gb?)
key_t m_DataKey; ///< key associated with the data buffer, created with ftok
int m_DataShmID; ///< data shared memory buffer id
char* m_Metadata = nullptr; ///< reference to a shared memory metadata buffer created with shmget
size_t m_MetadataSize = 1048576; ///< size of the allocated shared memory segment, needs a default ( 1 Mb?)
key_t m_MetadataKey; ///< key associated with the metadata buffer, created with ftok
int m_MetadataShmID; ///< metadata shared memory buffer id
/**
* Create a Capsule in shared memory
* @param accessMode
* @param pathName used to create the key as a unique identifier
* @param id used to create the key as a unique identifier, non-zero typically rank+1
* @param dataSize size of allocated memory segment for data
* @param metadataSize size of allocated memory segment for metadata
*/
ShmSystemV( const std::string accessMode, const int rankMPI, const std::string pathName, const int id,
const size_t dataSize = 2147483648, const size_t metadataSize = 0 );
~ShmSystemV( );
void Write( const Variable<char>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<unsigned char>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<short>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<unsigned short>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<unsigned int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<long int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<unsigned long int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<long long int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<unsigned long long int>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<float>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<double>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
void Write( const Variable<long double>& variable, const std::vector<unsigned long long int>& localDimensions,
const std::vector<unsigned long long int>& globalDimensions,
const std::vector<unsigned long long int>& globalOffsets );
};
} //end namespace
#endif /* SHMSYSTEMV_H_ */