解决安装mpich包之后测试程序时出现的Permission denied问题

ubuntu安装配置mpich的步骤参考下面的博文:

https://blog.csdn.net/u010177634/article/details/53048371

本博文主要是解决安装mpich包之后测试程序时出现的问题。

按照网上的教程安装完成之后,使用以下命令来测试:

mpiexec -n <number> ./examples/cpi

运行时需要自己修改<number>为自己的值,我指定的是<number>=4

在运行后出现了一下的问题,程序cpi所在的位置不允许运行。

/usr/bin/ld: cannot open output file /home/themingyi/Downloads/mpich-3.3/examples/.libs/14351-lt-cpi: Permission denied

查找资料后发现是程序所在位置权限设置的问题;修改如下:

sudo chown -R "$USER:" /home/themingyi/Downloads/mpich-3.3/examples

chmod -R 777 /home/themingyi/Downloads/mpich-3.3/examples

几点解释:

(1)The -R flag stands for recursive, so that directory and all its subfiles and subdirectories will change owner. Remove the -R flag to just change the permissions of the directory itself.

(2)运行时找到examples文件夹,就在自己下载的mpich包的解压文件中

运行结果如下:

cpi.c程序:

/* -*- Mode: C; c-basic-offset:5 ; indent-tabs-mode:nil ; -*- */↩
   /*↩
    *  (C) 2001 by Argonne National Laboratory.↩
    *      See COPYRIGHT in top-level directory.↩
    */↩
  ↩
   #include "mpi.h"↩
   #include <stdio.h>↩
   #include <math.h>↩
  ↩
  double f(double);↩
  ↩
  double f(double a)↩
  {↩
      return (4.0 / (1.0 + a * a));↩
  }↩
 ↩
  int main(int argc, char *argv[])↩
  {↩
      int n, myid, numprocs, i;↩
      double PI25DT = 3.141592653589793238462643;↩
      double mypi, pi, h, sum, x;↩
      double startwtime = 0.0, endwtime;↩
      int namelen;↩
      char processor_name[MPI_MAX_PROCESSOR_NAME];↩
  ↩
      MPI_Init(&argc, &argv);↩
      MPI_Comm_size(MPI_COMM_WORLD, &numprocs);↩
      MPI_Comm_rank(MPI_COMM_WORLD, &myid);↩
      MPI_Get_processor_name(processor_name, &namelen);↩
  ↩
      fprintf(stdout, "Process %d of %d is on %s\n", myid, numprocs,     processor_name);↩
      fflush(stdout);↩
  ↩
      n = 10000;  /* default # of rectangles */↩
      if (myid == 0)↩
          startwtime = MPI_Wtime();↩
  ↩
      MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
↩
     h = 1.0 / (double) n;↩
      sum = 0.0;↩
      /* A slightly better approach starts from large i and works ba    ck */↩
      for (i = myid + 1; i <= n; i += numprocs) {↩
          x = h * ((double) i - 0.5);↩
          sum += f(x);↩
      }↩
      mypi = h * sum;↩
  ↩
      MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WOR    LD);↩
 ↩
      if (myid == 0) {↩
          endwtime = MPI_Wtime();↩
          printf("pi is approximately %.16f, Error is %.16f\n", pi,     fabs(pi - PI25DT));↩
          printf("wall clock time = %f\n", endwtime - startwtime);↩
          fflush(stdout);↩
      }↩
  ↩
      MPI_Finalize();↩
      return 0;↩
  }↩

 

猜你喜欢

转载自blog.csdn.net/themingyi/article/details/84953263