首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MPI_CART将进程映射到超多维数据集

如何使用MPI_CART将进程映射到超多维数据集
EN

Stack Overflow用户
提问于 2010-03-05 06:32:11
回答 1查看 3.2K关注 0票数 3

我试图在2^n处理器上使用MPI实现双声速排序。

为了方便起见,我想使用一个n维超立方体。使用MPI_Cart_Create,我可以创建自组织维度。这样做将使我的过程效率最大化,同时也会减少我不得不吐口水才能完成的LOC数量。

谷歌和文学家总是说同样的话:

注意,n个-dimensional超立方体是n个-dimensional环面,每个坐标方向有2个进程。因此,对超立方体结构的特殊支持是不必要的。

我还没有见过任何一个例子+n个-dimensional环面,每个坐标方向都有两个进程,这对我来说似乎只是个谜。有人需要建议吗?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-09 03:58:29

好吧,找到了

所以那将是一个四维超立方体。这种模式相当直截了当。在n维超立方体中,每个点都有N个邻域,它们在这段代码中表示.请注意,应该使用此代码而不是xoring掩码,因为MPI可以重新排序进程以适应集群的物理布局。

代码语言:javascript
复制
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";
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2384969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档