标签: mpi

使用哪个python mpi库?

我正在开始使用MPI进行一些模拟,并希望在Python/scipy中进行编程.scipy 网站列出了许多mpi库,但我希望从使用过它的人那里获得有关质量,易用性等方面的反馈.

python mpi

15
推荐指数
1
解决办法
6035
查看次数

MPI获得最低价值的处理器

在MPI中,我正在对值进行reduce操作(最小值).这样可以正常工作,但是如何获取最小值的处理器编号并请求该处理器获取更多信息(或使用reduce操作发送附加数据)?

c reduce mpi

15
推荐指数
1
解决办法
5245
查看次数

如何使用MPI_Type_create_subarray?

很明显,它的论点是:

int MPI_Type_create_subarray(
  int ndims,
  int array_of_sizes[],
  int array_of_subsizes[],
  int array_of_starts[],
  int order,
  MPI_Datatype oldtype,
  MPI_Datatype *newtype
);
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解这个方法如何接收我们想要分割的原始数组以及它返回新子数组的位置(因为此方法应该返回一个整数).换句话说,我只是想在C++中看到这个方法的简单实现,我无法在Internet上找到它.

c++ mpi sub-array

15
推荐指数
1
解决办法
6239
查看次数

MPI_Rank为所有进程返回相同的进程号

我正试图在debian 7上使用openmpi和mpirun运行这个示例hello world程序.

#include <stdio.h>
#include <mpi/mpi.h>

int main (int argc, char **argv) {
   int nProcId, nProcNo;

   int nNameLen;
   char szMachineName[MPI_MAX_PROCESSOR_NAME];

   MPI_Init (&argc, &argv); // Start up MPI

   MPI_Comm_size (MPI_COMM_WORLD,&nProcNo); // Find out number of processes
   MPI_Comm_rank (MPI_COMM_WORLD, &nProcId); // Find out process rank
   MPI_Get_processor_name (szMachineName, &nNameLen); // Get machine name

   printf ("Hello World from process %d on %s\r\n", nProcId, szMachineName);

   if (nProcId == 0)
      printf ("Number of Processes: %d\r\n", nProcNo);

   MPI_Finalize (); // Shut down MPI

   return 0;
} …
Run Code Online (Sandbox Code Playgroud)

mpi openmpi

15
推荐指数
1
解决办法
3944
查看次数

isend和issend有什么区别?

需要澄清我对发送类型中给出的isend和issend的理解

我的理解是,一旦发送缓冲区空闲,即所有数据都被释放后,isend将返回.另一方面,Issend仅在收到获取/未获取整个数据的确认时才返回.这就是全部吗?

mpi

15
推荐指数
1
解决办法
5538
查看次数

mpirun,mpiexec和mpiexec.hydra有什么区别和关系?

我对三件事感到困惑:mpirun,mpiexec和mpiexec.hydra

在我的集群上,所有这些都存在,并且所有这些都属于英特尔.

他们之间有什么区别和关系?特别是,什么是mpiexec.hydra?为什么mpiexec和hydra之间有一个点,这是什么意思?

mpi

15
推荐指数
1
解决办法
6868
查看次数

用于生成素数的并行算法(可能使用Hadoop的map reduce)

生成素数是一个玩具问题,我经常不时尝试,特别是在尝试新的编程语言,平台或风格时.

我正在考虑尝试使用Hadoop(Map Reduce)编写素数生成算法或素数测试算法.

我想我会发布这个问题,以获得提示,参考,算法,方法.

虽然我的主要兴趣是基于Map Reduce的算法,但我不介意查看新的Hadoop编程模型或者例如查看使用PiCloud

我在Prime数字生成中似乎有一些有趣的问题:这里,这里这里,但没有任何与Parallel方法相关的问题引起了我的注意.

提前致谢.

parallel-processing primes hadoop mpi number-theory

14
推荐指数
1
解决办法
6829
查看次数

了解来自多个进程的并发文件写入

从这里:文件是否在UNIX中附加原子

