我试图实现双调使用MPI 2 ^ n个处理器排序。

我想用一个n维超立方体来为了方便这样做。使用MPI_CART_CREATE我可以创建自组织的尺寸。这样做将最大限度地发挥我的过程的效率,也减少了我必须吐出来完成它LOC数量..

谷歌搜索和litterature总是说同样的事情:

  

请注意,在n维超立方体   是n维环面与2   每过程坐标方向。   因此,对于超立方体的特殊支持   结构并不是必须的。

我还没有看到任何单个例如+ N维圆环以每坐标方向2个处理似乎只是神秘给我。有没有人有建议?

谢谢,

有帮助吗?

解决方案

那么,发现它

所以这将是对于4-d超立方体。该图案是相当直接的。在n维超立方体的每个点具有N个邻居,并且它们在此代码表示。请注意,此代码应该替代地使用异或的比特掩码的,因为可以MPI重新排序的处理,以适应你簇的物理布局。

int rank, size; //I am process RANK and we are a total of SIZE
MPI_Init(&argc, &argv); 

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

myFairShareOfNumber = totalNumber / size;

MPI_Comm nthCube;
int nDim=4;
int processPerDim [4]= {2,2,2,2};
int period [4]= {1,1,1,1};

MPI_Cart_create(MPI_COMM_WORLD, nDim, processPerDim, period, true, &nthCube);

int rankInDim;
MPI_Comm_rank(nthCube, &rankInDim);

int rank_source, rank_desta, rank_destb, rank_destc, rank_destd;
MPI_Cart_shift(nthCube, 0,1,&rank_source, &rank_desta);
MPI_Cart_shift(nthCube, 1,1,&rank_source, &rank_destb);
MPI_Cart_shift(nthCube, 2,1,&rank_source, &rank_destc);
MPI_Cart_shift(nthCube, 3,1,&rank_source, &rank_destd);
cerr << "I am known in the world as " << rankInDim << " my adjacents are -> " << rank_desta << "-" << rank_destb << "-" << rank_destc << "-" << rank_destd <<"\n";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top