Hirdetés

Új hozzászólás Aktív témák

  • #95904256

    törölt tag

    válasz P.H. #874 üzenetére

    Reciprok letesztelve, tessék megkapaszkodni !!!

    Teszthez használt CPU-k:
    AMD X2 3600+ Windsor (1800@2400MHz)
    Intel E4300 Allendale (1800@3200MHz)

    Mérés:
    31 bites prímszámok reciprokképzése
    AMD 3DNow!, PFRCP 32 bit <-> FIDIV 80 bit
    AMD SSE, RCPSS 32 bit <-> FIDIV 80 bit
    Intel SSE, RCPSS 32 bit <-> FIDIV 80 bit

    Mérés beállítások:
    FPU, SSE: Kerekítés a legközelebbi egészhez, egyenlőség esetén pároshoz.
    FPU: extended ( 80 bites ) pontosság

    Eredmény:
    Az esetek túlnyomó többségében mindhárom eredmény eltér egymástól.

    Példa:
    IEEE734 formátumú reciprok eredmények n=3 -ra.
    AMD 3DNow!: 3EAAAA00 ( = 0,33332825 )
    AMD SSE: 3EAAA800 ( = 0,3331299 )
    Intel SSE: 3EAAA000 ( = 0,33325195 )

    Hogy mindhárom eredmény eltért, nos ez erősen meglepett. Ezért a keresést kiterjesztettem az összes 31 bites pozitív egész számra. Ekkor jött a még nagyobb meglepetés, ugyanis a legnagyobb hibát az n=1 eset produkálta!

    Maximális eltérések:
    AMD 3DNow! : 0,00003051758 ( hiba = 1/32767 -> épp nincs meg a 14 bit )
    AMD SSE: 0,000244140625 ( hiba = 2 ^ -12 -> 11 bit mindig jó)
    Intel SSE: 0,000244140625 ( hiba = 2 ^ -12 -> 11 bit mindig jó)

    Megjegyzés:
    Az AMD SSE eredmények mikor eltértek az Intel eredményektől, mindig pontosabbak voltak.

    Szerk.: A Newton-Raphson iteráció használható SSE esetén is, csak akkor manuálisan kell leprogramozni. Nem igényel több regisztert, csak eggyel több memória műveletet. Xb=Xa*(2-N*Xa), ahol Xa az N reciprok közelítő értéke. Ez egy körben megduplázza a hasznos bitek számát. Ami azt jelenti hogy az SSE 11 bites pontosságát nem lehet egy körben 24 bites mantissza méretre ( single precision ) interpolálni.

    [Szerkesztve]

Új hozzászólás Aktív témák