- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以最近,我一直在研究开发一些异步算法。我正在做一些并行性能研究,我一直怀疑我没有正确理解有关各种非阻塞 MPI 函数的一些细节。
我在这里看到了一些有见地的帖子,即:
关于使用非阻塞功能,我不确定或只想澄清一些事情,我认为这些事情可能会帮助我提高当前软件的性能。
来自 MPI 3.0 标准的非阻塞通信部分:
A nonblocking send start call initiates the send operation, but does not complete it. The send start call can return before the message was copied out of the send buffer. A separate send complete call is needed to complete the communication, i.e., to verify that the data has been copied out of the send buffer. With suitable hardware, the transfer of data out of the sender memory may proceed concurrently with computations done at the sender after the send was initiated and before it completed.
...
If the send mode is standard then the send-complete call may return before a matching receive is posted, if the message is buffered. On the other hand, the receive-complete may not complete until a matching receive is posted, and the message was copied into the receive buffer.
因此,作为关于 MPI_Isend
(以及类似的 MPI_Irecv
)的第一组问题,似乎要确保非阻塞发送完成,我需要使用某种机制来检查它是否完整,因为在最坏的情况下,可能没有合适的硬件来同时传输数据,对吧?因此,如果我从不在非阻塞发送之后使用 MPI_Test
或 MPI_Wait
之类的东西,那么 MPI_Isend
可能永远不会真正发出消息,对吧?
这个问题适用于我的一些工作,因为我通过 MPI_Isend
发送消息并且在收到预期的响应消息之前不会实际测试完整性,因为我想避免 MPI_Test 的开销
调用。虽然这种方法一直有效,但根据我的阅读,它似乎是错误的。
此外,第二段似乎是说对于标准的非阻塞发送,MPI_Isend
,它可能甚至开始发送它的任何数据直到目的地进程调用了一个匹配的接收。鉴于 MPI_Probe
/MPI_Iprobe
的可用性,这是否意味着 MPI_Isend
调用将至少发送一些初步元数据消息的大小、来源和标记,以便目标进程上的探测功能可以知道要将消息发送到那里,因此目标进程实际上可以发布相应的接收?
相关的是一个关于探测器的问题。在探测和取消部分,标准说
MPI_IPROBE(source, tag, comm, flag, status)
returnsflag = true
if there is a message that can be received and that matches the pattern speci fed by the argumentssource
,tag
, andcomm
. The call matches the same message that would have been received by a call toMPI_RECV(..., source, tag, comm, status)
executed at the same point in the program, and returns in status the same value that would have been returned byMPI_RECV()
. Otherwise, the call returnsflag = false
, and leavesstatus
undefi ned.
从上面的段落开始,很明显探测会告诉您是否有一条可用消息可以接收到对应于指定的 source
、tag
和 通信
。我的问题是,您是否应该假设成功探测的相应发送数据实际上尚未传输?
现在对我来说似乎是合理的,在阅读了标准之后,探测器知道的消息确实不需要是本地进程实际上已经完全接收到的消息。鉴于之前关于标准非阻塞发送的详细信息,您似乎需要在进行探测后发布接收以确保源非阻塞标准发送将完成,因为有时源可能会发送大消息MPI 不想复制到某个内部缓冲区,对吗?无论哪种方式,似乎在探测后发布接收是确保您实际从相应发送中获取完整数据的方式。这是正确的吗?
后一个问题与我正在执行 MPI_Iprobe
调用的代码中的一个实例有关,如果它成功,我将执行 MPI_Recv
调用以获取消息。但是,我认为现在这可能会有问题,因为我在想如果探测成功,那就意味着它已经得到了全部信息。这对我来说意味着 MPI_Recv
会很快运行,因为完整的消息已经在本地内存中的某个地方。但是,我觉得这是一个不正确的假设,现在对此进行一些澄清会有所帮助。
最佳答案
MPI 标准不要求进度线程。这意味着 MPI_Isend()
在通信取得进展之前可能什么都不做。大多数 MPI 子例程在幕后发生进展,MPI_Test()
, MPI_Wait()
和 MPI_Probe()
是最明显的。
恐怕您正在混合进度和同步发送(例如 MPI_Ssend()
)。
MPI_Probe()
是一个本地操作,这意味着它不会联系发件人并询问是否已发送或处理它。
在性能方面,您应该尽可能避免意外消息,这意味着在另一端发送消息之前应该在一端发布接收。
这里需要在性能和便携性之间进行权衡:
请记住大多数 MPI 实现(阅读这不是 MPI 标准强制要求的,您不应该依赖它)以急切模式发送小消息。这意味着 MPI_Send()
如果消息足够小,可能会立即返回(足够小取决于您的 MPI 实现、如何调整或使用哪种互连)。
关于c - 关于MPI Non-blocking details based on standard的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56827676/
这是我的代码。 1 Demo 1 2 Demo 2 3 Demo 3 我想做的是——如果任何一个的细节标签已打开,我打开/查看另一个 标签,那么较早的标签应该关闭/
我正在尝试构建一个 iPad Master-Detail 应用程序。主视图只是一个 TableViewController。我想为用户在主视图中点击的每个不同单元格更改完整的详细信息 View 。其中
我目前在我的子主题的 functions.php 文件中有一些代码,它应该在我的 WooCommerce 结帐页面上将“账单详细信息”更改为“运输详细信息”。 但是,当我更新到 WooCommerce
我想刷新 MasterDetail 项目中的详细信息页面。 (在模态 Controller 中进行编辑后应刷新详细信息。)我知道将代码块放在详细信息页面中的何处以强制刷新。我只是不知道要使用什么代码来
我的应用程序中有一个主从模式,但我希望细节能够切换 View 。我想尽可能多地节省空间,以便“内容”既漂亮又宽敞。 如何从一个“细节”导航到另一个“细节”,同时让“向上”按钮返回“主”列表?(参见“细
在过去,我有一个包含这样一个表的数据库: ProductID | ProductName | InStockWareHouse1 | InstockWareHouse2 ---------------
boost::details::pool::pthread_mutex 和 boost::details::pool::null_mutex 有什么区别。 我看到在最新的 boost 版本 - 1.4
我只获取数据源的详细信息,但没有获取 google fit 消耗的卡路里。如何获得燃烧卡路里的详细信息。我可以从( Google Fitness API returns only {} as resu
我刚刚在 Xcode 5 中创建了一个新的“Master-Detail application”项目。 然后在我的主视图 Controller 上,我将 TableView 更改为静态,并添加了一些项
我试图在“me”/me 部分下命名多个路由,以便在此命名空间下拥有所有基于用户配置文件/帐户的内容,以实现更干净的路由。 解决这个问题的最佳方法是什么?我发现重写默认的 REST 路由(profile
所以我是 Android 开发的新手,并试图了解主/细节流程设计。因此,我使用 Eclipse 为您创建的默认类 - 因此 ScreenDetailActivity、ScreenDetailFragm
我使用 var contacts:[details] 编写代码? = nil 我遇到了无法访问 contacts?.count 的问题,我不得不在任何地方使用可选值。例如 contacts[index
我已经成功地将 www.my-website/blog.php 重写为 www.my-website/blog 现在,我想对我的 blog-detail.php 页面做进一步的事情 从 www.my-
在问这个问题之前,我想说 this stackoverflow 中的问题与我的问题非常相似,但概念仍然不清楚,非常困惑。 我想了解依赖倒置原则,但我无法完全理解它? 下面是DIP说的两点 A. Hig
我是 SYCL/OpenCL/GPGPU 的新手。我正在尝试构建和运行常量加法程序的示例代码, #include #include #include #include namespace sy
我正在使用这个 Ray Wenderlich tutorial作为我正在从事的项目的指南。但是,我正在尝试扩展此模板以合并子目录、子子目录、子子子目录等。 例如,如果您单击主/主目录屏幕中的“Cand
我正在尝试创建一个小扩展,以便我可以从详细 View Controller 访问主视图 Controller 以更新变量。 import UIKit extension UISplitViewCont
我正在尝试基于由 MySQL 数据库支持的 Entity Framework 6 DbContext 实现基本的主从 View 。表格配置尽可能简单: 我的测试应用程序的表单包含两个 ComboBox
我知道这是一个老问题并且已经answered在 objective-c 中。但我正在寻找 Swift 中的解决方案。我在 AppDelegate 中的 splitviewController 代码如下
我的句子很少。在第一句话的结尾(在这一行),我想添加剧透,这将保留故事的其他部分。我正在尝试这样做,但是当单击更多时.. - 我的文本跳到下一行。我需要在一行中继续文本更多...请不要告诉我任何脚本,
我是一名优秀的程序员,十分优秀!