⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 mpi实现并行排序算法
💻 H
字号:
#ifndef COMMON_H_#define COMMON_H_#include <fstream>#include <string>#include <vector>#include <algorithm>#include <iostream>#undef SEEK_SET#undef SEEK_END#undef SEEK_CUR#include <mpi.h>using namespace std;const int ROOT = 0;MPI_Status status;class NodeSite{public:	int globalRank;	MPI_Comm	commArea;	int			rank;	int			nodeCount;		NodeSite(){		globalRank=-1;		rank=-1;		nodeCount=-1;	}		void updateSite(MPI_Comm world){		int oldRank=rank;		int oldNodeCount=nodeCount;		//printf("Process[%d]: 555555555555555555555555555555555", globalRank);		commArea = world;		MPI_Comm_rank(world, &rank);		MPI_Comm_size(world, &nodeCount);				printf("Process[%d]: ", globalRank);		cout<<"rank:"<<oldRank<<"-->"<<rank;		cout<<" size:"<<oldNodeCount<<"-->"<<nodeCount<<endl;	}		/**	 * 返回当前站点属于的通讯组的标识	 */	int getGroup(){		return (rank<nodeCount/2)?0:1;	}		/**	 * 一个结点符合一下情况时认为是独立的:	 * 当前通讯域有只剩下自己	 */	bool isAlone(){		return nodeCount<=1;	}		/**	 * 当前结点如果位于通讯组前端,则为真	 */	bool isFront(){		int separator = nodeCount/2;		return rank<separator;	}		/**	 * 当前通讯区域节点数如果为奇数,返回真	 */	bool isOddNodeCount(){		return nodeCount%2;	}		/**	 * 交换数据时,自己的交换对象结点号	 */	int getReportTarget(){		int separator = nodeCount/2;						if (isFront())			return rank%separator+separator;		else			return rank%separator;	}	};namespace console{	void print(vector<int> v){		int* iterator = v.begin().base();		//print(iterator, iterator+v.size()-1);	}	void print(int*& begin, int* end) {		using namespace std;		cout<<*begin;		if (end-begin+1<20)			for (int* i=begin+1; i<=end; i++)				cout<<","<<*i;		else{			cout<<"...("<<end-begin+1<<")..."<<*end;			cout<<endl;		}	}}namespace util{	/**	 * 从指定文件读取需要进行排序的数据。	 * 保存到一个数组里,并返回,数组第一个元素是数据的个数。	 * 使用完毕后注意释放该数组。	 */ 	int* getNumbers(char* file) {		using namespace std;		fstream fileStream(file);		vector<int> numbers;		string str;		char c;		while (!fileStream.eof()) {			fileStream.get(c);			if (c!=';') {				str.push_back(c);			} else {				numbers.push_back(atoi(str.data()) );				str.clear();			}		}		fileStream.close();			int length = numbers.size();		int* array = new int[length];			for (int i=0; i<length; i++) {			array[i] = numbers[i];		}		return array;	}	/**	 * 写数据到文件	 */	void writeToFile(int array[], int length, string filename)	{	    using namespace std;	    ofstream ofs(filename.data());	    for(int i=0;i<length;i++)	    {		ofs<<array[i]<<";";	    }	    ofs.close();	}}#endif /*COMMON_H_*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -