checking if compiler rejects bogus asm statements… yes
checking for support for gcc x86/x86_64 primitives… yes
checking for support for gcc x86 primitives for pre-Pentium 4… yes
checking for support for gcc ia64 primitives… no
checking for support for gcc PowerPC atomics… no
checking for support for gcc ARM atomics… no
checking for support for gcc SiCortex atomics… no
checking for support for gcc atomic intrinsics… yes
mpiexec -n
运行时需要自己修改
在运行后出现了一下的问题,程序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
#include
↩
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;↩
}↩
建议看看《Linux就该这么学》