• Apgrejdovali smo forum na XenForo 2.1.1, ukoliko imate predloga vezanih za izgled ili funkcionalnost foruma, ili ukoliko naletite na neki problem, javite nam OVDE

    DEFINISALI SMO PRAVILA FORUMA. Pročitajte ih, pojaviće se automatski kada krenete da čitate nešto!

To SPi or not to SPi, question is now! :)

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:
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);
}
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:

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%
Ovde se jasno vidi koliko je ogromna razlika (i do 10x) izmedju kvadratnog korenovanja skalarnim SSE operacijama i x87.
Odredjene operacije se izvrsavaju aproksimativno, pa postoji i odredjena greska u izracunavanju.
 
Poslednja izmena:

animaN

Administrator
Urednik
Učlanjen(a)
28.03.2009.
Poruka
9.407
Rezultat reagovanja
121
Moja konfiguracija
CPU & cooler:
Ci7 3930K@ Coolink CoratorDS
Motherboard:
ASUS P9X79 Deluxe
RAM:
4x4GB Mushkin 1600 MHz cl9, 1.5V
VGA & cooler:
Sapphire HD6950 FleX Edition
Display:
3x Belinea 102035W
HDD:
Corsair ForceGT 120GB SSD,WD AAKS 640 GB, WD MyBook 500GB
Sound:
Realtek ALC889 - Logitech Z2300
Case:
Cooler Master bench table
PSU:
Cooler Master Silent Pro 850W
Optical drives:
USB LiteOn
Mice & keyboard:
Logitech G15 - Logitech MX518
Internet:
SBB 10/1 Mbit
OS & Browser:
Windows 7 x64 SP1
Other:
Volim AXE
Sjajan tekst Fedjolino! :)

Pojasni ljudima boldovane pojmove ispod:

drfedja je napisao(la):
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.
Da li moze pojashnjeje za ovo:

drfedja je napisao(la):
Ipak, kompajleri standardno koriste x87 fsqrt pre nego SSE.
Zashto?
 

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
I pored X87 instrukcija i prednosti IPC'a Intel'a u odnosu na K10 moja procena je da nesto drugo ovdje igra vecu ulogu.

Sobzirom da govorimo o aplikaciji koja treba da izracuna Milion ili 32 Miliona decimala nakon zareza najbitnija stavka u ovoj celoj prici nije implementacija X87 instrukcija i njen IPC nego biblioteka za precizno racunanje koja se koristila kod superpi alatke.

Postoje razne biblioteke koje pomocu float point arithmetike danas omogucuju racunanje sa veoma velikim brojevima kao sto su MPMATH ili BigAL za Javu.
Kljuc performansi je upravu u toj biblioteci. Sobzirom da je neminovna cinjenica da u samom Algorithmu pristupa medjuvrednostima koje su spremljene u samom L2/L3 cachu procesora veoma bitnu ulogu ce imati velicina samog cache'a CPU'a dostupna jednom izvrsnom threadu
 

BigJoe

PCAXE OC team
Učlanjen(a)
28.03.2009.
Poruka
2.788
Rezultat reagovanja
1
Moja konfiguracija
CPU & cooler:
Intel Core i7-920 (D0) & TRUE Black + 2x Noctua P12
Motherboard:
Intel DX58SO
RAM:
3x2GB OCZ Reaper 1600 CL7
VGA & cooler:
ATi Radeon HD5850 by GA
Display:
SAMSUNG SM 206BW
HDD:
~3,5TB
Sound:
Realtek ALC889
Case:
CM Stacker 830 Black + X Craft 350 + SCYTHE KAZA MASTER
PSU:
TT ToughPower 1500W
Optical drives:
Lite-ON LH-20A1S & SAMSUNG SH-S223L
Mice & keyboard:
Logitech MX1000 + G500 + G11
Internet:
ADSL 4Mb/256Kb
OS & Browser:
Windows 7 x64
Other:
HTC Desire, iPod Classic Black 80GB
Feđa svaka čast, ovih dana si baš u edukativnom raspoloženju :)
 

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
Sjajan tekst Fedjolino! :)

Pojasni ljudima boldovane pojmove ispod:



Da li moze pojashnjeje za ovo:



Zashto?
x87 je set instrukcija za rad sa razlomljenim iliti realnim brojevima. U kompjuterskoj
nauci se to strucno naziva Floating Point iliti FP, Float - plutajuca zapeta! :P
Plivajuci zarez je zato sto FPU - floating point unit radi sa realnim brojevima
tako sto pomera zarez. Npr. 3.14 je 0.314*10^1. Po IEEE754 formatu ovo se zapisuje kao U registru se ovo zapisuje binarno kao:

Eksponent se racuna binarno 1000000 = 128 - 127 = 1. Da bi dobili broj 2 racunamo ga kao
2^1. Dvojka se zapisuje u mantisi kao 0000000000000...00.
Broj 3 je 10000000000000...0000. Racuna se po formuli znak*(mantisa*2^exponent).
Prva cifra je znak. 0 je +, a 1 je -, po konvenciji.
Dalje, mantisa se racuna po stepenu dvojke, dakle 2^n. Svaka jedinica u frakciji predstavlja stepen dvojke uvecan za jedan sa leva na desno.
Tako nas broj Pi=3.14 zapisujemo ovako u fp registrima:

0 10000000 10010001111010111000011 (ovo je 32-bitna FP reprezentacija u IEEE754 formatu)

Ovo je tzv. single precision zapis, 32-bita. Postoje 64-bitni DP - Double Precision, kao i 128-bitni. Sa ovim zapisima moguce je preciznije aproksimirati razlomljen broj.

x87 rade samo sa jednom vrednoscu. Dakle instrukcija moze da izracuna samo jedan broj.
Kod SSE instrukcija u vektor od po 4 broja se smestaju npr. 4 32-bitna broja, nad kojima se vrsi neka operacija, npr. mnozenje, sabiranje, deljenje, mnozenje skalarom, t.j. jednim brojem itd...
Skalarna SSE instrukcija radi isto sto i x87 sa razlikom sto ne koristi stek registar za izracunavanje, nego ima svoje registre. Stek je inace struktura podataka, takva da ono sto je poslednje stavljeno prvo se skida. Za poredjenje, stek je npr. stap na kojem drzite DVD-ove. Da bi dosli do donjeg, morate sve da skinete. Tako je i kod x87 FPU-a. Da bi pristupio podatku koji je na dnu steka, mora da skine sve.
x87 poseduje 8 Stack registara sirine 80-bita maksimalno. Ovo znaci da on moze da operise sa maksimalno sa 64-bitnim IEEE754 vrednostima. Po matorom IEEE754-1985 standardu u 80-bitni registar moze da se smesti 64-bitna mantisa, 15-bitni eksponent i 1-bitni znak.
Ovo se moze koristiti prilikom rada sa 32-bitnim ili 64-bitnim varijablama koje se mogu ucitati u FPU stack registar, nakon cega se one konvertuju u 80-bitne da bi se kalkulacije obavile u 80-bitnoj preciznosti. Posle kalkulacije, vrednosti se "zaokruzuju" na 32 ili 64-bitne. Pogresna izracunavanje se mogu izbeci koriscenjem kompajler switcha kojim se izracunavanja vrse iskljucivo u 80-bitnoj preciznosti.

SSE instrukcije nasuprot x87 koriste 16 registara. SSE je SIMD - single instruction multiple data koji radi po ovom principu:

Zbog mogucnosti smestanja po 4 32-bitne vrednosti sa kojom je moguce vrsiti operacije mnozenja, sabiranja, deljenja, skalarnog mnozenja itd... koriscenje SIMD instrukcija ima visestruke prednosti. Npr, u multimedijalnoj primeni jedan piksel nosi informacije o boji - R, G i B komponente, koje su 3 osmobitne vrednosti. Kao cetvrtu vrednost moguce je cuvati jos neku informaciju o tom pikselu. Npr alfa faktor itd...
SIMD, odnosno SSE je zgodan za matricne proracune. Matrica je skup vektora. Vektor je niz nekih vrednosti. Npr, 4 32-bitna broja poredjana jedna za drugim su vektor. Nad tim vektorom moguce je izvrsiti samo 1 instrukciju. Istu operaciju je moguce uraditi i pomocu x87 FP instrukcija, ali za to ce vam biti potrebne 4 32-bitne x87 FP instrukcije, koje obicno imaju vecu latenciju, t.j. vreme izvrsavanja od SSE SIMD operacija.

