eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOpenMP - jest szybciej czy wolniej? › Re: OpenMP - jest szybciej czy wolniej?
  • Data: 2012-03-03 16:12:22
    Temat: Re: OpenMP - jest szybciej czy wolniej?
    Od: "slawek" <s...@h...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]


    Użytkownik "Edek Pienkowski" <e...@g...com> napisał w
    wiadomości grup dyskusyjnych:jite8a$dvn$1...@i...gazeta.pl...
    > OpenMP pozwala robić przede wszystkim coarse-grained, fine-grained może
    > i też, ale twoje pętla jest "mikro". Zrób zewnętrzną/wewnętrzną.

    Nie taka mikro ;)

    Nie da się - ta pętla to jedyny etap na którym coś sensownie (tj.
    bezmyślnie) można zrównoleglić.

    Było rzędu 1000

    Dałem docelowe N, czyli 10 000, i nagle... surprise, surprise

    (a nic innego nie zmieniałem!)

    >gfortran -fopenmp -Ofast program.f95
    >a test.in
    CPU_TIME time = 35.6875 seconds
    ETIME CPU time = 35.2500 seconds 98.64 %
    ETIME SYS time = 0.4844 seconds 1.36 %
    ETIME TOT time = 35.7344 seconds

    >gfortran -Ofast program.f95
    >a test.in
    CPU_TIME time = 37.0000 seconds
    ETIME CPU time = 36.9375 seconds 99.79 %
    ETIME SYS time = 0.0781 seconds 0.21 %
    ETIME TOT time = 37.0156 seconds

    Czyli wersja z OpenMP zrobiła się szybsza (na dwóch rdzeniach) niż
    jednowątkowa. I to nawet bez schedule (z też).

    > No i będzie 2x szybszy. OpenMP nie zwalnia od myślenia. Chcesz coś
    > prostszego: Thrust. Ma backend openMP, ma backend CUDA, używa
    > się tak prosto, jak stl::transform, z Fortrana chyba też się da.
    > Jak przy pomocy Thrust uda ci się spieprzyć, chylę czoła ;)

    Wszystko da się spieprzyć.

    > GPU działa inaczej. Taka pętla będzie "memory-bound", za mało liczenia.
    > W przypadku GPU mówi się o przepustowości, i generalnie przepustowość
    > obliczeniowa karty jest rzędu 8-10 x większa niż przepustowość

    Nie o to chodzi - po prostu dziwiłem się kiedyś, po co Intel dał GPU do CPU
    zamiast zrobić coś innego. Tłumaczył się wtedy (inż. z Intela), że mieli
    pusto na krzemie, bo obwód wafelka jest ograniczony prądowo przez I/O, więc
    przy malejącej szerokości ścieżki zostały puste placki, więc wsadzili tam
    coś, czyli GPU. Bardziej jednak prawdopodobne, że te GPU tam już teraz
    jest... aby kiedyś używać podobnie jak to robi CUDA.

    > Nie wiem, co Intel (i AMD) zrobią naprawdę mieszając CPU i GPU. Widziałem
    > te architektury, ale nie powiem, żebym znał ich właściwości. Nie liczyłbym
    > też na to, że 1000 rdzeni: rdzenie GPU są inne i nie są niezależne;
    > no i rdzenie Intela to nie rdzenie Nvidii czy ATI. Ale mix może być fajny.

    Też tak myślę.

    > Ta, schedulera. W przypadku dwóch wątków na dwucorowym procku scheduler
    > nie ma nic do gadania.

    Niezupełnie - oddychają Windowsy, piszę newsy, coś się dzieje...

    > OpenMP jest fajny, RTFM. Trolujesz, czy serio narzekasz?

    Na serio narzekam. Powinno być tak prosto jak się da. A jest... no dobrze,
    jeszcze tylko dlaczego OpenMP nie chce działać pod GCC 4.7 ?! Tzn. coś mu
    się nie podoba "stara" glibc. Ok. Ale czy ja mam chęć walczyć z glibc - na
    każdym systemie na jaki przypadkiem trafię?! Nie mam!

    > Bo spieprzyłeś. Gcc wektoryzuje pętle. Jak masz task z 1 iteracją
    > może mieć problem (też bym liczył na to, że sobie poradzi, ale
    > nie wszystkie optymalizacje zawsze działają). Zresztą:

    Przełom jest przy około 50 tysiącach iteracji.

    Nagle wszystko robi się płynne, obciążenie CPU leci do 100%, oba wątki się
    dogadują - normalnie cud mniemany.


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: