Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Lập trình song song

  1. #1
    Ngày gia nhập
    05 2015
    Bài viết
    1

    Mặc định Lập trình song song

    Mình mới học môn Lập trình song song. Đây là chương trình của thầy, mình nghĩ hoài cũng không hiểu phần trong vòng lặp for tại sao phải viết như vậy, tác dụng của nó là gì tại sao i phải khởi tạo bằng myid+1. Bạn nào hiểu làm ơn giúp mình với.
    #include <stdio.h>
    #include <math.h>
    #include <mpi.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, namelen;
    double PI25DT = 3.141592653589793238462643;
    double mypi, pi, h, sum, x;
    double startwtime, endwtime;
    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;
    if (myid == 0)
    startwtime = MPI_Wtime();
    MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
    h = 1.0 / (double) n;
    sum = 0.0;
    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_WORLD);
    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;
    }
    Đã được chỉnh sửa lần cuối bởi linh.thuylinh : 28-09-2016 lúc 09:19 PM.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn