eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › OpenMP do zliczania węzłów drzewa
Ilość wypowiedzi w tym wątku: 6

  • 1. Data: 2010-11-15 16:50:45
    Temat: OpenMP do zliczania węzłów drzewa
    Od: Mariusz Marszałkowski <m...@g...com>

    Witam

    Jest sobie rekurencyjna procedura która zlicza węzły drzewa:

    int zliczaj( Object *obj , depht ) {
    if( depht == 0 )
    return 1;
    sum = 1;
    for( int i=0 ; i<ilosc_potomkow( obj ) ; i++ ) {
    wykonaj_instrukcje( obj );
    sum += zliczaj( obj , depth-1 );
    cofnij_instrukcje( obj );
    }
    return sum;
    }

    Na platformach wieloprocesorowych aż się prosi żeby zrobić po prostu
    tak:

    int zliczaj( Object *obj , depht ) {
    if( depht == 0 )
    return 1;
    sum = 1;
    #pragma omp parallel for private(obj) reduction(+:sum)
    for( int i=0 ; i<ilosc_potomkow( obj ) ; i++ ) {
    wykonaj_instrukcje( obj );
    sum += zliczaj( obj , depth-1 );
    cofnij_instrukcje( obj );
    }
    return sum;
    }

    Ale nie działa, kompilator wywala że zmienna obj jest użyta bez
    zainicjowania, a
    program się zawiesza. Co robię źle?

    Pozdrawiam


  • 2. Data: 2010-11-15 17:15:12
    Temat: Re: OpenMP do zliczania węzłów drzewa
    Od: Michoo <m...@v...pl>

    W dniu 15.11.2010 17:50, Mariusz Marszałkowski pisze:
    > Witam
    >
    > Jest sobie rekurencyjna procedura która zlicza węzły drzewa:
    >
    > int zliczaj( Object *obj , depht ) {
    > if( depht == 0 )
    > return 1;
    > sum = 1;
    > for( int i=0 ; i<ilosc_potomkow( obj ) ; i++ ) {
    > wykonaj_instrukcje( obj );
    > sum += zliczaj( obj , depth-1 );
    > cofnij_instrukcje( obj );
    > }
    > return sum;
    > }
    >
    > Na platformach wieloprocesorowych aż się prosi żeby zrobić po prostu
    > tak:
    >
    > int zliczaj( Object *obj , depht ) {
    > if( depht == 0 )
    > return 1;
    > sum = 1;
    > #pragma omp parallel for private(obj) reduction(+:sum)
    > for( int i=0 ; i<ilosc_potomkow( obj ) ; i++ ) {
    > wykonaj_instrukcje( obj );
    > sum += zliczaj( obj , depth-1 );
    > cofnij_instrukcje( obj );
    > }
    > return sum;
    > }
    >
    > Ale nie działa, kompilator wywala że zmienna obj jest użyta bez
    > zainicjowania, a
    > program się zawiesza. Co robię źle?
    Mieszanie rekurencji i wielowątkowości - czy to jest dowcip?

    jeżeli nie to:
    masz prywatny wskaźnik do obiektu, obiekt jest współdzielony, wykonujesz
    wykonaj_instrukcje i cofnij_instrukcje na nim równolegle.
    Chcesz prawdopodobnie zrobić coś w stylu:
    Object job = *obj;
    i dopiero job potraktować jako private. Albo zapłacić komuś za zrobienie
    tego dobrze.



    --
    Pozdrawiam
    Michoo


  • 3. Data: 2010-11-15 17:45:34
    Temat: Re: OpenMP do zliczania węzłów drzewa
    Od: Mariusz Marszałkowski <m...@g...com>

    On 15 Lis, 18:15, Michoo <m...@v...pl> wrote:

    > Mieszanie rekurencji i wielow tkowo ci - czy to jest dowcip?
    Dlaczego to miałby być dowcip?

    > Chcesz prawdopodobnie zrobi co w stylu:
    > Object job = *obj;
    > i dopiero job potraktowa jako private.
    Object jest za duzy zeby go zawsze kopiowac, chcialem zeby
    OpenMP samo go sklonowalo tylko wtedy gdy jest dostepny zasob
    (czyli wolny procesor) na utworzenie nowego watku.

    Pozdrawiam



  • 4. Data: 2010-11-15 21:34:49
    Temat: Re: OpenMP do zliczania węzłów drzewa
    Od: Mariusz Marszałkowski <m...@g...com>

    On 15 Lis, 18:45, Mariusz Marszałkowski <m...@g...com> wrote:
    > On 15 Lis, 18:15, Michoo <m...@v...pl> wrote:
    >
    > > Mieszanie rekurencji i wielow tkowo ci - czy to jest dowcip?
    >
    > Dlaczego to miałby być dowcip?
    >

    Nie jest to dowcip i widze ze nawet jest bardzo eleganckie
    rozwiazanie w OpenMP, ale niestety tylko w wersji 3.0 :/
    http://bisqwit.iki.fi/story/howto/openmp/#TaskDirect
    iveOpenmp%203%200Only

    Pozdrawiam


  • 5. Data: 2010-11-16 11:14:38
    Temat: Re: OpenMP do zliczania węzłów drzewa
    Od: Michoo <m...@v...pl>

    W dniu 15.11.2010 22:34, Mariusz Marszałkowski pisze:
    > On 15 Lis, 18:45, Mariusz Marszałkowski<m...@g...com> wrote:
    >> On 15 Lis, 18:15, Michoo<m...@v...pl> wrote:
    >>
    >>> Mieszanie rekurencji i wielow tkowo ci - czy to jest dowcip?
    >>
    >> Dlaczego to miałby być dowcip?
    Wydało mi się to sporym niezrozumieniem działania OMP o które Cię nie
    posądzałem.

    > Nie jest to dowcip i widze ze nawet jest bardzo eleganckie
    > rozwiazanie w OpenMP, ale niestety tylko w wersji 3.0 :/
    Jest eleganckie.

    Na starszym OMP możesz zrobić ją deklarując zmienną jako lokalną dla
    wątków i najpierw wykonać kopiowanie a potem ustawić flagę, albo rozbić
    na 2 części - najpierw kopiowanie a potem obliczenia.


    --
    Pozdrawiam
    Michoo


  • 6. Data: 2010-11-16 15:40:17
    Temat: Re: OpenMP do zliczania węzłów drzewa
    Od: Mariusz Marszałkowski <m...@g...com>

    On 16 Lis, 12:14, Michoo <m...@v...pl> wrote:
    > > jest bardzo eleganckie
    > > rozwiazanie w OpenMP, ale niestety tylko w wersji 3.0 :/
    >
    > Jest eleganckie.
    >
    > Na starszym OMP mo esz zrobi j deklaruj c zmienn jako lokaln dla
    > w tk w i najpierw wykona kopiowanie a potem ustawi flag , albo rozbi
    > na 2 cz ci - najpierw kopiowanie a potem obliczenia.

    Po kilku godzinach szukania po necie i dzieki Twoim wskazowka
    domyslilem sie o co chodzi - dziekuje. Co ciekawe, wersja
    programu z kopiowaniem dziala 300 razy wolniej, bym musial
    uzyc 300 procesorow zeby byl widoczny zysk :)

    Zrobilem dwie kopie tego samego algorytmu, blisko korzenia
    drzewa dziala z OpenMP ( z powolny kopiowanem struktur), blisko
    lisci bez OpenMP. Skaluje się prawie liniowo, ale dwie
    kopie tej samej procedury nie maja nic wspolnego z tym
    jak OpenMP jest reklamowane: "Równoległość inkrementacyjna:
    można pracować na jednej porcji programu w jednym
    czasie, nie są potrzebne drastyczne zmiany kodu".
    Spodziewalem sie w zwiazku z powyzszym, ze OpenMP
    samo zrobi dwie kopie algorytmu i jesli jest brak wolnych
    procesorow, to szybkim if-em (bez kopiowania struktur)
    wybierze kopie szeregowa a nie rownolegla.

    Pozdrawiam

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: