Hi, I tried to run the following and got an error (the compiled program (with 
mpicc) on the sharedfolder runs ok on each individual machine):

[vorlket@server ~]$ mpirun -host server,miniserver -np 4 
/home/vorlket/sharedfolder/mpi-prime
--------------------------------------------------------------------------
ORTE was unable to reliably start one or more daemons.
This usually is caused by:

* not finding the required libraries and/or binaries on
  one or more nodes. Please check your PATH and LD_LIBRARY_PATH
  settings, or configure OMPI with --enable-orterun-prefix-by-default

* lack of authority to execute on one or more specified nodes.
  Please verify your allocation and authorities.

* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).
  Please check with your sys admin to determine the correct location to use.

*  compilation of the orted with dynamic libraries when static are required
  (e.g., on Cray). Please check your configure cmd line and consider using
  one of the contrib/platform definitions for your system type.

* an inability to create a connection back to mpirun due to a
  lack of common network interfaces and/or no route found between
  them. Please check network connectivity (including firewalls
  and network routing requirements).
--------------------------------------------------------------------------


Hi I have the following installations on archlinux:

server:

sudo pacman -S openmpi

cd ~/.ssh

ssh-keygen -t rsa

cp id_rsa.pub authorized_keys

chmod 600 authorized_key

sssh-copy-id miniserver

sudo vi /etc/ssh/sshd_config: Add the following lines

    PubkeyAuthentication yes

    RSAAuthentication yes

sudo pacman -S ntp

sudo vi /etc/ntp.conf: Add the following lines

server 0.arch.pool.ntp.org iburst

server 1.arch.pool.ntp.org iburst

server 2.arch.pool.ntp.org iburst

server 3.arch.pool.ntp.org iburst

    tos orphan 15

    logfile /var/log/ntp.log

sudo ntpd -u ntp:ntp

sudo systemctl start ntpd.service

sudo systemctl enable ntpd.service

sudo pacman -S nfs-utils

mkdir ~/sharedfolder

chmod 777 ~/sharedfolder

sudo vi /etc/exports:

    /home/vorlket/sharedfolder      miniserver(rw,sync)

sudo exportfs -arv

sudo systemctl start nfs-server.service

sudo systemctl enable nfs-server.service

miniserver:

sudo pacman -S openmpi

cd ~/.ssh

ssh-keygen -t rsa

cp id_rsa.pub authorized_keys

chmod 600 authorized_key

sssh-copy-id server

sudo vi /etc/ssh/sshd_config:

    PubkeyAuthentication yes

    RSAAuthentication yes

sudo pacman -S ntp

sudo vi /etc/ntp.conf: Add the following lines

    server 192.168.1.3

sudo systemctl start ntpd.service

sudo systemctl enable ntpd.service

sudo pacman -S nfs-utils

mkdir ~/sharedfolder

chmod 777 ~/sharedfolder

sudo vi /etc/fstab:

    server:/home/vorlket/sharedfolder       /home/vorlket/sharedfolder      nfs 
_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10,timeo=14,x-systemd.idle-timeout=1min
 0 0

sudo systemctl daemon-reload

sudo systemctl restart remote-fs.target

I tried to run the following and got an error:

[vorlket@server ~]$ mpirun -host server,miniserver -np 4 
/home/vorlket/sharedfolder/mpi-prime

--------------------------------------------------------------------------

ORTE was unable to reliably start one or more daemons.

This usually is caused by:



* not finding the required libraries and/or binaries on

  one or more nodes. Please check your PATH and LD_LIBRARY_PATH

  settings, or configure OMPI with --enable-orterun-prefix-by-default



* lack of authority to execute on one or more specified nodes.

  Please verify your allocation and authorities.



* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).

  Please check with your sys admin to determine the correct location to use.



*  compilation of the orted with dynamic libraries when static are required

  (e.g., on Cray). Please check your configure cmd line and consider using

  one of the contrib/platform definitions for your system type.



* an inability to create a connection back to mpirun due to a

  lack of common network interfaces and/or no route found between

  them. Please check network connectivity (including firewalls

  and network routing requirements).

--------------------------------------------------------------------------

mpi-prime.c:

[vorlket@server ~]$ cat /home/vorlket/mpiprac/mpi-prime.c

# include <math.h>

# include <mpi.h>

# include <stdio.h>

# include <stdlib.h>

# include <time.h>



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

int prime_number ( int n, int id, int p );

void timestamp ( );



/******************************************************************************/



int main ( int argc, char *argv[] )



/******************************************************************************/

