Распараллеливание На Mpich

Тема в разделе "C/C++/C#", создана пользователем Painka, 29 ноя 2011.

  1. Painka

    Painka Гость

    Подскажите, пожалуйста, как

    необходимо распараллелить такую задачку:
    y1=a[0][0] + a[0][1]*x1 + a[0][2]*x2 + a[0][3]*x3;
    y2=a[1][0] + a[1][1]*x1 + a[1][2]*x2 + a[1][3]*x3;
    y3=a[2][0] + a[2][1]*x1 + a[2][2]*x2 + a[2][3]*x3;
    y4=a[3][0] + a[3][1]*x1 + a[3][2]*x2 + a[3][3]*x3;

    подобрать отпимальные значения х1, х2, х3.
    0< = x1<= 2
    0<= x2 <=5
    0<= x3 <= 20

    критерий оптимизации: у4 минимальный, при этом 1050<= y1 <=1110, 20<= y2 <=40, 4<= y3 <=8

    вот то что у меня получилось, но без распараллеливания. Буду рада любой помощи)))

    <!--shcode--><pre><code class='"необходимо распараллелить такую задачку:
    y1=a[0'>[0] + a[0][1]*x1 + a[0][2]*x2 + a[0][3]*x3;
    y2=a[1][0] + a[1][1]*x1 + a[1][2]*x2 + a[1][3]*x3;
    y3=a[2][0] + a[2][1]*x1 + a[2][2]*x2 + a[2][3]*x3;
    y4=a[3][0] + a[3][1]*x1 + a[3][2]*x2 + a[3][3]*x3;

    подобрать отпимальные значения х1, х2, х3.
    0< = x1<= 2
    0<= x2 <=5
    0<= x3 <= 20

    критерий оптимизации: у4 минимальный, при этом 1050<= y1 <=1110, 20<= y2 <=40, 4<= y3 <=8

    вот то что у меня получилось, но без распараллеливания. Буду рада любой помощи)))
    Код (C++):

    // consist.cpp : Defines the entry point for the console application.
    //

    Код C++

    #include "stdafx.h"
    #include <mpi.h>
    #include <conio.h>
    #include <iostream>

    using namespace std;


    int main(int argc, char** argv)
    {    
    int size, rank;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    double x1, x2, x3, x4, y1, y2, y3, y4;

    double a[4][4]={1030, 4, 5, 9,
    20, -5, 10, 10,
    1, 0.5, -0.5, 2,
    1.2, 0.1, 0.5, 1.2 };
    double b[3][2]={1050, 1110,
    20, 40,
    4, 8};

    double *mas=new double[4];
    //mas[0]=1; mas[1]=2; mas[2]=3; mas[3]=4;
    double min=999999;

    for(x1=0; x1<=2; x1=x1+2/(rank+1))
    for(x2=0; x2<=5; x2=x2+5/(rank+1))
    for(x3=0; x3<=20; x3=x3+20/(rank+1))
    {

    y1=a[0][0] + a[0][1]*x1 + a[0][2]*x2 + a[0][3]*x3;

    if((b[0][0]<=y1) && (y1<=b[0][1]))
    {y2=a[1][0] + a[1][1]*x1 + a[1][2]*x2 + a[1][3]*x3;
    cout<<y2<<endl;
    }
    else
    continue;

    if((b[1][0]<=y2) &&( y2<=b[1][1]))
    {y3=a[2][0] + a[2][1]*x1 + a[2][2]*x2 + a[2][3]*x3;
    //cout<<y3<<endl;
    }
    else continue;

    if((b[2][0]<=y3) && (y3<=b[2][1]))
    {{y4=a[3][0] + a[3][1]*x1 + a[3][2]*x2 + a[3][3]*x3;
    //cout<<y4<<endl;
    }
    if(y4<min){
    min=y4;
    mas[0]=x1; mas[1]=x2; mas[2]=x3;mas[3]=y4;
    cout<<x1<<" "<<x2<<" "<<y4<<endl;
    }

    }else continue;
    }

    cout<<rank<<endl;
    for(int i=0; i<4;i++)
    {cout<<endl;
    printf("%f ", mas[i]);}
    delete[]mas;
    MPI_Finalize();
    cout<<"bye"<<endl;
    //getch();

    return 0;
    }
     
Загрузка...

Поделиться этой страницей