コード例 #1
0
ファイル: termmgrmodel.cpp プロジェクト: vagabond1132/Code
void TermMgrModel::init()
{
	slistHeader << tr("编号") << tr("机构编号") << tr("商户编号") << tr("终端编号") << tr("终端密钥") << tr("终端密钥长度") << tr("日期");
	recData();
}
コード例 #2
0
void MPIDistribution::MakeActivityValuesLocal(bool fullLayer)
{
	if(m_commsHCsCreated == false && fullLayer == false)
	{
		this->MPICreateCommsHypercolumns();
	}
	else if(m_commsLayersCreated == false && fullLayer == true)
	{
		this->MPICreateCommLayer();	
	}

	vector<int> localHypercolumns = ((PopulationColumns*)m_population)->GetLocalHypercolumnIndexes();
	vector<Unit*> units = ((PopulationColumns*)m_population)->GetUnits();

	int totMcs =  ((PopulationColumns*)m_population)->GetNrUnitsTotal();

	vector<float> data;
	MPI_Comm* comm;

	bool allLocal = true;

	if(fullLayer == true && localHypercolumns.size()>0)
	{
		data = vector<float>(totMcs);
	
		//
		for(int i=0;i<units.size();i++)
			data[units[i]->GetUnitIdLocal()] = units[i]->GetValue();

		vector<float> recData(data.size());
		
		if(recData.size()>0)
		{
			comm = m_mpiCommLayer;
			MPI_Allreduce(&data[0],&recData[0],data.size(),MPI_FLOAT,MPI_SUM,*comm);

			m_population->SetValuesBuffer(recData);			
		}
	}
	else
	{
		for(int i=0;i<localHypercolumns.size();i++)
		{
			Hypercolumn* h = (Hypercolumn*)((PopulationColumns*)m_population)->GetHypercolumn(i);
			vector<RateUnit*> mcs = h->GetRateUnits();

			if(fullLayer == false)
			{
				vector<MPI_Comm*> mpiComms = MPIGetCommHCs();
				if(mpiComms.size()>0)
				{
					if(mpiComms.size()!=1)
					{
						//cerr<<"Assumption about locality of hypercolumns not correct!";
					}

					//assuming only one non-local hypercolumn on process
					comm = mpiComms[localHypercolumns[i]];
					data = vector<float>(h->GetTotalNrRateUnits());
					allLocal = true;
				}
			}
			else
			{
				data = vector<float>(totMcs);//mcsIndexes.size());
			}

			for(int j=0;j<mcs.size();j++)
			{
				data[mcs[j]->GetUnitIdLocalInHypercolumn()] = mcs[j]->GetValue();
			}

			if(units.size() < h->GetTotalNrRateUnits())
				allLocal = false;

			if(allLocal == false && fullLayer == false) // all local, no need to update
			{
				vector<float> recData(data.size());
				// using allreduce
				MPI_Allreduce(&data[0],&recData[0],data.size(),MPI_FLOAT,MPI_SUM,*comm);
				
				// using allgatherv
				/*for(int j=1;j<rcounts.size();j++)
				{
					displs[j] = rcounts[j-1]+displs[j-1];
				}

				MPI_Allgatherv( &data[i][0],data[i].size(),MPI_INT,&totalIndexes[0],&rcounts[0],&displs[0],MPI_INT,*comm);*/
				
				h->SetValues(recData);
			}
			else if(allLocal == true)
				h->SetValues(data);
		}
	}
}