00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#ifdef __GNUC__
00030
#pragma interface
00031
#endif
00032
00033
#ifndef _util_group_memrdma_h
00034
#define _util_group_memrdma_h
00035
00036
#include <iostream>
00037
#include <vector>
00038
00039
#include <util/group/pool.h>
00040
#include <util/group/memmsg.h>
00041
00042
namespace sc {
00043
00046 class RDMAMemoryGrp :
public MsgMemoryGrp {
00047
protected:
00048
char *data_;
00049
00050
virtual void retrieve_data(
void *,
int node,
int offset,
int size,
00051
int lock) = 0;
00052
virtual void replace_data(
void *,
int node,
int offset,
int size,
00053
int unlock) = 0;
00054
virtual void sum_data(
double *data,
int node,
int doffset,
int dsize) = 0;
00055
00056 std::vector<Pool*> pools_;
00057 size_t default_pool_size_;
00058
void* malloc_region(size_t nbyte);
00059
void free_region(
void*);
00060
public:
00061
RDMAMemoryGrp(
const Ref<MessageGrp>& msg);
00062
RDMAMemoryGrp(
const Ref<KeyVal>&);
00063 ~
RDMAMemoryGrp();
00064
00065
void *
localdata();
00066
00067
void set_localsize(size_t localsize);
00068
00069
void *
obtain_writeonly(distsize_t offset,
int size);
00070
void *
obtain_readwrite(distsize_t offset,
int size);
00071
void *
obtain_readonly(distsize_t offset,
int size);
00072
void release_readonly(
void *data, distsize_t offset,
int size);
00073
void release_writeonly(
void *data, distsize_t offset,
int size);
00074
void release_readwrite(
void *data, distsize_t offset,
int size);
00075
00076
void sum_reduction(
double *data, distsize_t doffset,
int dsize);
00077
void sum_reduction_on_node(
double *data, size_t doffset,
int dsize,
00078
int node = -1);
00079
00080
void print(std::ostream &o = ExEnv::out0())
const;
00081 };
00082
00083 }
00084
00085
#endif
00086
00087
00088
00089
00090