/*

  Purpose:



    MAIN is the main program for PRIME_MPI.



  Discussion:



    This program calls a version of PRIME_NUMBER that includes

    MPI calls for parallel processing.



  Licensing:



    This code is distributed under the GNU LGPL license.



  Modified:



    07 August 2009



  Author:



    John Burkardt

*/

{

  int i;

  int id;

  int ierr;

  int n;

  int n_factor;

  int n_hi;

  int n_lo;

  int p;

  int primes;

  int primes_part;

  double wtime;



  n_lo = 1;

  n_hi = 1048576;

  n_factor = 2;

/*

  Initialize MPI.

*/

  ierr = MPI_Init ( &argc, &argv );

/*

  Get the number of processes.

*/

  ierr = MPI_Comm_size ( MPI_COMM_WORLD, &p );

/*

  Determine this processes's rank.

*/

  ierr = MPI_Comm_rank ( MPI_COMM_WORLD, &id );



  if ( id == 0 )

  {

    timestamp ( );

    printf ( "\n" );

    printf ( "PRIME_MPI\n" );

    printf ( "  C/MPI version\n" );

    printf ( "\n" );

    printf ( "  An MPI example program to count the number of primes.\n" );

    printf ( "  The number of processes is %d\n", p );

    printf ( "\n" );

    printf ( "         N        Pi          Time\n" );

    printf ( "\n" );

  }



  n = n_lo;



  while ( n <= n_hi )

  {

    if ( id == 0 )

    {

      wtime = MPI_Wtime ( );

    }

    ierr = MPI_Bcast ( &n, 1, MPI_INT, 0, MPI_COMM_WORLD );



    primes_part = prime_number ( n, id, p );



    ierr = MPI_Reduce ( &primes_part, &primes, 1, MPI_INT, MPI_SUM, 0,

      MPI_COMM_WORLD );



    if ( id == 0 )

    {

      wtime = MPI_Wtime ( ) - wtime;

      printf ( "  %8d  %8d  %14f\n", n, primes, wtime );

    }

    n = n * n_factor;

  }

/*

  Terminate MPI.

*/

  ierr = MPI_Finalize ( );

/*

  Terminate.

*/

  if ( id == 0 )

  {

    printf ( "\n");

    printf ( "PRIME_MPI - Master process:\n");

    printf ( "  Normal end of execution.\n");

    printf ( "\n" );

    timestamp ( );

  }



  return 0;

}

/******************************************************************************/



int prime_number ( int n, int id, int p )



/******************************************************************************/

/*

  Purpose:



    PRIME_NUMBER returns the number of primes between 1 and N.



  Discussion:



    In order to divide the work up evenly among P processors, processor

    ID starts at 2+ID and skips by P.



    A naive algorithm is used.



    Mathematica can return the number of primes less than or equal to N

    by the command PrimePi[N].



                N  PRIME_NUMBER



                1           0

               10           4

              100          25

            1,000         168

           10,000       1,229

          100,000       9,592

        1,000,000      78,498

       10,000,000     664,579

      100,000,000   5,761,455

    1,000,000,000  50,847,534



  Licensing:



    This code is distributed under the GNU LGPL license.



  Modified:



    21 May 2009



  Author:



    John Burkardt



  Parameters:



    Input, int N, the maximum number to check.



    Input, int ID, the ID of this process,

    between 0 and P-1.



    Input, int P, the number of processes.



    Output, int PRIME_NUMBER, the number of prime numbers up to N.

*/

{

  int i;

  int j;

  int prime;

  int total;



  total = 0;



  for ( i = 2 + id; i <= n; i = i + p )

  {

    prime = 1;

    for ( j = 2; j < i; j++ )

    {

      if ( ( i % j ) == 0 )

      {

        prime = 0;

        break;

      }

    }

    total = total + prime;

  }

  return total;

}

/******************************************************************************/



void timestamp ( void )



/******************************************************************************/

/*

  Purpose:



    TIMESTAMP prints the current YMDHMS date as a time stamp.



  Example:



    31 May 2001 09:45:54 AM



  Licensing:



    This code is distributed under the GNU LGPL license.



  Modified:



    24 September 2003



  Author:



    John Burkardt



  Parameters:



    None

*/

{

# define TIME_SIZE 40



  static char time_buffer[TIME_SIZE];

  const struct tm *tm;

  size_t len;

  time_t now;



  now = time ( NULL );

  tm = localtime ( &now );



  len = strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm );



  printf ( "%s\n", time_buffer );



  return;

# undef TIME_SIZE

}

Reply via email to