drfedja
CPU Guru
- Učlanjen(a)
- 01.04.2009.
- Poruka
- 3.084
- Rezultat reagovanja
- 14
Moja konfiguracija
PC / Laptop Name:
Dell n5010, Intel Core i3 370M 2.4 GHz, 4 GB DDR3 1333
CPU & cooler:
Intel Core i7 4790K @ 4.5 GHz
Motherboard:
Biostar Hi-Fi Z97WE
RAM:
16GB Kingston HyperX Beast 2400
VGA & cooler:
Sapphire AMD Radeon R9-280X
Display:
Viewsonic VA2342 23" LED, LG 25"Ultrawide, Samsung VA2342 23"
HDD:
Samsung SSD850 Evo 250GB, Kingston 120GB V300 SSD, 2x1GB WD Caviar black
Sound:
Altec Lansing 5100E
Case:
Cooler Master 690-III
PSU:
Cooler Master G650M modular
Optical drives:
N/A
Mice & keyboard:
Keyboard/Mouse Cooler Master Storm
Internet:
Cable
OS & Browser:
Windows 10 Pro 64-bit
Other:
iPhone 6S 64GB
SPi koristi arhaicne x87 instrukcije, kod nije vektorizovan i tesko da moze da se paralelizuje, jer je Gauss Legendre-ov algoritam zavistan od medjurezultata.
Elem, SPi ima IPC od samo 0.2-0.3 na K10. Na Core i7 mozda ima 0.5. Mahom se izvrsavaju x87 FP instrukcije i to ni manje ni vise nego kvadratni koren!!!
Kvadratni koren ima veliku latenciju i komplikovan je za izvrsavanje.
SPi koristi Gaus-Ležandrov metod za računanje broja Pi. U pitanju je numerička metoda koja se ponavlja iterativno.
Koga zanima objasnicu i ovo. Inicijalne vrednosti su:
a = 1 b = 1 / SqRt(2) t = 1/4 x = 1
Ovo se ponavlja u zavisnosti od toga koliko hocemo iteracija u SPi da napravimo:
y = a
a = (a+b) / 2
b = SqRt(b*y)
t = t - x * (y-a)^2
x = 2 * x
Pi aproksimiramo pomocu sledece formule:
Pi = ((a+b)^2) / (4*t)
Evo i C koda za ovo:
Ovo je u principu jezgro spi programa. 
Koriscenje fsqrt x87 instrukcije je daleko sporije nego koriscenje skalarne SSE instrukcije za racunanje kvadratnog korena. Ipak, kompajleri standardno koriste x87 fsqrt pre nego SSE.
Ovo su vremena izvrsavanja i latencija instrukcija:
Odredjene operacije se izvrsavaju aproksimativno, pa postoji i odredjena greska u izracunavanju.
Elem, SPi ima IPC od samo 0.2-0.3 na K10. Na Core i7 mozda ima 0.5. Mahom se izvrsavaju x87 FP instrukcije i to ni manje ni vise nego kvadratni koren!!!
Kvadratni koren ima veliku latenciju i komplikovan je za izvrsavanje.
SPi koristi Gaus-Ležandrov metod za računanje broja Pi. U pitanju je numerička metoda koja se ponavlja iterativno.
Koga zanima objasnicu i ovo. Inicijalne vrednosti su:
a = 1 b = 1 / SqRt(2) t = 1/4 x = 1
Ovo se ponavlja u zavisnosti od toga koliko hocemo iteracija u SPi da napravimo:
y = a
a = (a+b) / 2
b = SqRt(b*y)
t = t - x * (y-a)^2
x = 2 * x
Pi aproksimiramo pomocu sledece formule:
Pi = ((a+b)^2) / (4*t)
Evo i C koda za ovo:
Kod:
#include<stdio.h>
#include<math.h>
int main(void)
{
double a=1, b, t=0.25, x=1, y;
int its, i;
b = 1/sqrt(2);
printf("\n Unesi broj iteracija: >");
scanf("%u", &its);
for(i=0; i<its; i++)
{
y = a;
a = (a + b) / 2;
b = sqrt(b * y);
t = t - x*(y - a)*(y-a);
x = 2*x;
}
printf("\nPI = %u\n\n", ((a+b)*(a+b)/(4*t)));
return(0);
}

Koriscenje fsqrt x87 instrukcije je daleko sporije nego koriscenje skalarne SSE instrukcije za racunanje kvadratnog korena. Ipak, kompajleri standardno koriste x87 fsqrt pre nego SSE.
Ovo su vremena izvrsavanja i latencija instrukcija:
Ovde se jasno vidi koliko je ogromna razlika (i do 10x) izmedju kvadratnog korenovanja skalarnim SSE operacijama i x87.Compiler sqrt(x) /x87 FPU FSQRT 404.029ms 24ns 0.0000%
SSE intrinsic ssqrts 200.395ms 11.9ns 0.0000%
Carmack’s Magic Number rsqrt * x 72.682ms 4.33ns 0.0990%
SSE rsqrtss * x 20.495ms 1.22ns 0.0094%
SSE rsqrtss * x with one NR step 53.401ms 3.18ns 0.0000%
SSE rsqrtss * x with one NR step,
unrolled by four 48.701ms 2.90ns 0.0000%
Odredjene operacije se izvrsavaju aproksimativno, pa postoji i odredjena greska u izracunavanju.
Poslednja izmena: