我正在使用ff:
的openmpi
int main() {
int n = 34000000;
int count = 0;
MPI::Init();
int size = MPI::COMM_WORLD.Get_size();
int rank = MPI::COMM_WORLD.Get_rank();
for(int i=rank+2; i<=n; i+= size) {
if (isPerfect(i)) {
count++;
}
}
if (rank == 0) {
for (int i=1; i<size; i++) {
MPI::Status status;
MPI::COMM_WORLD.Recv(&n, 1, MPI::INT, MPI::ANY_SOURCE, 0, status);
count += n;
}
cout << count << " perfect #s" << n;
} else {
MPI::COMM_WORLD.Send(&count, 1, MPI::INT, 0, 0);
}
MPI::Finalize();
return 0;
}
#include<math.h>
bool isDivisible(int n, int d) {
return n % d == 0;
}
bool isPerfect(int x) {
int sum = 1;
int max = ceil(sqrt(x));
for(int i=2; i<max; i++) {
if (isDivisible(x, i))
sum += i + (x/i);
if (max*max == x)
sum += x;
}
return sum == x;
}
我使用mpirun运行程序。 mpirun -np 2 ./a.out
较大的n
值会使2 CPU 100%忙碌,几分钟后我的笔记本电脑就会关机。
我的程序中有没有问题w / c导致关机?如何了解问题?
感谢
答案 0 :(得分:0)
我的代码没有任何问题我自己测试一下。也许你的笔记本电脑由于过热而关机。