eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[asm] i dont (quite) get it › [asm] i dont (quite) get it
  • X-Received: by 10.140.47.102 with SMTP id l93mr299741qga.5.1404565549245; Sat, 05 Jul
    2014 06:05:49 -0700 (PDT)
    X-Received: by 10.140.47.102 with SMTP id l93mr299741qga.5.1404565549245; Sat, 05 Jul
    2014 06:05:49 -0700 (PDT)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.unit0.net!news.glorb.com!uq10no1794021igb.0!news-out.
    google.com!a8ni6411qaq.1!nntp.google.com!i13no6161905qae.1!postnews.google.com!
    glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sat, 5 Jul 2014 06:05:49 -0700 (PDT)
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=78.30.113.174;
    posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
    NNTP-Posting-Host: 78.30.113.174
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <a...@g...com>
    Subject: [asm] i dont (quite) get it
    From: firr <p...@g...com>
    Injection-Date: Sat, 05 Jul 2014 13:05:49 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:206186
    [ ukryj nagłówki ]

    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)


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: