PVM przesłanie tablicy struktur

0

Witam

W jaki sposób i czy w ogóle możliwe jest przesłanie tablicy struktur w PVM? Wszystkie funkcje pvm_*send, pvm_scatter oraz pvm_gather wymagają podania typu, jednak dostępne są tylko typy proste (PVM_BYTE, PVM_SHORT, PVM_INT, PVM_FLOAT, PVM_CPLX, PVM_DOUBLE, PVM_DCPLX, 
PVM_LONG_BYTE, PVM_SHORT, PVM_INT, PVM_FLOAT, PVM_CPLX, PVM_DOUBLE,PVM_DCPLX,PVM_LONG), przez co można przesłać co najwyżej tablicę.
Istnieje jakiś sposób na obejście tego problemu?

1

c++? to zerknij na biblioteke http://pvm-plus-plus.sourceforge.net/doc/Struct.html

c? to zerknij na funkcje
http://www.physics.orst.edu/~rubin/nacphy/PVM/ref/routines/pvm_psend.html
http://www.physics.orst.edu/~rubin/nacphy/PVM/ref/routines/pvm_unpack.html
http://ups.savba.sk/docs_par/pvm/pvm_psend.3PVM.html
ona co prawda pobiera datatype, ale tylko po to, aby okreslic rozmiar pojedynczego elementu, funkcja ta nie dokonuje zadnego tlumaczenia little/bigendian itp, wiec sadze ze jest bezpieczna dla dowolnych upakowanych danych.. ale, szczerze, nie wiem, nie pamietam jej.. nie przypominam sobie takze, aby w PVM mozna bylo definiowac wlasne struktury. To chyba "przyszlo dopiero" z MPI, albo z nakladkami jak pvm++ patrz link powyzej

http://www.cs.uga.edu/~potter/CompIntell/PVM-Paper.pdf

However this modication presents a new challenge as the PVM messaging scheme is not well suited
to passing user-dened data types
. In order to pass bitstring chromosomal representations between sub-
populations these strings will have to be translated or cast to some native C data type before transmission
and interpreted or re-cast upon receipt These conversions will extract a one

0

Dzięki za odpowiedź

Co do problemu, to skorzystałem z pvm_pkbyte() do przesłania bloku pamięci. W przypadku wektorów czy list działa bezbłędnie. Mam jednak problem w przypadku wysłania struktury BITMAP z biblioteki allegro. Problem polega na tym, że po wysłaniu struktury:

BITMAP * bf = NULL;
bf = create_bitmap( 1200, 700 );
if( !bf )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Nie mogê utworzyæ bf !" );
    allegro_exit();
    return 0;
}

pvm_pkbyte((char*)bf, (int)sizeof(*bf),1);

a następnie jej odebraniu

BITMAP * bf = NULL;
bf= create_bitmap( 1200, 700 );
if( !bf)
{
    cout<<"Blad";
    return 0;
}

pvm_upkbyte((char*)bf, (int)sizeof(*bf),1);

nie mogę skorzystać z odebranej struktury, np. w przypadku użycia:

getpixel(bf,10,10);

program się wysypuje ( przerywa swoje działanie, bez wyświetlenia żadnych komunikatów o błędach), w konsoli jednak pojawia się informacja o wyłączeniu się Allegro:

[t40004] Shutting down Allegro due to signal #11
[t40004] EOF

Orientuje się może ktoś jaka jest tego przyczyna?

1 użytkowników online, w tym zalogowanych: 0, gości: 1