Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SSH群集上的MPI编译问题_C++_Mpi_Cluster Computing - Fatal编程技术网

C++ SSH群集上的MPI编译问题

C++ SSH群集上的MPI编译问题,c++,mpi,cluster-computing,C++,Mpi,Cluster Computing,我是在集群环境中运行MPI的新手。我想在ssh进入集群上的节点并加载相关MPI模块(即MPI/openmpi-x86_64)后尝试此示例代码。mpiCC和mpi++命令都不起作用,因此产生了以下错误。我是否缺少包含部分中的某些内容,或者我是否需要加载另一个包 编辑:它不是一个简单的声明,因为使用相同的类型替换多个MPI函数的返回值 # include <cmath> # include <cstdlib> # include <ctime> # include

我是在集群环境中运行MPI的新手。我想在ssh进入集群上的节点并加载相关MPI模块(即MPI/openmpi-x86_64)后尝试此示例代码。mpiCC和mpi++命令都不起作用,因此产生了以下错误。我是否缺少包含部分中的某些内容,或者我是否需要加载另一个包

编辑:它不是一个简单的声明,因为使用相同的类型替换多个MPI函数的返回值

# include <cmath>
# include <cstdlib>
# include <ctime>
# include <iomanip>
# include <iostream>
# include <mpi.h>

using namespace std;

int main ( int argc, char *argv[] );
int prime_number ( int n, int id, int p );
void timestamp ( );

//****************************************************************************80

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

//****************************************************************************80
//
//  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:
//
//    16 June 2016
//
//  Author:
//
//    John Burkardt
//
{
  int i;
  int id;
  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 = 262144;
  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 ( );
    cout << "\n";
    cout << "PRIME_MPI\n";
    cout << "  C++/MPI version\n";
    cout << "\n";
    cout << "  An MPI example program to count the number of primes.\n";
    cout << "  The number of processes is " << p << "\n";
    cout << "\n";
    cout << "         N        Pi          Time\n";
    cout << "\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;

      cout << "  " << setw(8) << n
           << "  " << setw(8) << primes
           << "  " << setw(14) << wtime << "\n";
    }
    n = n * n_factor;
  }
//
//  Terminate MPI.
//
  MPI_Finalize ( );
//
//  Terminate.
//
  if ( id == 0 ) 
  {
    cout << "\n";
    cout << "PRIME_MPI - Master process:\n";
    cout << "  Normal end of execution.\n";
    cout << "\n";
    timestamp ( );
  }

  return 0;
}
//****************************************************************************80

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

//****************************************************************************80
//
//  Purpose:
//
//    PRIME_NUMBER returns the number of primes between 1 and N.
//

//
//  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;
}
//****************************************************************************80

void timestamp ( )

//****************************************************************************80
//
//  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 );

  cout << time_buffer << "\n";

  return;
# undef TIME_SIZE
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
intmain(intargc,char*argv[]);
整数素数(整数n,整数id,整数p);
无效时间戳();
//****************************************************************************80
int main(int argc,char*argv[])
//****************************************************************************80
//
//目的:
//
//MAIN是PRIME\u MPI的主程序。
//
//讨论:
//
//此程序调用质数的一个版本,其中包括
//MPI要求并行处理。
//
//许可证:
//
//此代码在GNU LGPL许可证下分发。
//
//修改:
//
//2016年6月16日
//
//作者:
//
//约翰·伯卡特
//
{
int i;
int-id;
int n;
整数n_因子;
int n_hi;
内格罗;
INTP;
整数素数;
整数素数部分;
双倍时间;
n_lo=1;
n_hi=262144;
n_系数=2;
//
//初始化MPI。
//
ierr=MPI_Init(&argc,&argv);
//
//获取进程数。
//
ierr=MPI通信大小(MPI通信世界和p);
//
//确定此进程的级别。
//
ierr=MPI通信等级(MPI通信世界和id);
如果(id==0)
{
时间戳();

难道这个错误与MPI没有任何关系吗?你(或是写这段代码的人)只是忘了在使用它之前声明
ierr
。可能重复感谢,那么,它应该定义为整数或布尔值,我是指MPI函数的返回值?@Ozgu,结果类型是
int
。您可以参考或MPI API说明页