eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPrzyspieszenie na OpenCL, CUDA, DirectCompute, itd
Ilość wypowiedzi w tym wątku: 13

  • 1. Data: 2010-07-30 14:53:46
    Temat: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Mariusz Marszałkowski <m...@g...com>

    Powitać

    Jest dana tabela liczb całkowitych:
    int tab[SIZE][N];

    I jest dany wektor liczb całkowitych:
    int vec[SIZE];

    I jest program który oblicza sumę warunkową:

    int suma = 0;
    for( int i=0 ; i<SIZE ; i++ )
    if( tab[i][COL1] <= VAL1 AND tab[i][COL2] <= VAL2 AND tab[i][COL3]
    <= VAL3 )
    suma += vec[i];

    Zadanie polega na tym, aby tak dobrać stałe COL1,COL2,COL3 i VAL1,
    VAL2, VAL3; żeby
    uzyskać maksymalną sumę.

    Załóżmy że używamy algorytmu brut force, czyli sprawdzamy wszystkie
    możliwości.

    I teraz moje pytanie: Jakie przyspieszenie można uzyskać w takim
    algorytmie
    jeśli go się zaimplementuje w jakiejś technologii jak w temacie na
    najnowszych
    kartach graficznych? Przyspieszenie względem nowych procesorów
    głównych.

    Z góry dziękuję
    Pozdrawiam


  • 2. Data: 2010-07-30 16:04:23
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Michoo <m...@v...pl>

    Mariusz Marszałkowski pisze:
    > Zadanie polega na tym, aby tak dobrać stałe COL1,COL2,COL3 i VAL1,
    > VAL2, VAL3; żeby
    > uzyskać maksymalną sumę.
    >
    > Załóżmy że używamy algorytmu brut force, czyli sprawdzamy wszystkie
    > możliwości.
    >
    > I teraz moje pytanie: Jakie przyspieszenie można uzyskać w takim
    > algorytmie
    > jeśli go się zaimplementuje w jakiejś technologii jak w temacie na
    > najnowszych
    > kartach graficznych? Przyspieszenie względem nowych procesorów
    > głównych.

    Sporo zależy od tego jaki procesor i jaka karta, ale ogólnie o ile
    tablica zmieści się w szybkiej pamięci to myślę, że około
    80% ze stosunku MHz (czyli np (512 rdzeni * 950MHz) / (4 rdzenie *
    3000MHz). Jak masz te tablice duże to w sumie nie wiem - pewnie trzeba
    by liczyć wiele sum równolegle 'porcjami' na jednym rdzeniu tak aby
    optymalnie wykorzystać pamięć.

    --
    Pozdrawiam
    Michoo


  • 3. Data: 2010-07-30 16:25:38
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    Mariusz Marszałkowski <m...@g...com> wrote:

    > Załóżmy że używamy algorytmu brut force, czyli sprawdzamy wszystkie
    > możliwości.
    >
    > I teraz moje pytanie: Jakie przyspieszenie można uzyskać w takim
    > algorytmie
    > jeśli go się zaimplementuje w jakiejś technologii jak w temacie na
    > najnowszych
    > kartach graficznych? Przyspieszenie względem nowych procesorów
    > głównych.

    Nie wiem, jak na kartach graficznych, ale na zwykłym CPU z rozkazami
    SSE2 mógłbyś uzyskać ok. 4-krotne przyspieszenie (jeśli sizeof(int)=4).

    w.


  • 4. Data: 2010-07-30 19:26:03
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Bronek Kozicki <b...@s...net>

    On 30/07/2010 15:53, Mariusz Marszałkowski wrote:
    > int suma = 0;
    > for( int i=0 ; i<SIZE ; i++ )
    > if( tab[i][COL1]<= VAL1 AND tab[i][COL2]<= VAL2 AND tab[i][COL3]
    > <= VAL3 )
    > suma += vec[i];
    >
    > Zadanie polega na tym, aby tak dobrać stałe COL1,COL2,COL3 i VAL1,
    > VAL2, VAL3; żeby uzyskać maksymalną sumę.

    masz jakieś dodatkowe ograniczenia odnośnie VAL1 VAL2 VAL3 ? Bo jeżeli
    nie, to najprostszym "algorytmem" będzie
    VAL1 = MAXINT;
    VAL2 = MAXINT;
    VAL3 = MAXINT;
    COL1 = 0; COL2 = 1; COL3 = 2;



    B.


  • 5. Data: 2010-07-31 00:09:28
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Mariusz Marszałkowski <m...@g...com>

    On 30 Lip, 21:26, Bronek Kozicki <b...@s...net> wrote:
    > On 30/07/2010 15:53, Mariusz Marszałkowski wrote:
    >
    > > int suma = 0;
    > > for( int i=0 ; i<SIZE ; i++ )
    > >    if( tab[i][COL1]<= VAL1 AND tab[i][COL2]<= VAL2 AND tab[i][COL3]
    > > <= VAL3 )
    > >       suma += vec[i];
    >
    > > Zadanie polega na tym, aby tak dobrać stałe COL1,COL2,COL3 i VAL1,
    > > VAL2, VAL3; żeby  uzyskać maksymalną sumę.
    >
    > masz jakieś dodatkowe ograniczenia odnośnie VAL1 VAL2 VAL3 ? Bo jeżeli
    > nie, to najprostszym "algorytmem" będzie
    > VAL1 = MAXINT;
    > VAL2 = MAXINT;
    > VAL3 = MAXINT;
    > COL1 = 0; COL2 = 1; COL3 = 2;

    W sumowanym wektorze są też liczby ujemne, nie można wybrać po
    prostu całego zakresu.

    Pozdrawiam


    .


  • 6. Data: 2010-07-31 00:18:42
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Mariusz Marszałkowski <m...@g...com>

    On 30 Lip, 18:04, Michoo <m...@v...pl> wrote:
    > Mariusz Marszałkowski pisze:
    >
    > > Zadanie polega na tym, aby tak dobrać stałe COL1,COL2,COL3 i VAL1,
    > > VAL2, VAL3; żeby
    > > uzyskać maksymalną sumę.
    >
    > > Załóżmy że używamy algorytmu brut force, czyli sprawdzamy wszystkie
    > > możliwości.
    >
    > > I teraz moje pytanie: Jakie przyspieszenie można uzyskać w takim
    > > algorytmie
    > > jeśli go się zaimplementuje w jakiejś technologii jak w temacie na
    > > najnowszych
    > > kartach graficznych? Przyspieszenie względem nowych procesorów
    > > głównych.
    >
    > Sporo zależy od tego jaki procesor i jaka karta, ale ogólnie o ile
    > tablica zmieści się w szybkiej pamięci to myślę, że około
    > 80% ze stosunku MHz (czyli np (512 rdzeni * 950MHz) / (4 rdzenie *
    > 3000MHz). Jak masz te tablice duże to w sumie nie wiem - pewnie trzeba
    > by liczyć wiele sum równolegle 'porcjami' na jednym rdzeniu tak aby
    > optymalnie wykorzystać pamięć.

    A tak można policzyć?
    - procesor ma 80GFLOPS
    - karta ma 5000GFLOPS
    więc należy spodziewać się że na karcie wykona się 62 razy szybciej?

    Dane zmieszczą się w pamięci karty grafiki.
    Karta np. Redeon 5970.

    Pozdrawiam



  • 7. Data: 2010-07-31 00:23:17
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Mariusz Marszałkowski <m...@g...com>

    On 30 Lip, 18:25, Wojciech Muła
    <w...@p...null.onet.pl.invalid> wrote:
    > Mariusz Marszałkowski <m...@g...com> wrote:
    > > Załóżmy że używamy algorytmu brut force, czyli sprawdzamy wszystkie
    > > możliwości.
    >
    > > I teraz moje pytanie: Jakie przyspieszenie można uzyskać w takim
    > > algorytmie
    > > jeśli go się zaimplementuje w jakiejś technologii jak w temacie na
    > > najnowszych
    > > kartach graficznych? Przyspieszenie względem nowych procesorów
    > > głównych.
    >
    > Nie wiem, jak na kartach graficznych, ale na zwykłym CPU z rozkazami
    > SSE2 mógłbyś uzyskać ok. 4-krotne przyspieszenie (jeśli sizeof(int)=4).

    Tak, typem podstawowym może być int32, albo float32.

    Pozdrawiam





  • 8. Data: 2010-07-31 10:05:08
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Michal <n...@d...me>

    On Fri, 30 Jul 2010 17:18:42 -0700 (PDT)
    Mariusz Marszałkowski <m...@g...com> wrote:

    > A tak można policzyć?
    > - procesor ma 80GFLOPS
    > - karta ma 5000GFLOPS
    > więc należy spodziewać się że na karcie wykona się 62 razy szybciej?

    To sa wartosci teoretyczne i tak naprawde ciezko powiedziec ile maja wspolnego z
    rzeczywistoscia. Jezeli bedziesz to robil na floatach to na karcie bedzie szybciej,
    jezeli bedziesz mial liczby calkowite to one na procesorze sa sumowanie szybciej
    niz float(na procesorze). Karta graficzna z kolei zawsze musi wykonywac dzialania na
    floatach. Wniosek, wiec jest taki ze jezeli dodawanie(na intach, jezeli robisz na
    intach)
    i operacja warunkowa jest szybsza na procu niz tylko dodawania na floatach na
    karcie(bo
    podobno if na karcie jest za darmo) to na procu bedzie szybciej.


    --
    Michal


  • 9. Data: 2010-07-31 13:29:13
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Bronek Kozicki <b...@s...net>

    On 31/07/2010 01:09, Mariusz Marszałkowski wrote:
    > W sumowanym wektorze są też liczby ujemne, nie można wybrać po
    > prostu całego zakresu.


    ok, więc nieco poważniejsze rozważania. Trzymanie w pamięci jednej
    zmiennej suma do której wszystkie wątki zapisują, zupełnie się nie
    skaluje. Musisz wymyśleć lepszy algorytm.

    Np - w każdym wątku pętla od 0 do SIZE, wątków tyle ile kolumn. Każda
    pętla tworzy histogram elementów w kolumnie. Dodatkowo (jeszcze jeden
    niezależny wątek) pętla tworząca historam wektora. Na podstawie
    ostatniego będziesz widział z których wierszy możesz zrezygnować z
    najmniejszą stratą, na podstawie histogramów kolumn będziesz wiedział
    które kolumny maję najmniejszy maksymalny element, drugi od końca itd. i
    w ten sposób sobie dobierzesz minimalne wartości N i pasujący wybór
    kolumn. Z perspektywy przetwarzania wielowątkowego ważne jest że w ten
    sposób rozbiłeś część zadania na wiele (liczba kolumn + jeden na wektor)
    niezależnych wątków wykonania z których każdy zapisuje swoje własne dane
    do pamięci. Co więcej, każdy wątek bedzie później mógł niezależnie te
    histogramy analizować ze stosunkowo niewielką wymianą danych między
    wątkami (preferowane wiersze do utraty, przesłane z histogramu wektora
    do histogramów kolumn).

    Jak to się ma do CUDA? Nie wiem, bo w tym nie programuję. Ale,
    skalowalność na wiele wątków (sprzętowych czy programowych) działa tylko
    wtedy, jeżeli nie musisz dostępu do danych synchronizować w każdym kroku.


    B.


  • 10. Data: 2010-08-01 01:14:38
    Temat: Re: Przyspieszenie na OpenCL, CUDA, DirectCompute, itd
    Od: Mariusz Marszałkowski <m...@g...com>

    On 31 Lip, 15:29, Bronek Kozicki <b...@s...net> wrote:
    > On 31/07/2010 01:09, Mariusz Marszałkowski wrote:
    >
    > > W sumowanym wektorze są też liczby ujemne, nie można wybrać po
    > > prostu całego zakresu.
    >
    > Jak to się ma do CUDA? Nie wiem, bo w tym nie programuję. Ale,
    > skalowalność na wiele wątków (sprzętowych czy programowych) działa tylko
    > wtedy, jeżeli nie musisz dostępu do danych synchronizować w każdym kroku.
    >
    Właśnie tego nie wiem jak to szybko się wykona na GPU. Czy jest
    możliwe zwiększenie wydajności o teoretyczny współczynnik 60 razy?

    Pozdrawiam

strony : [ 1 ] . 2


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: