📄 common.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 + -