标签: mpi

MPI全球执行时间

我正在研究一个将数组与矩阵相乘的小应用程序.它没有任何问题.我正在努力衡量应用程序的执行时间.我可以找到每个进程的执行时间(开始和结束),但我需要全局时间.

这是我的代码:

int main(int argc, char **argv){
    int rang, procesus;
    MPI_Status statut;
    double start, end, max_end = 0, min_start = 10000;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rang);
    MPI_Comm_size(MPI_COMM_WORLD, &procesus);
    MPI_Barrier(MPI_COMM_WORLD);

    start = MPI_Wtime();
    printf("Starting time of process n. %d %f\n",rang, start);
    if(rang==0){
        //Master work
    }else{
        //slaves work
    }
    MPI_Barrier(MPI_COMM_WORLD);
    end = MPI_Wtime();
    printf("Ending time of process n.%d %f\n\n\n",rang, end);

    MPI_Finalize();
//Out of the Parallelized task

    if(min_start > start){
        min_start = start;
        printf("New minumum starting time %f\n", min_start);
    }

    if(max_end < end){
        max_end …
Run Code Online (Sandbox Code Playgroud)

runtime mpi

19
推荐指数
2
解决办法
2万
查看次数

MPI_Send()和MPI_Ssend()之间的区别?

我知道MPI_Send()是一个阻塞调用,它等待修改应用程序缓冲区以便重用是安全的.为了使发送调用同步(应该与接收器握手),我们需要使用MPI_Ssend().我想知道两者之间的区别.假设我需要在进程中发送固定数量的字节,哪一个应该花费更长的时间?
对我来说,代码适用于MPI_Send()调用,但无限期地等待MPI_Ssend().可能的原因是什么?

最重要的是,我非常确定在使用时接收过程中正在接收数据MPI_Send(),因此这种推断无助于在使用时等待握手MPI_Ssend().

或者我可以得出结论:MPI_Send()您可以将数据发送到自我过程但不能使用MPI_Ssend()

ipc mpi openmpi

19
推荐指数
1
解决办法
1万
查看次数

与雪SOCK以外的集群进行并行计算

最近在R2.14中增加了对并行计算的直接支持,这引发了一个问题.在R中创建集群有很多选项.我snow定期使用SOCK集群,但我知道还有其他方法,如MPI.我使用SOCK snow集群因为我不需要安装任何其他软件(我使用Fedora 13).

那么,我的具体问题:

  1. 使用非SOCK群集时性能是否有所提升?
  2. 使用非SOCK群集在多台计算机上创建群集更容易吗?

parallel-processing r mpi

18
推荐指数
1
解决办法
2385
查看次数

通过MPI命令行传递参数

我正在使用MPI调用使用c ++在多个进程上运行一个过程.我的Main函数中的前几行看起来像:

int main(int argc, char *argv[]){
int comm_sz;
int my_rank;

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

x = atoi(argv[4]);
y = atoi(argv[5]);
Run Code Online (Sandbox Code Playgroud)

现在当我执行并运行我的程序时

mpiexec -n 1 program 10 10
Run Code Online (Sandbox Code Playgroud)

我希望x和y被赋值为10和10,因为它们是传递的第4和第5个参数.但这不会发生,它会相应地将这些变量分配给0和0.并且我的程序没有按预期运行.

当我更改这些数字时,我的串行代码正在运行.它只是我是MPI的新手.

你能说明我哪里出错吗?

c++ mpi

18
推荐指数
1
解决办法
1万
查看次数

R:foreach循环如何找到应该调用的函数?

当我使用%dopar%调用自定义函数的foreach循环(使用)时,我遇到了问题.使用Linux时没有真正的问题,但是当我使用Windows时,无法找到自定义的功能.很难用文字解释这个问题,所以我写了一个小例子来展示它.假设我有三个简单函数的集合,其中FUN2(using %do%)和FUN3(using %dopar%)调用第一个函数(FUN):

FUN <- function(x,y,z) { x + y + z }
FUN2 <- function(a, b) {
  foreach(i=1:3) %do% FUN(i, a, b)
}
FUN3 <- function(a, b) {
  foreach(i=1:3) %dopar% FUN(i, a, b)
}
Run Code Online (Sandbox Code Playgroud)

这些函数存储在一个名为的脚本中foreach_testfunctions.R.在另一个脚本(foreach.test)中我发布了这些函数,使用library(doParallel)并尝试使用这些函数.首先我用Linux做,一切正常:

source("foreach_testfunctions.R")
a <- 2
b <- 3
library(doParallel)
registerDoParallel()

foreach(i=1:3) %do% FUN(i, a, b)    ## works fine
FUN2(a, b)                          ## works fine
foreach(i=1:3) %dopar% FUN(i, a, b) ## …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r mpi

18
推荐指数
1
解决办法
8902
查看次数

Hadoop MapReduce vs MPI (vs Spark vs Mahout vs Mesos) - When to use one over the other?

I am new to parallel computing and just starting to try out MPI and Hadoop+MapReduce on Amazon AWS. But I am confused about when to use one over the other.

For example, one common rule of thumb advice I see can be summarized as...

  • Big data, non-iterative, fault tolerant => MapReduce
  • Speed, small data, iterative, non-Mapper-Reducer type => MPI

But then, I also see implementation of MapReduce on MPI (MR-MPI) which does not provide fault tolerance but seems …

parallel-processing hadoop mapreduce mpi

17
推荐指数
2
解决办法
6827
查看次数

何时在MPI中发送和接收消息时使用标签?

我不确定何时必须在MPI发送,接收呼叫中使用不同的数字作为标记字段.我读过这篇文章,但我无法理解.

有时候,A可能需要向B发送许多不同类型的消息.而不是B必须通过额外的措施来区分所有这些消息,MPI允许发送者和接收者也用消息指定消息ID(称为标记) ).当进程B仅请求具有特定标签号的消息时,具有不同标签的消息将由网络缓冲,直到B为它们做好准备.

我是否必须使用标签,例如,当我在进程A中有多个调用"isend"(带有不同的标签)并且在进程B中只有1个调用"ireceive"时?

mpi

17
推荐指数
3
解决办法
2万
查看次数

Kubernetes和MPI

我想在我的Kubernetes集群上运行MPI作业.上下文是我实际上运行的是一个现代的,包装良好的容器化应用程序,但部分工作量是一个传统的MPI工作,不会很快重写,我想把它变成一个kubernetes"世界观"尽可能地.

最初的一个问题:是否有人在kube集群上运行MPI作业有任何成功?我见过Christian Kniep的工作是让MPI工作在Docker容器中运行,但是他正在沿着docker swarm路径(使用每个容器中运行的consul发现同行)并且我想坚持kubernetes(已经知道了所有同行)并从外部将此信息注入容器中.我完全可以控制应用程序的所有部分,例如,我可以选择使用哪个MPI实现.

关于如何继续,我有几个想法:

  1. 包含slurm和应用程序代码的胖容器 - >在容器启动时使用适当的信息填充slurm.conf - >使用srun作为容器入口点来启动作业

  2. 仅使用OpenMPI(无淤泥)的更轻薄的容器 - >使用外部信息(由kubernetes提供)在容器中填充rankfile - >使用mpirun作为容器入口点

  3. 更简洁的方法,我基本上通过设置一些环境变量(例如OpenMPI ORTE)来"伪造"MPI运行时 - >直接运行mpicc'd二进制文件(通过env vars可以找到它的同行) )

  4. 一些其他选择

  5. 绝望地放弃

我知道尝试将"已建立"的工作流程(如MPI)与kubernetes和容器的"新热点"混合起来有点阻抗不匹配,但我只是在寻找指针/陷阱之前我走得太远了.如果什么都不存在,我很乐意破解一些东西并将其推回上游.

mpi openmpi kubernetes

17
推荐指数
1
解决办法
3430
查看次数

MPI中的沟通者和群体有什么区别?

我已经阅读了这些术语的定义,我的解释是团体和沟通者之间存在一对一的关系.组是希望彼此通信的一组进程,并且通信器是组的实现.

它是否正确?如果是这样,为什么有两个不同的术语?

mpi communicator

16
推荐指数
2
解决办法
7566
查看次数

使用MPI分散不同大小的矩阵块

(假设所有矩阵都按行主顺序存储.)说明问题的一个例子是在3x3网格上分布10x10矩阵,以便每个节点中子矩阵的大小看起来像

|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 4x3 | 4x3 | 4x4 |
|-----+-----+-----|
Run Code Online (Sandbox Code Playgroud)

我在Stackoverflow上看过很多帖子(例如使用MPIMPI分区矩阵将C块中的2D数组块发送到块中).但它们只处理相同大小的块(在这种情况下,我们可以简单地使用 MPI_Type_vectorMPI_Type_create_subarray只有一个MPI_Scatterv调用).

所以,我想知道在MPI中将矩阵分散到处理器网格中的最有效方法是什么,其中每个处理器都有一个具有指定大小的块.

PS我也看了MPI_Type_create_darray,但似乎没有让你为每个处理器指定块大小.

c parallel-processing message-passing distributed-computing mpi

16
推荐指数
1
解决办法
4562
查看次数