0

我使用ff:

  • 旧双核笔记本电脑
  • Ubuntu 14.04
  • 打开mpi

    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 是否有问题导致关机?如何获得解决问题的想法?

谢谢

4

1 回答 1

0

您的代码没有任何问题我自己测试它。也许你的笔记本电脑因为过热而关机。

于 2014-12-24T10:22:40.937 回答