我有一个关于级联MPI_Bcast调用的问题,我想知道在想要分配不同的数据块(将发送线程彼此立即更改为所有其他线程)分配时是否有什么需要牢记的问题。
试想像这样:
double buff=12345; // value is not important for this example for (i=0; ii) { // do something that can need much more time on some threads than on others } }
我希望这个示例代码可以解释这种情况。基本上,所有线程上都有一个for循环,并且在每次迭代中使用不同的发送线程,这里可能的问题是,每个线程花费不同的时间量才能再次到达MPI_Bcast。在某些接收线程可能仍在从最后一个发送者接收消息的同时,是否可以将发送线程准备就绪?我是否需要MPI_Barrier,或者可以很清楚地知道每个线程都可以到达每个调用一次,所以我可以级联任意多个Bcast吗?
编辑:当所有线程之间都没有循环,而是通过某种其他方式遍历发送线程列表时,怎么办呢?这样一来,可以连续多次使用相同的sendign线程?那么是否有可能混合使用某些东西,也许接收线程仅在等待ID为i的线程的信息时不区分该线程的第一个和第二个或以下Bcast中的一个?