示例#1
0
unsigned int FieldElement::totNumLocalField() const 
{
	unsigned int ret = 0;
	unsigned int nd = numLocalData();
	for ( unsigned int i = 0; i < nd; ++i )
		ret += numField( i );
	return ret;
}
unsigned int LocalDataElement::getNode( unsigned int dataId ) const {
	// Assume numData = 95. DataId = 0-9: 0, DataId=80-89:8, DataId >= 90:9
	if ( dataId == ALLDATA ) {
		if ( numLocalData() > 0 ) {
			return Shell::myNode();
		} else {
			return 0; // Sure to have some data on node 0.
		}
	}
	return dataId / numPerNode_;
}
示例#3
0
void Element::putTargetsInDigest( 
				unsigned int srcNum, const MsgFuncBinding& mfb, 
				const FuncOrder& fo, 
			   vector< vector< bool > >& targetNodes )
// targetNodes[srcDataId][node]
{
	const Msg* msg = Msg::getMsg( mfb.mid );
	vector< vector < Eref > > erefs;
	if ( msg->e1() == this )
		msg->targets( erefs );
	else if ( msg->e2() == this )
		msg->sources( erefs );
	else
		assert( 0 );

	if ( Shell::numNodes() > 1 )
		filterOffNodeTargets( 
						localDataStart(), 
						localDataStart() + numLocalData(),
						isGlobal(), Shell::myNode(), 
						erefs, targetNodes );

	for ( unsigned int j = 0; j < erefs.size(); ++j ) {
		vector< MsgDigest >& md = 
			msgDigest_[ msgBinding_.size() * j + srcNum ];
		// k->func(); erefs[ j ];
		if ( md.size() == 0 || md.back().func != fo.func() ) {
			md.push_back( MsgDigest( fo.func(), erefs[j] ) );
			/*
			if ( md.back().targets.size() > 0 )
				cout << "putTargetsInDigest: " << md.back().targets[0] << 
					", eref = " << erefs[j][0] << endl;
			else
				cout << "putTargetsInDigest: empty\n";
			*/
		} else {
			md.back().targets.insert( md.back().targets.end(), 
					erefs[ j ].begin(),
					erefs[ j ].end() );
		}
	}
}
示例#4
0
unsigned int GlobalDataElement::getNumOnNode( unsigned int node ) const
{
	return numLocalData();
}
示例#5
0
// virtual func.
unsigned int GlobalDataElement::numData() const
{
	return numLocalData();
}