📄 messimpl.cc
字号:
}voidMessageGrp::send(int target, float* data, int ndata){ raw_send(target, data, ndata*sizeof(float));}voidMessageGrp::send(int target, unsigned int* data, int ndata){ raw_send(target, data, ndata*sizeof(int));}voidMessageGrp::send(int target, int* data, int ndata){ raw_send(target, data, ndata*sizeof(int));}voidMessageGrp::send(int target, char* data, int ndata){ raw_send(target, data, ndata);}voidMessageGrp::send(int target, unsigned char* data, int ndata){ raw_send(target, data, ndata);}voidMessageGrp::send(int target, signed char* data, int ndata){ raw_send(target, data, ndata);}// Sequential receive routinesvoidMessageGrp::recv(int sender, double* data, int ndata){ raw_recv(sender, data, ndata*sizeof(double));}voidMessageGrp::recv(int sender, short* data, int ndata){ raw_recv(sender, data, ndata*sizeof(short));}voidMessageGrp::recv(int sender, long* data, int ndata){ raw_recv(sender, data, ndata*sizeof(long));}voidMessageGrp::recv(int sender, float* data, int ndata){ raw_recv(sender, data, ndata*sizeof(float));}voidMessageGrp::recv(int sender, unsigned int* data, int ndata){ raw_recv(sender, data, ndata*sizeof(int));}voidMessageGrp::recv(int sender, int* data, int ndata){ raw_recv(sender, data, ndata*sizeof(int));}voidMessageGrp::recv(int sender, char* data, int ndata){ raw_recv(sender, data, ndata);}voidMessageGrp::recv(int sender, unsigned char* data, int ndata){ raw_recv(sender, data, ndata);}voidMessageGrp::recv(int sender, signed char* data, int ndata){ raw_recv(sender, data, ndata);}// Typed send routinesvoidMessageGrp::sendt(int target, int type, double* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(double));}voidMessageGrp::sendt(int target, int type, short* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(short));}voidMessageGrp::sendt(int target, int type, long* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(long));}voidMessageGrp::sendt(int target, int type, float* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(float));}voidMessageGrp::sendt(int target, int type, unsigned int* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(int));}voidMessageGrp::sendt(int target, int type, int* data, int ndata){ raw_sendt(target, type, data, ndata*sizeof(int));}voidMessageGrp::sendt(int target, int type, char* data, int ndata){ raw_sendt(target, type, data, ndata);}voidMessageGrp::sendt(int target, int type, unsigned char* data, int ndata){ raw_sendt(target, type, data, ndata);}voidMessageGrp::sendt(int target, int type, signed char* data, int ndata){ raw_sendt(target, type, data, ndata);}// Typed receive routinesvoidMessageGrp::recvt(int type, double* data, int ndata){ raw_recvt(type, data, ndata*sizeof(double));}voidMessageGrp::recvt(int type, short* data, int ndata){ raw_recvt(type, data, ndata*sizeof(short));}voidMessageGrp::recvt(int type, long* data, int ndata){ raw_recvt(type, data, ndata*sizeof(long));}voidMessageGrp::recvt(int type, float* data, int ndata){ raw_recvt(type, data, ndata*sizeof(float));}voidMessageGrp::recvt(int type, unsigned int* data, int ndata){ raw_recvt(type, data, ndata*sizeof(int));}voidMessageGrp::recvt(int type, int* data, int ndata){ raw_recvt(type, data, ndata*sizeof(int));}voidMessageGrp::recvt(int type, char* data, int ndata){ raw_recvt(type, data, ndata);}voidMessageGrp::recvt(int type, unsigned char* data, int ndata){ raw_recvt(type, data, ndata);}voidMessageGrp::recvt(int type, signed char* data, int ndata){ raw_recvt(type, data, ndata);}// Broadcast operationsvoidMessageGrp::bcast(double*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(double), from);}voidMessageGrp::bcast(short*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(short), from);}voidMessageGrp::bcast(long*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(long), from);}voidMessageGrp::bcast(float*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(float), from);}voidMessageGrp::bcast(unsigned int*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(int), from);}voidMessageGrp::bcast(int*data, int ndata, int from){ raw_bcast(data, ndata*sizeof(int), from);}voidMessageGrp::bcast(char*data, int ndata, int from){ raw_bcast(data, ndata, from);}voidMessageGrp::bcast(unsigned char*data, int ndata, int from){ raw_bcast(data, ndata, from);}voidMessageGrp::bcast(signed char*data, int ndata, int from){ raw_bcast(data, ndata, from);}// Global classdesc indicesintMessageGrp::classdesc_to_index(const ClassDesc* cdptr){ if (classdesc_to_index_.find((ClassDesc*)cdptr) != classdesc_to_index_.end()) { return classdesc_to_index_[(ClassDesc*)cdptr]; } else { return -1; }}const ClassDesc*MessageGrp::index_to_classdesc(int index){ if (index < 0 || index >= nclass_) { return 0; } else { return index_to_classdesc_[index]; }}voidMessageGrp::raw_bcast(void* data, int nbyte, int from){ int nbyte_actual = nbyte; int tgop_max = nbyte; if (gop_max_ != 0) { tgop_max = gop_max_; gop_max_ = 0; bcast(nbyte_actual,from); gop_max_ = tgop_max; } for (int idat=0; idat<nbyte_actual; idat+=tgop_max) { int ndat = (idat+tgop_max>nbyte_actual)?(nbyte_actual-idat):tgop_max; Ref<GlobalMsgIter> i(topology_->global_msg_iter(this, from)); for (i->forwards(); !i->done(); i->next()) { if (i->send()) { raw_send(i->sendto(), &((char*)data)[idat], ndat); } if (i->recv()) { raw_recv(i->recvfrom(), &((char*)data)[idat], ndat); } } }}voidMessageGrp::sync(){ Ref<GlobalMsgIter> i(topology_->global_msg_iter(this, 0)); for (i->backwards(); !i->done(); i->next()) { if (i->send()) { raw_send(i->sendto(), 0, 0); } if (i->recv()) { raw_recv(i->recvfrom(), 0, 0); } } for (i->forwards(); !i->done(); i->next()) { if (i->send()) { raw_send(i->sendto(), 0, 0); } if (i->recv()) { raw_recv(i->recvfrom(), 0, 0); } }}voidMessageGrp::collect(const double *part, const int *lengths, double *whole){ raw_collect(part,lengths,whole,sizeof(double));}voidMessageGrp::raw_collect(const void *part, const int *lengths, void *whole, int bytes_per_datum){ int offset = 0; for (int i=0; i<n_; i++) { int nbytes = lengths[i]; if (i==me_) memcpy(&((char*)whole)[offset], part, nbytes); raw_bcast(&((char*)whole)[offset], nbytes, i); offset += nbytes; }}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -