如果我错了,请纠正我,但我的理解是Hadoop不使用MPI进行不同节点之间的通信.
这有什么技术原因?
我可能会冒一些猜测,但我不知道MPI如何在"引擎盖下"实施,以了解我是否正确.
想想看,我对Hadoop的内部结构也不是很熟悉.我在概念层面理解框架(map/combine/shuffle/reduce以及它如何在高级别工作),但我不知道细节的实现细节.我一直认为Hadoop 通过TCP连接传输序列化数据结构(可能是GPB),例如在混洗阶段.如果不是这样,请告诉我.
如今,Erlang作为一种在多核上编写并行程序的语言,现在引起了很多人的兴趣.我听说有人认为Erlang的消息传递模型比主流共享内存模型(如线程)更容易编程.
相反,在高性能计算社区中,主要的并行编程模型是MPI,它也实现了消息传递模型.但是在HPC领域,这种消息传递模型通常被认为很难编程,人们认为OpenMP或UPC等共享内存模型更容易编程.
有谁知道为什么在IT和HPC世界中对消息传递与共享内存的看法存在这样的差异?是否由于Erlang和MPI如何实现消息传递的一些根本区别,使得Erlang风格的消息传递比MPI更容易?还是有其他原因吗?
据我所知,MPI让我能够更好地控制集群中不同节点的通信方式.
在MapReduce/Hadoop中,每个节点进行一些计算,与其他节点交换数据,然后整理其结果分区.看起来很简单,但由于您可以迭代这个过程,甚至像K-means或PageRank这样的算法也能很好地适应模型.在具有调度位置的分布式文件系统上,性能显然很好.相比之下,MPI让我可以明确控制节点如何相互发送消息.
任何人都可以描述一个集群编程场景,其中更通用的MPI模型比简单的MapReduce模型更明显吗?
我已经定义了一个自定义结构,并希望使用MPI_Bsend(或MPI_Send)将其发送到另一个MPI进程.
这是我的结构:
struct car{
int shifts;
int topSpeed;
}myCar;
Run Code Online (Sandbox Code Playgroud)
但是,除了原始类型之外,MPI似乎不支持复杂数据类型的直接"传输",如上面的结构.我听说我可能不得不使用"序列化".我该如何处理它并将'myCar'发送到进程5?
什么可能导致C,MPI程序使用在Gentoo Linux集群上运行的名为SUNDIALS/CVODE(一个数字ODE求解器)的库来重复Signal 15 received.
?
该代码是由MPI,Sundials,Linux,C还是谁发布的?
请注意,我几乎是初学者,拥有以下技术:C,MPI,SUNDIALS/CVODE和Linux.
通过Google搜索消息,我找不到任何与之相关的内容.我甚至不知道从哪里开始看.(这是其中一个问题,其中"任何有用的"都是字面意思.)
(作为抛开/事后的想法,为什么Chrome的字典不能识别"google搜索"这个词?).
我想知道什么时候需要使用屏障?例如,在分散/聚集之前/之后我需要它吗?或者OMPI应该确保在分散/收集之前所有进程都已达到这一点?同样,在广播之后我可以期望所有进程都已收到消息吗?
到目前为止,我的应用程序正在读取带有整数列表的txt文件.这些整数需要由主进程存储在数组中,即排名为0的处理器.这样可以正常工作.
现在,当我运行程序时,我有一个if语句检查它是否是主进程,如果是,我正在执行MPI_Scatter
命令.
根据我的理解,这将使用数字细分数组并将其传递给从属进程,即所有rank> 0.但是,我不知道如何处理MPI_Scatter
.从属进程如何"订阅"以获取子数组?如何告诉非主进程对子数组执行某些操作?
有人可以提供一个简单的例子来向我展示主进程如何从数组中发出元素,然后让奴隶添加总和并将其返回给主数据库,将所有总和加在一起并将其打印出来?
我的代码到目前为止:
#include <stdio.h>
#include <mpi.h>
//A pointer to the file to read in.
FILE *fr;
int main(int argc, char *argv[]) {
int rank,size,n,number_read;
char line[80];
int numbers[30];
int buffer[30];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
fr = fopen ("int_data.txt","rt"); //We open the file to be read.
if(rank ==0){
printf("my rank = %d\n",rank);
//Reads in the flat file of integers and stores it in the array 'numbers' of type int.
n=0;
while(fgets(line,80,fr) …
Run Code Online (Sandbox Code Playgroud) 我计划将MPI用于我的C++代码.我在我的电脑上安装了MPICH2.但我对MPI知之甚少,希望能找到一些材料来阅读.我希望你的专家可以向我推荐一些好的材料.任何建议将被认真考虑.
我在MPI中实现了一个程序,其中主进程(rank = 0)应该能够接收来自其他进程的请求,这些进程要求只知道root的变量值.如果我按等级0制作MPI_Recv(...),我必须指定向根发送请求的进程的等级,但我无法控制,因为进程不按1,2,3的顺序运行,....如何从任何级别接收请求并使用发送过程的编号向其发送必要的信息?
我知道一些机器学习算法就像随机森林,它们本质上应该并行实现.我做家务并发现有这三个并行编程框架,所以我有兴趣知道这三种并行性之间的主要区别是什么?
特别是,如果有人能指点我一些研究比较它们之间的区别,那将是完美的!
请列出每个并行度的优缺点,谢谢