考虑多个进程打开同一文件并附加到其中的情况.O_APPEND保证寻找到文件的末尾然后开始写操作是原子的.因此,只要每个写入大小<= PIPE_BUF,多个进程就可以附加到同一个文件中,并且任何进程都不会覆盖任何其他进程的写入.

我编写了一个测试程序,其中多个进程打开并写入同一个文件(write(2)).我确保每个写入大小> PIPE_BUF(4k).我期待看到进程覆盖其他人数据的实例.但那并没有发生.我测试了不同的写入大小.那只是运气还是有理由不这样做?我的最终目标是了解附加到同一文件的多个进程是否需要协调其写入.

这是完整的计划.每个进程都创建一个int缓冲区,用它填充所有值rank,打开一个文件并写入它.

规格:Opensuse 11.3 64位的OpenMPI 1.4.3

编译为:mpicc -O3 test.c,运行方式:mpirun -np 8 ./a.out

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int 
main(int argc, char** argv) {
    int rank, size, i, bufsize = 134217728, fd, status = 0, bytes_written, tmp_bytes_written;
    int* buf;
    char* filename = "/tmp/testfile.out";

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    buf = (int*) malloc (bufsize * sizeof(int));   
    if(buf == NULL) {
        status = -1; …
Run Code Online (Sandbox Code Playgroud)

c unix file-io operating-system mpi

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

如何以便携方式保留Fortran MPI程序的精度?

我有一个Fortran程序,我指定kind数字数据类型,试图保持最低精度,无论使用什么编译器来构建程序.例如:

integer, parameter :: rsp = selected_real_kind(4)
...
real(kind=rsp) :: real_var
Run Code Online (Sandbox Code Playgroud)

问题是我使用MPI来并行化代码,我需要确保MPI通信指定具有相同精度的相同类型.我使用以下方法与我的程序中的方法保持一致:

call MPI_Type_create_f90_real(4,MPI_UNDEFINED,rsp_mpi,mpi_err)
...
call MPI_Send(real_var,1,rsp_mpi,dest,tag,MPI_COMM_WORLD,err)
Run Code Online (Sandbox Code Playgroud)

但是,我发现这个MPI例程对于不同的MPI实现并没有特别好的支持,所以它实际上使我的程序不可移植.如果我省略了MPI_Type_create例程,那么我将依赖于标准MPI_REALMPI_DOUBLE_PRECISION数据类型,但如果该类型与selected_real_kind最终将由MPI传递的真实类型的选择不一致,该怎么办?我是不是只使用标准real声明的数据类型,没有kind属性,如果我这样做,我保证,MPI_REAL并且real总是会有相同的精度,无论编译器和机器?

更新:

我创建了一个简单的程序,演示了当我的内部实数比MPI_DOUBLE_PRECISION类型提供的精度更高时我看到的问题:

program main

   use mpi

   implicit none

   integer, parameter :: rsp = selected_real_kind(16)
   integer :: err
   integer :: rank

   real(rsp) :: real_var

   call MPI_Init(err)
   call MPI_Comm_rank(MPI_COMM_WORLD,rank,err)

   if (rank.eq.0) then
      real_var = 1.123456789012345
      call MPI_Send(real_var,1,MPI_DOUBLE_PRECISION,1,5,MPI_COMM_WORLD,err)
   else
      call MPI_Recv(real_var,1,MPI_DOUBLE_PRECISION,0,5,MPI_COMM_WORLD,&
         MPI_STATUS_IGNORE,err)
   end if

   print …
Run Code Online (Sandbox Code Playgroud)

precision fortran mpi

14
推荐指数
2
解决办法
1939
查看次数

安装MPI for Windows

我正在尝试为Windows 8安装MPI,所以当我搜索网络时,我得到了在XP/7上安装它的步骤,但不适用于Windows 8.链接是:http://swash.sourceforge.net/online_doc/swashimp/node9 html的

但首先,当我必须允许mpi.exe和smpd.exe通过防火墙进行通信时,这些exe文件未列出.其次,当我运行cmd(以管理员身份)并键入:"smpd -install"时,它会显示:"未知选项:-install".我猜Windows 8的命令是别的.如果有人帮助我,我将非常感激,因为我无法继续前进.

mpi windows-8.1

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