Kompajleri najcesce koriste x87 umesto SSE iz razloga kompatibilnosti. Pored toga, x87 se koristi cesto iz razloga jer sami kompajleri nisu optimalno napravljeni za takve stvari.
Cesto nije moguce iskoristiti optimalno SSE instrukcije ukoliko nije sam kod vektorizovan, sto znaci da nisu korisceni nizovi, nego pojedinacne varijable. Npr, u gorepomenutom Gaus Ležendreoovom algoritmu nema vektorizacije, pa je nije moguće upotrebiti vektorske SSE instrukcije. Moguće je koristiti skalarne SSE za izračunavanje kvadratnog korena, ali tu je opet problem kompajlera koji pitanje kako to iskoristi.
 

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
I pored X87 instrukcija i prednosti IPC'a Intel'a u odnosu na K10 moja procena je da nesto drugo ovdje igra vecu ulogu.
Ako gledamo implementaciju x87 instrukcija, tu je K10 u prednosti. Latencija SQRT je ista ili manja nego na i7.

Sobzirom da govorimo o aplikaciji koja treba da izracuna Milion ili 32 Miliona decimala nakon zareza najbitnija stavka u ovoj celoj prici nije implementacija X87 instrukcija i njen IPC nego biblioteka za precizno racunanje koja se koristila kod superpi alatke.
IPC je nizak jer postoji ono sto zovemo "stall", odnosno usko grlo.
Biblioteka koja se koristila očigledno nije baš najbolje optimizovana. Probaj sa Mathlabom da izračunaš Pi na milion decimala pa ćeš videti koliko je puta brže. :)

Postoje razne biblioteke koje pomocu float point arithmetike danas omogucuju racunanje sa veoma velikim brojevima kao sto su MPMATH ili BigAL za Javu.
Kljuc performansi je upravu u toj biblioteci. Sobzirom da je neminovna cinjenica da u samom Algorithmu pristupa medjuvrednostima koje su spremljene u samom L2/L3 cachu procesora veoma bitnu ulogu ce imati velicina samog cache'a CPU'a dostupna jednom izvrsnom threadu
Veličina keša jeste bitna, ali nije presudna. Bitan je hit rate keša i njegova latencija. Za nizak IPC je kriv sam algoritam, kao i veliki dataset koji se nalazi van procesorskih registara.
 

d0minat0r

PCAXE OC team
Učlanjen(a)
01.04.2009.
Poruka
3.633
Rezultat reagovanja
58
Moja konfiguracija
VGA & cooler:
Gainward 4850 512DDR3
Display:
Viewsonic 24"
HDD:
seagate 500Gt Single P
Case:
/
Optical drives:
Samsung 203D
Mice & keyboard:
A4tech oscar X 748K i microsoft ergo natural 4000
Internet:
ADSL 4Mbit
OS & Browser:
WIN7
MOj brat Fedja :)
 

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

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
fedja , zadatak za tebe !
Disassembliraj super_pi_mod.exe i pronadji FSQRT :)

Jednostavan primer koji si naveo gore sa nekoliko iteracija ogranicen fizickom sirinom registara samog CPU'a nije adekvatan pokazivac zbog cega upravo AMD u SPI1M odnosno Spi32M ima znatno losije rezultate.
Voljan sam da napravimo detaljnu analizu isprobamo neke druge algoritme ili sami odradimo spi proracun na osnovu neke optimizovane biblioteke :)
Programirati sad preciznu float point arithmetiku je opsiran posao ali nace se neka adekvatna biblioteka.
 
Poslednja izmena:

Luka

PCAXE Member
Učlanjen(a)
29.06.2010.
Poruka
294
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Athlon II X3 425
Motherboard:
MSI 770-G45
RAM:
2x2 GB Kingston DDR3 @ 1600MHz CL8
VGA & cooler:
MSI Cyclone HD4770
Display:
Prestigio P3222W
HDD:
Western Digital WD5000AAKS
Sound:
Integrale
Case:
Lc Power 914B II
PSU:
LC 600w
Optical drives:
Samsung SH-S223C
Mice & keyboard:
MX518 / Logitech no name
Internet:
SBB 10Mbit
OS & Browser:
Windows 8.1
Other:
SteelSeries QcK
Veoma opsirno i precizno objasnjenje Fedja! :)
 

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
fedja , zadatak za tebe !
Disassembliraj super_pi_mod.exe i pronadji FSQRT :)
Probacu, pa javljam sta sam nasao.

Jednostavan primer koji si naveo gore sa nekoliko iteracija ogranicen fizickom sirinom registara samog CPU'a nije adekvatan pokazivac zbog cega upravo AMD u SPI1M odnosno Spi32M ima znatno losije rezultate.
Slazem se. Ali ovim gore nisam hteo da objasnim to, nego da pokazem kako radi SPi, odnosno na kom principu radi algoritam za racunanje broja Pi u ovom programu.

Voljan sam da napravimo detaljnu analizu isprobamo neke druge algoritme ili sami odradimo spi proracun na osnovu neke optimizovane biblioteke :)
Programirati sad preciznu float point arithmetiku je opsiran posao ali nace se neka adekvatna biblioteka.
Daj neki predlog vezan za izbor biblioteke za rad sa velikim brojevima. Ono kako radi SPi je sporo.
 

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
Probacu, pa javljam sta sam nasao.

Slazem se. Ali ovim gore nisam hteo da objasnim to, nego da pokazem kako radi SPi, odnosno na kom principu radi algoritam za racunanje broja Pi u ovom programu.


Daj neki predlog vezan za izbor biblioteke za rad sa velikim brojevima. Ono kako radi SPi je sporo.

http://www.apfloat.org/apfloat/
obrati paznju na podeljeni sourcecode po platformi i arhitekturi procesora

Ako stignem za vikend mozemo podici jedan mali test projekat.

Mozda jos efikasnija

http://www.ginac.de/CLN/
 
Poslednja izmena:

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
Evo jezgra SPi x87 FP komandi:

Ne mogu da tvrdim sta se racuna u registrima, ali sled operacija i ucitavanje u registre lici mnogo na Gaus Lezendrov algoritam.
Izgleda da SPi racuna u delovima i parcice smesta u fajl. Obrati paznju na asm kod.
 

Prilozi

Poslednja izmena:

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
Evo jezgra SPi x87 FP komandi:

Ne mogu da tvrdim sta se racuna u registrima, ali sled operacija i ucitavanje u registre lici mnogo na Gaus Lezendrov algoritam.
Izgleda da SPi racuna u delovima i parcice smesta u fajl. Obrati paznju na asm kod.
Ne stari kad trazis commandu putem OllyDbg onda ces pronaci prvu kombinaciju Opcode'a za operaciju FSQRT a ta kombinacija moze da bude i neka adresa a ne instruukcija namenjana FPU'u kao sto je i ovdje slucaj.

Zapravo na adresi gdje si pronasao je ustvari JE skok...

Najbolje podji na entry point Exe Modula i trazi forward i backward FSQRT videces da je nema.

asm superpi_mod_1.5.exe
 

Prilozi

micri

Betmen
Učlanjen(a)
01.04.2009.
Poruka
3.515
Rezultat reagovanja
150
Moja konfiguracija
PC / Laptop Name:
Rupa bez dna
CPU & cooler:
INTEL Core i5-13600KF/NZXT X73
Motherboard:
Asus Z690G-Gaming Wifi
RAM:
G.SKILL 32GB Trident Z5 RGB DDR5 6000MHz CL40
VGA & cooler:
AsRock RX6900XT OC Formula
Display:
BenQ EX2780Q/Hisense 65u8gq
HDD:
Seagate Firecuda 520 1tb/Seagate Firecuda 520 1tb/WD 3TB RED/WD 2TB Black
Sound:
Samsung Q800c/Sennheiser GSP670/JBL Flip 5
Case:
LIAN LI PC-O11D Mini TG black
PSU:
CORSAIR SF Series SF750 Platinum 750W
Mice & keyboard:
Corsair K95 Platinum/Razer Naga 2014/Glorious Model D Wireless
Internet:
Optika 400/80
OS & Browser:
W10
Other:
Apple iPhone 13 Pro Max 128GB/iPhone XS Max 64gb/Logitech F710/Sony Playstation 5 Disc

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
Ne stari kad trazis commandu putem OllyDbg onda ces pronaci prvu kombinaciju Opcode'a za operaciju FSQRT a ta kombinacija moze da bude i neka adresa a ne instruukcija namenjana FPU'u kao sto je i ovdje slucaj.

Zapravo na adresi gdje si pronasao je ustvari JE skok...
Koliko vidim tu nema skoka, nikakvog. Taj deo koda koji sam izvukao iz debuggera je deo koji se izvrsava u toku rada SPi. E sad koliko vidim FSQRT nema nikakvu adresu, pa pretpostavljam da radi sa vrednoscu koja mu je u stek registru u FPU.

Najbolje podji na entry point Exe Modula i trazi forward i backward FSQRT videces da je nema.

asm superpi_mod_1.5.exe
Na Entry Point-u se ne nalazi taj deo koda koji vrti iteracije u SPi vec neke reference na sistemske biblioteke tipa GDI32 itd...
 

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
Upravu si tokom debuga kad se malo bolje pogleda sourcecode , FSQRT zaista biva pozvan ali kao sto sam i predpostavio nema direktnu vezu sa izracunavanjem algoritma za sledecu decimalu.

Adresa koja je interesantna i gdje je spremljen OPCODE za FSQRT je 420CB5 ista biva tokom debuginga u superpi'u za bilo koji izbor broja decimala nebitno birao 16 hiljada ili 32 miliona pozvana samo cetiri puta
dovoljno ti je da stavis breakpoint na istu instrukciju i videces tokom inicialnog lupa se ista poziva cetiri puta a ksnije nijedanput vise.

Tokom debuginga dok radi proracun vidno je da su kljucne funkcije na sledecim adresama jel se stalno ponavljaju

- 420020
- 420C60
- 41FF6C
- 420024
 

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
I ti si u pravu sto se tice FSQRT. Poziva se vrlo retko. Analizirao sam stack frejm u kome se izvrsava loop sa odredjenim nizom instrukcija.
U pitanju su pozivi funkcija iz kojih se vrse proracuni u svakoj iteraciji. Svaka sledeca iteracija iznova poziva funkcije, koje se nalaze na adresama koje si postovao. ;)
Uglavnom su u pitanju FADD i FMUL x87 instrukcije, kao i operacije sa stack registrom FPU-a. Bilo kako bilo, u pitanju je SPi 1.5 mod, koji bi ako se ne varam trebalo da bude SSE optimizovan, ali statisticki gledano, veci deo vremena se trosi na x87 aritmeticke i stack operacije.

Sibnucu malo kasnije niz instrukcija koje se najcesce ponavljaju, pa mozemo da proanaliziramo kod. ;)
 

animaN

Administrator
Urednik
Učlanjen(a)
28.03.2009.
Poruka
9.407
Rezultat reagovanja
121
Moja konfiguracija
CPU & cooler:
Ci7 3930K@ Coolink CoratorDS
Motherboard:
ASUS P9X79 Deluxe
RAM:
4x4GB Mushkin 1600 MHz cl9, 1.5V
VGA & cooler:
Sapphire HD6950 FleX Edition
Display:
3x Belinea 102035W
HDD:
Corsair ForceGT 120GB SSD,WD AAKS 640 GB, WD MyBook 500GB
Sound:
Realtek ALC889 - Logitech Z2300
Case:
Cooler Master bench table
PSU:
Cooler Master Silent Pro 850W
Optical drives:
USB LiteOn
Mice & keyboard:
Logitech G15 - Logitech MX518
Internet:
SBB 10/1 Mbit
OS & Browser:
Windows 7 x64 SP1
Other:
Volim AXE

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
Tesko, osim ako ne izmenimo instrukcije koje se koriste, sto bi prouzrokovalo pucanje programa jer se rad sa stack registrima i SSE flat registrima bitno razlikuje.
Koriscenje stack registra degradira performanse. Ono zbog cega je x87 i dalje veoma zastupljen u velikom broju aplikacija je problem sto je veliki broj biblioteka optimizovan za stari x87 set instrukcija. Optimizacije su vrsene na asemblerskom nivou, pa bi za reoptimizaciju za upotrebu flat registara i SIMD instrukcija trebalo mnogo vremena. Ipak, kako vreme prolazi sve vise aplikacija koristi novije optimizovanije biblioteke koje su pisane za SIMD, t.j. SSE.

