eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › [asm] i dont (quite) get it
Ilość wypowiedzi w tym wątku: 15

  • 1. Data: 2014-07-05 15:05:49
    Temat: [asm] i dont (quite) get it
    Od: firr <p...@g...com>

    przegladam jedna stronke i tam jest napisane



    Żeby jednak w 100% wykorzystać moc obliczeniową, należy liczyć równocześnie 4
    iloczyny skalarne.

    sse-dotprod4.c:


    void sse_dot4(float* v1x4, float* v2x4, float* results) {
    __asm__ volatile (
    // load 4 vectors from v1
    "movups (%0), %%xmm0 \n"
    "movups 16(%0), %%xmm1 \n"
    "movups 32(%0), %%xmm2 \n"
    "movups 48(%0), %%xmm3 \n"

    // load 4 vectors from v2
    "movups (%1), %%xmm4 \n"
    "movups 16(%1), %%xmm5 \n"
    "movups 32(%1), %%xmm6 \n"
    "movups 48(%1), %%xmm7 \n"

    // perfom parallel multiplications
    "mulps %%xmm4, %%xmm0 \n" // xmm0 := |A3|A2|A1|A0|
    "mulps %%xmm5, %%xmm1 \n" // xmm1 := |B3|B2|B1|B0|
    "mulps %%xmm6, %%xmm2 \n" // xmm2 := |C3|C2|C1|C0|
    "mulps %%xmm7, %%xmm3 \n" // xmm3 := |D3|D2|D1|D0|
    // (xmm4-xmm7 are free)

    // perfom additions
    "movaps %%xmm0, %%xmm4 \n"
    "unpcklps %%xmm1, %%xmm0 \n" // xmm0 := |B1|A1|B0|A0|
    "unpckhps %%xmm1, %%xmm4 \n" // xmm4 := |B3|A3|B2|A2| (xmm1 is free)
    "movaps %%xmm2, %%xmm1 \n"
    "unpcklps %%xmm3, %%xmm2 \n" // xmm2 := |D1|C1|D0|C0|
    "unpckhps %%xmm3, %%xmm1 \n" // xmm1 := |D3|C3|D2|C2| (xmm3 is free)
    "addps %%xmm4, %%xmm0 \n" // xmm0 := | B13 | A13 | B02 | A02 | (xmm1 is
    free)
    "addps %%xmm1, %%xmm2 \n" // xmm2 := | D13 | C13 | D02 | C02 | (xmm3 is free)

    "movaps %%xmm0, %%xmm1 \n"
    "shufps $0b01000100, %%xmm2, %%xmm0 \n" // xmm0 := | D02 | C02 | B02 | A02 |
    "shufps $0b11101110, %%xmm2, %%xmm1 \n" // xmm1 := | D13 | C13 | B13 | A13 |
    "addps %%xmm1, %%xmm0 \n" // xmm0 := |D0123|C0123|B0123|A0123|
    "movups %%xmm0, (%2) \n"
    :
    : "r" (v1x4), "r" (v2x4), "r" (results)
    );
    }

    przez pare dobrych minut ne moglem pojac czemu to jest tak napisane gdy zwykle
    pionowe sse moze sie spokojnie obejsc tutaj bez szufli

    xxxx
    yyyy
    zzzz
    XXXX
    YYYY
    ZZZZ
    |
    v
    x*X+y*Y+z*Z

    i mz bedzie to raczej chyba szybsze ze wzgledu na to ze 1) nie uzywa szufli
    2) wogole operuje na mniejszej liczbie bajtów.. ta wersja wyzej jak rozumiem
    mnozy wektory 4D a czesciej przydatne sa 3D do tego pytanie czemu az czetry na raz,
    jesli to jest wlasciwie pozioma wersja to czmu np 4 a nie 2 albo 5? - akurat
    rejestrow starczylo na 4?

    z drugiej strony rozumiem ze taka pozioma wersja ma zalety co do tego poziomego
    rozkladu wektorow

    drugie pytanie czy taki sposob pisania zagwarantuje jakis standardowy prolog i epilog
    takiej funkcji? (tj bez jakichs zmuleń) i co to jest -
    : "r" (v1x4), "r" (v2x4), "r" (results)
    ?

    czy jest to asm pod gcc? (w sumie po przyzwyczajeniu sie nie jest gorszy od
    tego starego - jest chyba nawet lepszy pominawszy odwrocona kolejnosc)



  • 2. Data: 2014-07-05 17:49:29
    Temat: Re: [asm] i dont (quite) get it
    Od: feldmarszałek tusk <N...@g...pl>

    > __asm__ volatile (
    > // load 4 vectors from v1
    > "movups (%0), %%xmm0 \n"

    taka teraz moda, czy zabrałeś się od dupy strony?
    P.S. ja się nie znam... tak twierdzi tusk i gronkiewicz...


  • 3. Data: 2014-07-07 12:14:55
    Temat: Re: [asm] i dont (quite) get it
    Od: XJL <X...@w...pl.invalid>

    W dniu 05.07.2014 17:49, feldmarszałek tusk pisze:
    >> __asm__ volatile (
    >> // load 4 vectors from v1
    >> "movups (%0), %%xmm0 \n"
    >
    > taka teraz moda, czy zabrałeś się od dupy strony?
    > P.S. ja się nie znam... tak twierdzi tusk i gronkiewicz...

    To która strona jest właściwa i czy została już zaaprobowana przez Unię
    Europejską?


  • 4. Data: 2014-07-07 12:49:52
    Temat: Re: [asm] i dont (quite) get it
    Od: firr <p...@g...com>

    wogole wlasnie ta forma z tymi 'końcówkami' (nawet nie wiem jak to nazwac) dla inline
    assembly w gcc wydaje mi sie w sumie fatalna

    co to ma byc

    void sse_dot(float vec1[4], float vec2[4], float* result) {
    __asm__ volatile (
    "movups (%0), %%xmm0 \n" // load vec1: |w1|z1|y1|x1|
    "movups (%1), %%xmm1 \n" // load vec2: |w2|z2|y2|x2|
    " \n"
    "mulps %%xmm1, %%xmm0 \n" // xmm0 := |w1*w2|z1*z2|y1*y2|x1*x2|
    "movhlps %%xmm0, %%xmm1 \n" // xmm1 := | . | . |w1*w2|z1*z2|
    "addps %%xmm0, %%xmm1 \n" // xmm1 := | . | . | w+y | z+x |
    "movaps %%xmm1, %%xmm0 \n" // save xmm1
    "shufps $0x01, %%xmm1, %%xmm1 \n" // xmm1 := | . | . | . | w+y |
    "addss %%xmm1, %%xmm0 \n" // xmm0[0] := dot product
    "movss %%xmm0, (%2) \n"
    :
    : "r" (vec1), "r" (vec2), "r" (result));
    }

    juz o wiele lepiej wyglada tow czystym asmie
    przynajmniej wszystko jasne


    Dump of assembler code for function sse_dot(float*, float*, float*):
    0x000000a0 <+0>: mov 0xc(%esp),%ecx
    0x000000a4 <+4>: mov 0x8(%esp),%edx
    0x000000a8 <+8>: mov 0x4(%esp),%eax
    0x000000ac <+12>: movups (%eax),%xmm0
    0x000000af <+15>: movups (%edx),%xmm1
    0x000000b2 <+18>: mulps %xmm1,%xmm0
    0x000000b5 <+21>: movhlps %xmm0,%xmm1
    0x000000b8 <+24>: addps %xmm0,%xmm1
    0x000000bb <+27>: movaps %xmm1,%xmm0
    0x000000be <+30>: shufps $0x1,%xmm1,%xmm1
    0x000000c2 <+34>: addss %xmm1,%xmm0
    0x000000c6 <+38>: movss %xmm0,(%ecx)
    0x000000ca <+42>: ret
    End of assembler dump.

    aczkolwiek ani jedna ani druga (czyli ta ms vs gcc) skladnia mi sie nie podoba i
    wolalbym uzywac jakiejs swojej o wiele lepszej

    // function sse_dot(float*, float*, float*)

    mov ecx (!c)
    mov edx (!8)
    mov eax (!4)
    mov-u-ps x0 eax
    mov-u-ps x1 edx
    mul-ps x0 x1
    mov-hl-ps x1 x0
    add-ps x1 x0
    mov-a-ps x0 x1
    shuf-ps x1 x1 1
    add-ss x0 x1
    mov-ss (ecx) x0
    ret

    tj nawrzucalbym troche skrótów np (!c) dla trzeciego inta na stosie itd - byloby
    ladniej

    (niestety nie chce mi sie pisac asemblera, te tabele rozkazow sa za dlugie) - szkoda
    ze nie mam tyle kasy zeby komus zaplacic za napisanie tego , ciekawe ile musialbym
    wybulic za taki skromny ale dzialajacy asembler, nie jest to az tak duzo roboty w
    miesiac chyba mozna by sie uwinąć




  • 5. Data: 2014-07-07 15:13:11
    Temat: Re: [asm] i dont (quite) get it
    Od: feldmarszałek tusk <N...@g...pl>

    ja się podobno nie znam, ale dlaczego wymyślono coś takiego jak inline
    asm? to po to, żeby eksperci na tej grupie mogli się popisywać głupotą?

    nie dało by się napisać procedury w oddzielnym pliku assemblerowym? nie
    czaję geniuszu tego inlina...


  • 6. Data: 2014-07-07 15:20:03
    Temat: Re: [asm] i dont (quite) get it
    Od: feldmarszałek tusk <N...@g...pl>

    nie czaję też, dlaczego nie nie można mieszać kodu asm z c, przerosło to
    teleinformatyków współtworzących społecznościowo gcc? a może jakaś
    dyrektywa była?


  • 7. Data: 2014-07-07 16:38:18
    Temat: Re: [asm] i dont (quite) get it
    Od: feldmarszałek tusk <N...@g...pl>

    a za tego inlina to na pewno granty się posypały...


  • 8. Data: 2014-07-07 16:58:11
    Temat: Re: [asm] i dont (quite) get it
    Od: Stregor <s...@g...com>

    > (niestety nie chce mi sie pisac asemblera, te tabele rozkazow sa za
    > dlugie) - szkoda ze nie mam tyle kasy zeby komus zaplacic za
    > napisanie tego , ciekawe ile musialbym wybulic za taki skromny ale
    > dzialajacy asembler, nie jest to az tak duzo roboty w miesiac chyba
    > mozna by sie uwinąć

    za 15-20k pln mogę Ci taki napisać. Jeśli jesteś zainteresowany, to
    podaj dokładniejszą specyfikację wymagań.

    --
    Pozdrawiam,
    Stregor


  • 9. Data: 2014-07-07 17:16:45
    Temat: Re: [asm] i dont (quite) get it
    Od: feldmarszałek tusk <N...@g...pl>

    i co znajdują się jakieś powskie głupki które dają się na to nabrać?


  • 10. Data: 2014-07-07 17:55:56
    Temat: Re: [asm] i dont (quite) get it
    Od: "R.e.m.e.K" <p...@w...pl>

    Dnia Mon, 07 Jul 2014 17:16:45 +0200, feldmarszałek tusk napisał(a):

    > i co znajdują się jakieś powskie głupki które dają się na to nabrać?

    Pisowcy programuja za free?

    --
    pozdro
    R.e.m.e.K

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: