- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 MPI 的新手,所以请放轻松……无论如何,我正在尝试使用 MPI_Isend 和 MPI_Irecv 进行非阻塞通信。我写了一个名为“halo_exchange”的子程序,每次我需要在相邻子域之间交换光环单元时我都想调用它。我能够正确地划分域,并且我知道我的每个邻居等级。在下面的代码中,邻居是面向北/南的(即我使用一维行分解)。所有过程都用于计算。也就是说,所有进程都会调用这个子程序,需要交换数据。
最初我对北边界和南边界使用了一组 MPI_Isend/MPI_Irecv 调用,但后来我将其拆分,认为将“MPI_PROC_NULL”传递给函数可能有问题(边界不是周期性的)。这就是 if 语句的原因。代码继续卡在“MPI_Waitall”语句上,我不知道为什么?它实际上只是在等待,我不确定它在等待什么?
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
//---------------------------------------------------------------------------------------
// FUNCTION "halo_exchange"
//---------------------------------------------------------------------------------------
void halo_exchange(PREFIX **array, MPI_Comm topology_comm, \
int nn, int S_neighbor, int N_neighbor)
{
int halo = 2;
int M = 20;
...
double *S_Recv,*N_Recv;
double *S_Send,*N_Send;
// Receive buffers
S_Recv = (double *) calloc( M*halo,sizeof(double) );
N_Recv = (double *) calloc( M*halo,sizeof(double) );
// Send buffers
S_Send = (double *) calloc( M*halo,sizeof(double) );
N_Send = (double *) calloc( M*halo,sizeof(double) );
...
// send buffers filled with data
// recv buffers filled with zeros (is this ok...or do I need to use malloc?)
...
if (S_neighbor == MPI_PROC_NULL)
{
MPI_Status status[2];
MPI_Request req[2];
MPI_Isend(&N_Send,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[0]);
MPI_Irecv(&N_Recv,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[1]);
...
...
MPI_Waitall(2,req,status);
}
else if (N_neighbor == MPI_PROC_NULL)
{
MPI_Status status[2];
MPI_Request req[2];
MPI_Isend(&S_Send,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[0]);
MPI_Irecv(&S_Recv,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[1]);
...
...
MPI_Waitall(2,req,status);
}
else
{
MPI_Status status[4];
MPI_Request req[4];
MPI_Isend(&S_Send,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[0]);
MPI_Isend(&N_Send,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[1]);
MPI_Irecv(&N_Recv,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[2]);
MPI_Irecv(&S_Recv,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[3]);
...
...
MPI_Waitall(4,req,status);
}
...
}
这是我最初的理解,显然缺少一些东西:由于每个进程都调用这个子程序,所以所有的发送/接收函数都会被调用。然后所有进程将在它们的 MPI_Waitall 点等待相应的通信发生。当他们完成后,它继续前进……有人能告诉我为什么我的不动吗???另外,我对“标签”参数不太清楚(线索?)感谢您提前提供的所有帮助!!!
最佳答案
这段代码
MPI_Status status[4];
MPI_Request req[4];
MPI_Isend(&S_Send,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[0]);
MPI_Isend(&N_Send,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[1]);
MPI_Irecv(&N_Recv,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[2]);
MPI_Irecv(&S_Recv,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[3]);
...
...
MPI_Waitall(4,req,status);
大部分都很好,您不必在 MPI_PROC_NULL
邻居周围 if
;这就是 MPI_PROC_NULL
的用途,这样您就可以将极端情况插入 MPI 例程本身,从而大大简化面向开发人员的通信代码。
这里的问题实际上是标签。标签附加到各个消息。标签可以是任何不超过某个最大值的非负整数,但关键是发送方和接收方必须就标签达成一致。
如果您向您的北邻居发送一些带有标记 2 的数据,那很好,但现在假装您是北邻居;您将收到来自南边邻居的相同消息,标签为 2。同样,如果您要发送带有标签 1 的南邻居数据,南邻居将需要从带有标签 1 的北邻居接收数据。
所以你真的想要
MPI_Isend(&S_Send,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[0]);
MPI_Isend(&N_Send,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[1]);
MPI_Irecv(&N_Recv,halo*M,MPI_DOUBLE,N_neighbor,1,topology_comm,&req[2]);
MPI_Irecv(&S_Recv,halo*M,MPI_DOUBLE,S_neighbor,2,topology_comm,&req[3]);
根据以下 OP 评论更新:
事实上,因为 S_Recv
等已经是指向数据的指针,如:
S_Recv = (double *) calloc( M*halo,sizeof(double) );
你真正想要的是:
MPI_Isend(S_Send,halo*M,MPI_DOUBLE,S_neighbor,1,topology_comm,&req[0]);
MPI_Isend(N_Send,halo*M,MPI_DOUBLE,N_neighbor,2,topology_comm,&req[1]);
MPI_Irecv(N_Recv,halo*M,MPI_DOUBLE,N_neighbor,1,topology_comm,&req[2]);
MPI_Irecv(S_Recv,halo*M,MPI_DOUBLE,S_neighbor,2,topology_comm,&req[3]);
关于c - 使用 MPI (C) 交换 halo/ghost 单元格时出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587221/
我正在使用 DrawImage() 在具有透明背景的窗体上绘制一些图像。那些部分透明的图像会产生“光晕”效果。(看截图) 防止这种情况发生的最佳方法是什么 alt text http://www.im
我在 safari 中的选项卡上遇到了一个问题,特别是。我创建了选项卡,当我选择任何选项卡时,会在其周围创建蓝色边框。 我认为这就是光环效应。 您可以在附图中查看它。我尝试解决这个问题但没有成功。选择
我已阅读文章Using Coroutine TS with zero dynamic allocations , 并且作者坚持认为 HALO 可以用于协程并且他提供了一个 godbolt link它显
在 Highcharts 中,有没有一种方法可以动态地将“光环”效果应用于散点类型图表中的点,而不触发悬停事件? 这就是我所说的光环: http://api.highcharts.com/highch
据我所知,支持library://ns.adobe.com/flex/halo命名空间已被删除,现在我们必须使用 library://ns.adobe.com/flex/mx相反( reference
嗯,我正在使用 Bungie 的 Halo Reach API。现在我的代码将获取特定玩家的所有游戏 ID。 我想将游戏 id 存储在 mysql 数据库中,以后如果玩家想要更新数据库,脚本只会获取数
我的应用程序中的 Spark 滚动条在我使用 s|VScrollBar 的地方按我想要的方式设置了皮肤,然后在我的CSS 文件。对于我的 Halo 滚动条,我为滚动条的每个元素(箭头、拇指、轨道等)设
我正在使用 CUDA 进行图像处理,但我对像素处理有疑问。 应用 m x m 时通常对图像的边界像素做了什么卷积过滤器? 在 3 x 3卷积核,忽略 1图像的像素边界更容易处理,尤其是当代码使用共享内
这个问题几乎说明了一切。我正在使用 hallo.js它似乎使用 和 用于粗体和斜体。我的一些标记目前需要 strong和 em为了应用某些 CSS 规则。我也更喜欢 strong和 em一般到b和 i
为什么这样可以, iex(23)> > "Halo" 虽然这在 Elixir 中不行? iex(24)> > ** (ArgumentError) argument error 最佳答案 当你在 >
我是 MPI 的新手,所以请放轻松……无论如何,我正在尝试使用 MPI_Isend 和 MPI_Irecv 进行非阻塞通信。我写了一个名为“halo_exchange”的子程序,每次我需要在相邻子域之
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在我的服务器上设置了一个 dokuwiki wiki,我希望能够通过内联编辑、la Aloha Editor 或 Hallo Editor 来编辑 wiki。在 Aloha 编辑器主页上,他们提到您
我使用 Flex 2/3 几年了,刚刚回到它,升级到 Flex 4。我看到一些对 Halo 和 Spark 主题的引用,但我在以前的工作中从未涉及主题,所以我是一个有点困惑是怎么回事。我是否正确地认为
是否需要更多的工作或源代码文件来自定义您的外观(皮肤)? Spark 相对于 Halo 的可维护性和可读性如何?它是否比 Halo 更高效、更容易进行整体定制,大致相同,更少? 如果您是一位对 Hal
我正在使用 Flex 4、ActionScript 3。 在 AdvancedDataGrid 组件中,当您在单元格中处于编辑模式时,您可以按 Escape 键取消编辑(即返回单元格中的前一个值)。
我似乎无法在智能感知中找到 Draw Halo 属性。有没有办法以编程方式设置它的值?谢谢! 最佳答案 更新: public Component AddComponent(string classNa
我试图了解自从我升级到 Flash Builder 4 以来我的命名空间发生了什么。 xmlns:mx="http://www.adobe.com/2006/mxml"在申请中 并在样式表中: @na
我的 Web 应用程序中有使用 jQuery Mobile 的按钮。 单击按钮时,会添加 ui-focus 类,该类在按钮周围显示蓝色光晕。类(class)一直停留在那里,直到单击页面上的另一个位置。
以下是 ant build.xml 的作用: 我在 Project > Properties > Compiler Options > Additional Comp
我是一名优秀的程序员,十分优秀!