eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › [about] sse
Ilość wypowiedzi w tym wątku: 9

  • 1. Data: 2012-01-26 14:09:02
    Temat: [about] sse
    Od: " " <f...@g...SKASUJ-TO.pl>

    slabo znam sse (chyba z powodu tego ze nie ma dobrych
    tutoriali) ale z tego co sie poorientowalem to dziwi
    mnie pare rzeczy:

    oprocz zestawu podstawowych operatorow typu +-*/&!<> itp
    sa tam zdefiniowane jakies bardziej wyjechane operacje
    ale zdaje sie ze nie ma kilku operacji sie wyraznie
    narzucajacych (szczegolnie dla float4): dot, cross, pozatym
    nie ma tez sie mz narzucajacego przeliczenia liczby
    zespolonej postaci a-b na modul-faza, pozatym
    nie ma tam chyba prostego przerzucania dowolnego floata
    z wektora do np eax, inne pytanie dotyczy np
    kwestii zrobienia na sse/avx np liczenia zbioru
    mandelbrota, poczatek gdy zaden z iterowanych 'punktow'
    (moze powinienem uzyc raczej slowa liczba) nie ucieka
    mozna zrobic zdaje mi sie ok w prosty sposob

    int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    {

    double4 real = pointReal,
    imaginary = pointImaginary,
    nextReal ,
    nextImaginary ,
    pointModule ,
    pointPhase ; // phase unused

    int iterCount = 1;

    for(;;)
    {
    pointModule = real*real + imaginary*imaginary;

    if(max(pointModule)>=4.0) return iterCount; /// (***)

    iterCount++;

    nextReal = real*real - imaginary*imaginary + pointReal;

    nextImaginary = 2*real*imaginary + pointImaginary;

    real = nextReal;
    imaginary = nextImaginary;
    }

    }


    ale co gdy ktorys pojedynczy ucieka (***) - nalezy wtedy
    dokonczyc na skalarach ?









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


  • 2. Data: 2012-01-26 16:36:50
    Temat: Re: [about] sse
    Od: " M.M." <m...@W...gazeta.pl>

    <f...@g...SKASUJ-TO.pl> napisał(a):
    > int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    Co to jest double4?
    Pozdrawiam


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


  • 3. Data: 2012-01-26 17:49:46
    Temat: Re: [about] sse
    Od: " " <f...@W...gazeta.pl>

    M.M. <m...@W...gazeta.pl> napisał(a):

    > <f...@g...SKASUJ-TO.pl> napisał(a):
    > > int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    > Co to jest double4?
    > Pozdrawiam
    >
    >

    tutaj jest to

    "4 x 64 bity - wektor 4 liczb zmiennoprzecinkowych
    podwójnej precyzji"

    jeden z 'typow danych' na jakich operuja instrukcje sse (avx)

    proponuje wbudowac taki typ jako dodatkowy akcelerowany
    typ prosty w c (jako rozszerzenie specyficzne dla x86)
    - w tedy mozna by pisac w ce w prosty sposob akcelerowane
    kody pod sse/avx np "c = a * b " pomnoz 8 floatow a razy 8
    floatow b i zapisz do c i tak dalej - wiecej napisalem na
    pl.lang.c (akurat jestem zmeczony - mala imprezka dzisiaj,
    ale jek odpoczne to pewnie bede dalej 'opracowywac' temat)







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


  • 4. Data: 2012-01-26 19:04:44
    Temat: Re: [about] sse
    Od: " M.M." <m...@W...gazeta.pl>

    <f...@W...gazeta.pl> napisał(a):

    > M.M. <m...@W...gazeta.pl> napisał(a):
    >
    > > <f...@g...SKASUJ-TO.pl> napisał(a):
    > > > int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    > > Co to jest double4?
    > > Pozdrawiam
    > >
    > >
    >
    > tutaj jest to
    >
    > "4 x 64 bity - wektor 4 liczb zmiennoprzecinkowych
    > podwójnej precyzji"
    >
    > jeden z 'typow danych' na jakich operuja instrukcje sse (avx)
    >
    > proponuje wbudowac taki typ jako dodatkowy akcelerowany
    > typ prosty w c (jako rozszerzenie specyficzne dla x86)
    > - w tedy mozna by pisac w ce w prosty sposob akcelerowane
    > kody pod sse/avx np "c = a * b " pomnoz 8 floatow a razy 8
    > floatow b i zapisz do c i tak dalej - wiecej napisalem na
    > pl.lang.c
    Hmmm jeszcze dwa pytania mi sie nasuwaja:

    Po pierwsze czy w C++ nie ma czegos gotowego ze sie pisze
    po prostu a = b * c ?

    Po drugie czy instrukcje SEE/AVX da sie wykorzystac do budowania
    drzew/regul decyzyjnych? Innymi slowy czy da sie przyspieszyc ponizsza
    pteleke, tak zeby jakos bral cztery/osiem wektorow na raz?

    int_or_short vectors[M][N+1] = { rand() };
    int_or_short s = rand()%N;
    int_or_short t = rand();

    for( int i=0 ; i<M ; i++ ) {
    if( vectors[i][s] <= t )
    vectors[i][N] = 1;
    else
    vectors[i][N] = 0;
    }

    Pozdrawiam










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


  • 5. Data: 2012-01-27 09:23:28
    Temat: Re: [about] sse
    Od: " " <f...@W...gazeta.pl>

    M.M. <m...@W...gazeta.pl> napisał(a):

    > <f...@W...gazeta.pl> napisał(a):
    >
    > > M.M. <m...@W...gazeta.pl> napisał(a):
    > >
    > > > <f...@g...SKASUJ-TO.pl> napisał(a):
    > > > > int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    > > > Co to jest double4?
    > > > Pozdrawiam
    > > >
    > > >
    > >
    > > tutaj jest to
    > >
    > > "4 x 64 bity - wektor 4 liczb zmiennoprzecinkowych
    > > podwójnej precyzji"
    > >
    > > jeden z 'typow danych' na jakich operuja instrukcje sse (avx)
    > >
    > > proponuje wbudowac taki typ jako dodatkowy akcelerowany
    > > typ prosty w c (jako rozszerzenie specyficzne dla x86)
    > > - w tedy mozna by pisac w ce w prosty sposob akcelerowane
    > > kody pod sse/avx np "c = a * b " pomnoz 8 floatow a razy 8
    > > floatow b i zapisz do c i tak dalej - wiecej napisalem na
    > > pl.lang.c
    > Hmmm jeszcze dwa pytania mi sie nasuwaja:
    >
    > Po pierwsze czy w C++ nie ma czegos gotowego ze sie pisze
    > po prostu a = b * c ?
    >
    > Po drugie czy instrukcje SEE/AVX da sie wykorzystac do budowania
    > drzew/regul decyzyjnych? Innymi slowy czy da sie przyspieszyc ponizsza
    > pteleke, tak zeby jakos bral cztery/osiem wektorow na raz?
    >
    > int_or_short vectors[M][N+1] = { rand() };
    > int_or_short s = rand()%N;
    > int_or_short t = rand();
    >
    > for( int i=0 ; i<M ; i++ ) {
    > if( vectors[i][s] <= t )
    > vectors[i][N] = 1;
    > else
    > vectors[i][N] = 0;
    > }
    >
    troche nie rozumiem tego kodu bo o ile randy sa poza
    petla to mozna po prostu zrobic

    for( int i=0 ; i<M ; i++ )
    sseInt8[i] = value;

    gdzie value - np { 0.0, 0.0, 0.0 ,0.0 ,0.0 ,1.0 ,1.0 ,1.0}

    co do instrukcji do rozgalezien decyzyjnych
    to nie wiem jak na dzis ale chyba nie - sa blokowy
    operator porownania ktore zapisuja wyniki do rejestru
    cos w stylu a ?> b jesli a jest 8floatowe to dla tych
    par floatow dla ktorych a>b do a trafiaja 32 jedynki
    a w przeciwnym wypadku 32 zera
    (ale nie przejrzalem mnemonikow do konca)

    jak budowac z tego kody ktore by sie rozgalezialy
    decyzyjnie nie wiem, dla mnie jest to rzecz 'do
    opanowania' trzebe sie bedzie przylozyc to
    okaze sie co sie da zrobic i gdzie sa minusy



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


  • 6. Data: 2012-01-27 11:32:39
    Temat: Re: [about] sse
    Od: " " <f...@W...gazeta.pl>

    <f...@W...gazeta.pl> napisał(a):

    > M.M. <m...@W...gazeta.pl> napisał(a):
    >
    > > <f...@W...gazeta.pl> napisał(a):
    > >
    > > > M.M. <m...@W...gazeta.pl> napisał(a):
    > > >
    > > > > <f...@g...SKASUJ-TO.pl> napisał(a):
    > > > > > int iterPointTilescape(double4 pointReal, double4 pointImaginary)
    > > > > Co to jest double4?
    > > > > Pozdrawiam
    > > > >
    > > > >
    > > >
    > > > tutaj jest to
    > > >
    > > > "4 x 64 bity - wektor 4 liczb zmiennoprzecinkowych
    > > > podwójnej precyzji"
    > > >
    > > > jeden z 'typow danych' na jakich operuja instrukcje sse (avx)
    > > >
    > > > proponuje wbudowac taki typ jako dodatkowy akcelerowany
    > > > typ prosty w c (jako rozszerzenie specyficzne dla x86)
    > > > - w tedy mozna by pisac w ce w prosty sposob akcelerowane
    > > > kody pod sse/avx np "c = a * b " pomnoz 8 floatow a razy 8
    > > > floatow b i zapisz do c i tak dalej - wiecej napisalem na
    > > > pl.lang.c
    > > Hmmm jeszcze dwa pytania mi sie nasuwaja:
    > >
    > > Po pierwsze czy w C++ nie ma czegos gotowego ze sie pisze
    > > po prostu a = b * c ?
    > >
    > > Po drugie czy instrukcje SEE/AVX da sie wykorzystac do budowania
    > > drzew/regul decyzyjnych? Innymi slowy czy da sie przyspieszyc ponizsza
    > > pteleke, tak zeby jakos bral cztery/osiem wektorow na raz?
    > >
    > > int_or_short vectors[M][N+1] = { rand() };
    > > int_or_short s = rand()%N;
    > > int_or_short t = rand();
    > >
    > > for( int i=0 ; i<M ; i++ ) {
    > > if( vectors[i][s] <= t )
    > > vectors[i][N] = 1;
    > > else
    > > vectors[i][N] = 0;
    > > }
    > >
    > troche nie rozumiem tego kodu bo o ile randy sa poza
    > petla to mozna po prostu zrobic
    >
    > for( int i=0 ; i<M ; i++ )
    > sseInt8[i] = value;
    >

    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











    > gdzie value - np { 0.0, 0.0, 0.0 ,0.0 ,0.0 ,1.0 ,1.0 ,1.0}
    >
    > co do instrukcji do rozgalezien decyzyjnych
    > to nie wiem jak na dzis ale chyba nie - sa blokowy
    > operator porownania ktore zapisuja wyniki do rejestru
    > cos w stylu a ?> b jesli a jest 8floatowe to dla tych
    > par floatow dla ktorych a>b do a trafiaja 32 jedynki
    > a w przeciwnym wypadku 32 zera
    > (ale nie przejrzalem mnemonikow do konca)
    >
    > jak budowac z tego kody ktore by sie rozgalezialy
    > decyzyjnie nie wiem, dla mnie jest to rzecz 'do
    > opanowania' trzebe sie bedzie przylozyc to
    > okaze sie co sie da zrobic i gdzie sa minusy
    >
    >
    >


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


  • 7. Data: 2012-01-27 15:51:42
    Temat: Re: [about] sse
    Od: " " <f...@W...gazeta.pl>

    <f...@g...SKASUJ-TO.pl> napisał(a):

    > slabo znam sse (chyba z powodu tego ze nie ma dobrych
    > tutoriali) ale z tego co sie poorientowalem to dziwi
    > mnie pare rzeczy:
    >
    > oprocz zestawu podstawowych operatorow typu +-*/&!<> itp
    > sa tam zdefiniowane jakies bardziej wyjechane operacje
    > ale zdaje sie ze nie ma kilku operacji sie wyraznie
    > narzucajacych (szczegolnie dla float4): dot, cross, pozatym

    tez length i normalize, raytracery itp by przyspieszyly
    pozatym te 'horyzentalne' operacje mozy by sie przydaly

    fajny jest ten asm, cos innego niz c jednak w pewnym sensie
    lepszy feeling, od razu mi sie humor porawil







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


  • 8. Data: 2012-01-27 18:47:05
    Temat: Re: [about] sse
    Od: " M.M." <m...@W...gazeta.pl>

    <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/


  • 9. Data: 2012-01-27 20:22:15
    Temat: Re: [about] sse
    Od: " " <f...@W...gazeta.pl>

    M.M. <m...@W...gazeta.pl> napisał(a):

    > <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.
    >
    >

    zdaje sie ze nie ma czegos takiego - glownie chyba
    mozna liczyc na rownolegle wykonywanie podstawowych
    opearcji jak * / + - sqrt, i tak nie wiem czy to dziala
    rzeczywiscie 4 (avx 8) razy szybciej niz fpu ale jakis
    procent szybciej pewin ejednak dziala

    jak potrzebujesz pisac jaknajszybsze procedury to sie
    najlepiej naucz sse - ja mam zamiar sie nauczyc, w miare
    poduczania wrzuce jakiegos posta z uwagami bo pare sie
    pojawia

    szkoda ze to pisanie bezposrednio kodu maszynowego
    przez 'odpalanie stringow' mi sie sypie z niewiadomych
    powodow (jeszcze nie szukalem odpowiedzi) na instrukcjach
    fpu/sse bo jest dosyc wygodne i moze od razu bym testowal
    czy funkcje przyspieszają







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

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: