eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[about] sseRe: [about] sse
  • Data: 2012-01-27 18:47:05
    Temat: Re: [about] sse
    Od: " M.M." <m...@W...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    <f...@W...gazeta.pl> napisał(a):
    > to troche zakrawa na przyblizenie, ale mozna
    > tak postrzegac czesc operacji np przerzutowanie
    > tablicy floatow na tablice ssefloat8 i liczenie
    > osmiu operacji arytmetycznych na raz
    >
    > z tymi branchami jest problem, wogole jest problem
    > pt "jak dostosowac sse do przyspieszania jak najwiekszej
    > ilosci przypadkow intensywnych obliczen w petlach"
    > (niektorzy nazywaja takie miejsca chyba goracymi petlami
    > ale to okreslenie mi nie bardzo pasuje, slowko intensywne
    > tez nie jest calkiem dobre)
    >
    > dla mnie sa to ciekawe tematy, obok wielopotokowosci
    > to jest drugi sposob zwiekszenia mocy przetwarzania
    > rdzenia

    No wlasnie musze przyspieszyc program, a czasu na testowanie
    kolejnych rozwiazan nie mam.

    Jesli przetransponuje macierz danych, to na uproszczonym tescie
    juz zyskuje 10krotne przyspieszenie.
    Cos w rodzaju:
    for( i=0 ; i<N ; i++ )
    for( j=0 ; j<M ; j++ )
    operacje( dane[i][j] )
    VS
    for( j=0 ; j<M ; j++ )
    for( i=0 ; i<N ; i++ )
    operacje( dane[i][j] )

    Do tego pidzial na watki i na 6 rdzeniach powinno byc 60 razy szybciej.
    Niestety to nadal troche za malo.

    A jest może coś takiego w SSE, żeby porównał cztery int32 upakowane do
    jednego int128 i zwrócił inta z ustawionymi albo wyzerowanymi czterema
    najmlodszymi bitami?

    Mysle nad czyms takim:

    int dane[N] = { wprowadza uzytkownik };
    int test[4] = { 5 , 5 , 5 , 5 };

    for( int i=0 ; i<N ; i+4 ) {
    switch( mniejsze_lub_rowne( dane+i , test ) ) {
    case 0: break;
    case 1: break;
    ..............
    case 15:
    }
    }

    Wtedy bylby jeden skok pod wyspecjalizowany kod dla kazdego przypadku.

    Pozdrawiam

    P.S.
    Wlasnie w takich przypadkach by sie przydala pragma do poinformowania
    kompilatora ze funkcja mniejsze_lub_rowne zwraca liczbe z zakresu
    od 0 do 15 i kompilator nie musi generowac zadnego kodu do omijania
    switcha.









    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 27.01.12 20:22

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: