Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » MPI Matrix verteilen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.04.2008, 15:34 Uhr
Lackmeier123



Hallo Leute

Ich weiss zwar nicht ob ich hier im Linux Forum richtig bin, da ich mit Cygwin unter Windows xp arbeite, aber der Thread kann ja immer noch verschoben werden...

Mein Problem ist es eine Matrix welche im root Prozess erzeugt wird auf eine Anzahl p von Unterknoten incl root zu verteilen.
Ich benutze dafür den Befehl MPI_Scatter der mpich2 Bibliothek.

Hier die relevanten Auszüge aus dem Programm:


C++:
#include <string.h>
#include <math.h>
#include <iostream>
#include "matrix.h"
#undef SEEK_SET
#undef SEEK_END
#undef SEEK_CUR

#include <mpi.h>

using namespace std;
class jacobi
{
    public:
        int Parallel_jacobi(int max_it, double tol);
        double distance(double* x_old, double* x_new);
        void showLocalMatrix();
        void output();
        jacobi(int p);
        
    private:
        int me; /* Prozessornummer 0 <= me < p */
        static const int GLOB_MAX = 3; /* Größe des LGS */
        double** A;
        double** local_A; /* lokal vorhandener Block der zu lösenden Matrix = n_local X n*/
        double* local_b; /* lokal vorhandener Teil des Lösungsvektors b */
        int i_local, i_global;
        int n_local, it_num;
        double x_temp1[GLOB_MAX], local_x[GLOB_MAX];
        double *x_old,  /* x_new == x^k+1 */
                *x_new, /* x_old == x^k */
                *temp;
    
};
jacobi::jacobi(int p)
{
    n_local = GLOB_MAX / p; /* lokale Blockgröße */    
    x_new = (double *) malloc(GLOB_MAX * sizeof(double));
    x_old = (double *) malloc(GLOB_MAX * sizeof(double));
    temp = (double *) malloc(GLOB_MAX * sizeof(double));
        
    MPI_Status status;
    MPI_Comm_rank(MPI_COMM_WORLD, &me);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    //matrix::matrixgen(0, 10, GLOB_MAX, GLOB_MAX, "long.dat");
    local_A = matrix::matrixalloc(n_local, GLOB_MAX);
    
    if(me == 0)
    {
        A = matrix::matrixalloc(GLOB_MAX, GLOB_MAX);
        matrix::matrixread(A, 0, GLOB_MAX, GLOB_MAX, "long.dat
    }

    MPI_Scatter(A, n_local * GLOB_MAX, MPI_DOUBLE, local_A, n_local * GLOB_MAX, MPI_DOUBLE, 0, MPI_COMM_WORLD);
    if(me == 0)
    {
        output();
        showLocalMatrix();
    }
    if(me == 1)
    {
        //output();
        cout << "
qay"<<endl;
        showLocalMatrix();
        cout << "
qwert"<<endl;
    }
}



Die Funktionen matrix::matrixalloc und matrix::matrixread funktionieren da die Matrix A korrekt angelegt wird und gelesen, verändert usw. werden kann.
Beim lesenden Zugriff auf local_A von einem der Prozesse ausser root also hier,


C++:
             if(me == 1)
    {
                        showLocalMatrix();
             }



wird auf der Konsole ausgegeben:

_cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)

Muss wohl an dem MPI_Scatter liegen aber ich hab schon alles mögliche ausprobiert und komme hier echt nicht weiter gerade.
Wäre sehr nett wenn mir da jemand helfen könnte.

Viele Grüße,
Lackmeier

Dieser Post wurde am 12.04.2008 um 09:52 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.04.2008, 20:19 Uhr
~Lackmeier123
Gast


Hallo nochmal. Ist vielleicht etwas viel verlangt das ganze Ptogramm zu lesen. Aber weiss will mir eigentlich die Fehlermeldung sagen?

_cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)

Vielleicht weiss das ja jemand...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.04.2008, 20:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja was da eben da steht, da macht dir irgendwas deinen stack kaputt was das cygwin dazu nötigt das programm abzuschießen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: