我是并行计算的新手,所以我决定从使用Mpich2的hello world编译开始。这是代码:
/* helloworld.c */
#include <stdio.h>
/* You MUST include this for the MPI_* functions */
#include "mpi.h"
int main(int argc, char **argv) {
int rank;
char host[150];
int namelen;
/* Initialize MPI. This handles mpich-specific command line arguments */
MPI_Init(&argc, &argv);
/* Get my rank. My rank number gets stored in the 'rank' variable */
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
/* Look up what computer I am running on. Store it in 'host' */
MPI_Get_processor_name(host,&namelen);
printf("Hello world (Rank: %d / Host: %s)\n", rank, host);
fflush(stdout);
/* Finalize: Close connections to the other children, clean up memory
* the MPI library has allocated, etc */
MPI_Finalize();
return 0;
}
我编译并运行它:
mpicc helloworld.c -o myhello
mpirun -nc 2 ./myhello
有效。但是我注意到通过增加挂钟时间增加的CPU数量,我预计它会减少?!此外,对CPU的数量没有限制,但是我的笔记本电脑有5个核心,但我可以根据需要设置代码中的CPU数量,如果我超过实际CPU的数量,我预计会出现一些错误。
答案 0 :(得分:2)
首先,理论上的并行处理应该如你所说:
这虽然在理论上很容易想到,但在实践中它实际上是一个完全不同的故事。
在不了解您的项目的情况下,我认为该程序几乎没有可并行处理和/或它如此快/小,以至于程序必须执行的消息实际上正在减慢它。不要忘记它不仅仅是在那里运行的程序还有很多其他的进程在后台完成。
我建议做的事情可以真正展示parrllel进程的有用性,例如将数组拆分成不同的段并使用不同的处理器计算每个段(即应该是一个巨大的数组)或读取不同的文本文件同时做一些工作。
作为最后一点,您应该真正研究Amdahl's law,它解释了系统可以通过并行处理加速的速度。