Poenta price je da utvrdimo zbog cega tacno na Core arhitekturi SPi radi brze nego na K10 i da probamo da zakljucimo da li ce SPi raditi brze na BD. ;)

Na kraju krajeva, kao nuspojava moze da se desi da sami napravimo svoj AxePi benchmark. :d
 
Poslednja izmena:

monteboy

PCAXE Addicted
Učlanjen(a)
01.04.2009.
Poruka
2.019
Rezultat reagovanja
0
Moja konfiguracija
CPU & cooler:
Phenom II X4 965
Motherboard:
Asus M4A79T Deluxe
RAM:
2048 G.Skill 12800HZ
VGA & cooler:
NV 7900 GTO
Case:
no case
PSU:
Silverstone Olympia 1000W
Internet:
DSL-16000
OS & Browser:
Windows 7 Ultimate
superpi SSE varijanta vec postoji. Cak i SSE2 i SSE3...
Testirao sam SSE3 varijantu u odnosu na ovu obicnu i razlika je u 32M nekih 20 sekundi u korist SSE3...

Nazalost na XS odnosno na hwbot jos uvek je relevantna stara FPU varijanta oznaka mod u imenu se odnosi na modifikaciju koja je svojevremeno odrdjena da bi se izbegla originalna instrukcija (nemogu da se sad setim tacno koja je bila) i koja je usporavala dosta tadasnje Pentium procesore.
 

CooLa

I didn't ask for this
Učlanjen(a)
02.03.2009.
Poruka
1.277
Rezultat reagovanja
55
Moja konfiguracija
PC / Laptop Name:
Mainframe
CPU & cooler:
AMD ThreadRipper 2920X
Motherboard:
Asus ROG Zenith Extreme
RAM:
8x8 Corsair Vengeance RGB PRO @ 3600MHz
VGA & cooler:
MSI RTX 2080Ti
Display:
3x Acer Predator 27"
HDD:
2x Samsung 970Pro 1TB + 2xSamsung 850Pro 2TB
Sound:
Integrale
Case:
Phanteks Evolv X
PSU:
Corsair HX1200i
Optical drives:
LOL
Mice & keyboard:
Razer Blackwidow Chroma + Razer Mamba TE
Internet:
Orion 1Gbit
OS & Browser:
Windows 10
Other:
Alienware R13 R3
Je l' ima negde ceo source SPi-ja da se skine?
 

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
A mozda na kraju i uspemo da optimizujemo za bolje vreme :d
I ako bi to uradili checksum bi nam bio drugaciji, pa nam rezove ne bi priznali. :d

Jedino da hakujemo checksum.... :rotf:


superpi SSE varijanta vec postoji. Cak i SSE2 i SSE3...
Testirao sam SSE3 varijantu u odnosu na ovu obicnu i razlika je u 32M nekih 20 sekundi u korist SSE3...

Nazalost na XS odnosno na hwbot jos uvek je relevantna stara FPU varijanta oznaka mod u imenu se odnosi na modifikaciju koja je svojevremeno odrdjena da bi se izbegla originalna instrukcija (nemogu da se sad setim tacno koja je bila) i koja je usporavala dosta tadasnje Pentium procesore.
Pa mogli bi da uzmu kao relevantnu SSE verziju. T.j. onda vise ne bi bila relevantna poredjenja sa K7 Athlonima (pre AXP) koji nisu imali SSE. :d
 

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
Vrh