Šta je novo?

Odnos 64 bitnih sistema AMD vs Intel

audiofreak je napisao(la):
Postoje alternative za exception handling u vidu setjmp/longjmp i Microsoftovih nestandardnih SEH (Structured Exception Handler) ekstenzija C standarda.

S obzirom da ja koristim C++ samo kada smatram da je neophodno, a za ovo kao sto rekoh mislim da je C++ kod overkill to je bio razlog da napisem kod onako kako sam ga napisao uz upotrebu goto komandi.

Ako hoces, mogu i komplikovaniji primer da ti napisem :d

Pricao si o strukturalnim jezicima i ja sam ti pokazao na sta se ta "struktura" svodi u asembleru. Ima veze sa obradom izuzetaka jer se i ona na kraju svodi na uslovne i bezuslovne skokove. I samo da znas, moguce je koristiti Exception Handling i u asembleru, to nije privilegija samo "visih" programskih jezika 🙂


On mene rece da sam tvrdoglav e stvarno neznam dali ti namjerno izbjegavas da me razumijes ili koji ti je problem ???

Zar je stvarno potrebno da objasnjavas da se svaka C ili C++ naredba moze pretvoriti i u Asm komandu ili niz komandi.Mislim da je to ovdje svakome jasno ! Visi strukturisani jezici su nastali radi izbjegavanja pisanja milionskih redova ASM listinga radi preglednijeg programiranja sto rezultira da se aplikacije jednostavno moze bez velikog truda i poteskoca nadograditi ili prosiriti.

Ajde napisi molim te ASM source za hvatanje svih FPU Exception's ja cu isto odraditi u C++ pa da vidimo koji je dio source'a pregledniji laksi za naknadno obradjivanje , razumljiviji a i portabilniji.

Slobodno si mogao da objavis rezultat na default taktu. Videli bi da nisi mnogo brzi od mene u ICC SSE2 kodu iako ti CPU ima 3200+ rating, a moj 2800.

Al si smijesan , svako ko se imalo razumije zna da ICC forsira iskljucivo Intel mislim da bi bilo nelogicno da je suprotno. Jos je smjesnije sto ovo shvatas kao uspjeh P4'tvorke a one 35 sekundi zaostatka u FPU zanemarujes.

AMD je definitivno univerzialniji procesor , aplikacije kompilirane Intelovim kompajlerom izvrsava ekvivalentno Intel'u a na drugim kompajlerima definitivno
potapa P4'tvorku u neshvatljivim dimenzijama.

Da li ti shvatas sustinu ovih rezultata?

1. ICC je fenomenalan kompajler kad postize toliku razliku u odnosu na MSVC bez potrebe za promenom koda

2. ICC daje kod koji jednako bolje radi i na AMD-u

3. FPU kod je i na AMD-u sporiji od dobrog (ICC-ovog) SSE2 koda i to dosta, to znaci da i AMD-u itekako prija optimizacija

Dakle, ne pricam ja bezveze da softver treba optimizovati.

ICC je dobar kompajler nazalost je Intel los procesor pa samo aplikacije kompilirane ICC'om interpretira kako treba.

kompilirao sam sa VS 2005 beta gore navedeni source optimizacija je bila /O2 koju si ti izbjegao u gore navedenom benchu iako korisits /O3 kod ICC'a e sad rezultati su kao sto sam i obecao ispod 18 sekundi na Win32 🙂

Sto znaci da je netacna tvoja tvrdjnja da je MSVC los kompajler jer uporedjujes najnoviju verziju ICC'a sa starijom verzijom MSVC'a uz to se pravis lud pa koristis /O3 optimizaciju a kod MSVC'a ne koristis cak ni /O2
Ponekad treba pogledati realnost a ne sve silovati da bi se doslo do zeljenog rezultata.

Vise veceras.....
 
Poslednja izmena:
monteboy je napisao(la):
Ajde napisi molim te ASM source za hvatanje svih FPU Exception's ja cu isto odraditi u C++ pa da vidimo koji je dio source'a pregledniji laksi za naknadno obradjivanje , razumljiviji a i portabilniji.

Vec sam napisao u C-u, nema potrebe.

monteboy je napisao(la):
Al si smijesan , svako ko se imalo razumije zna da ICC forsira iskljucivo Intel mislim da bi bilo nelogicno da je suprotno.

Posto se ocigledno razumes onda lepo objasni i meni i drugima kako ICC forsira iskljucivo Intel?

Jos bolje -- navedi primere koda koje ICC generise i koji su nepovoljni po AMD procesore, a povoljni za Intel.

Uopste ne ulazim u to sta je tebi logicno, za ovakvu izjavu moras imati argumente, da ne kazem dokaze.

monteboy je napisao(la):
Jos je smjesnije sto ovo shvatas kao uspjeh P4'tvorke a one 35 sekundi zaostatka u FPU zanemarujes.

Naravno da je uspeh jer pokazuje potencijal procesora sa modernim kodom. FPU me uopste ne zanima -- nisam lud da ga koristim kad je i na tvom AMD-u sporiji citavih 175% od SSE2 koda generisanog ICC-om.

monteboy je napisao(la):
kompilirao sam sa VS 2005 beta gore navedeni source optimizacija je bila /O2 koju si ti izbjegao u gore navedenom benchu iako korisits /O3 kod ICC'a e sad rezultati su kao sto sam i obecao ispod 18 sekundi na Win32 🙂

monteboy je napisao(la):
...uz to se pravis lud pa koristis /O3 optimizaciju a kod MSVC'a ne koristis cak ni /O2

Sad me vec *****avas. Lepo ti rekoh da je nisam izbegao niti se pravim lud nego je nisam stavio zato sto glupi MSVC ne generise SSE2 kod kad se stavi /O2. Uostalom probaj sam pa ces valjda videti, ne znam sta te sprecava? Mozda ne umes da promenis switch i prevedes ponovo?

monteboy je napisao(la):
Sto znaci da je netacna tvoja tvrdjnja da je MSVC los kompajler jer uporedjujes najnoviju verziju ICC'a sa starijom verzijom MSVC'a...

Opet moram samog sebe da citiram da bi ljudi videli kako pokusavas da mi podvalis nesto sto nikad nisam rekao. Post #134 treci paragraf:

audiofreak je napisao(la):
Slazem se da nije tacno. MSVC uopste ne optimizuje ni za jedan procesor, bar ne verzije pre VS 2005. Tek sa novim kompajlerom se situacija popravlja.

Dakle, ja sam kompajler iz VS 2005 probao mnoogo pre tebe i znam da je bolji (to sam i napisao samo ti nisi video ili nisi hteo da vidis) ali taj kompajler je beta. Ja sam poredio poslednju zvanicnu verziju MSVC koju vecina koristi, mada ruku na srce ima jos mnogo i onih koji koriste Visual Studio 6 SP5.

monteboy je napisao(la):
Ponekad treba pogledati realnost a ne sve silovati da bi se doslo do zeljenog rezultata.

Pa hajde da je pogledamo:

- gomila firmi i pojedinaca koji pisu softver koristi zastarele kompajlere
- optimizacija nije deo razvoja softvera
- postoji gomila "C++ za 21 dan" programera koji ne znaju nista o arhitekturi racunara i to uopste, a kamoli onog za koji pisu programe
- numericke i logicke optimizacije algoritma su za vecinu programera misaona imenica
- procesori imaju gomilu neiskoriscenih mogucnosti
- gomila programera koristi brute-force pristup u resavanju vecine problema

Sve ovo sto sam naveo je po meni pravo silovanje. Tebi neka je na cast takva realnost, a ja se ponosim time sto ja kobajagi sve silujem pa postizem dobre (a nekad i bolje) rezultate sa kako ti kazes "losim procesorom".
 
Evo i mojih rezultata, ako vam nesto znace za poredjenje... naravno 32-bitni procesor i OS.
soso2.PNG
 
audiofreak je napisao(la):
Vec sam napisao u C-u, nema potrebe.

Nisam druksi odgovor ni ocekivao !

Posto se ocigledno razumes onda lepo objasni i meni i drugima kako ICC forsira iskljucivo Intel?

To je generalno poznato aplikacije kompilirane ICC'om u prosjeku rade na Intelu 20-25% brze sto nazalost ti nisi mogao u ovom benchu da potvrdis. 😀
Detaljnije se nisam zabavljao internom optimizacijom ICC'a

Jos bolje -- navedi primere koda koje ICC generise i koji su nepovoljni po AMD procesore, a povoljni za Intel.

Zasto bi se ja mlatio i uporedjivao ICC kompilat kad imam kompilat istog source'a sa drugim kompajlerom koji je brzi na AMD'u 😀 ? a pogotovo kad se vidi cinjenica da ICC kompilat na mom AMD'u postize odlicne rezultate ?

Zar nebi trebalo da je kontra da ti pocnes kopat po MSVC kompilatu da vidis zasto ti P4 na njemu propada u pod ?

Naravno da je uspeh jer pokazuje potencijal procesora sa modernim kodom. FPU me uopste ne zanima -- nisam lud da ga koristim kad je i na tvom AMD-u sporiji citavih 175% od SSE2 koda generisanog ICC-om.

Koliko si ti zadrt covjek boze ?
Pa covjece koliko je na ICC kompilatu tvoj sistem brzi od moga ?
Jel ti imas oci u glavu ? Moj sistem radi ispod default specifikacija i postize tvoje vrhunske rezultate 😀 a ti to nazivas uspjehom !!! -> loodilo

Sad me vec *****avas. Lepo ti rekoh da je nisam izbegao niti se pravim lud nego je nisam stavio zato sto glupi MSVC ne generise SSE2 kod kad se stavi /O2. Uostalom probaj sam pa ces valjda videti, ne znam sta te sprecava? Mozda ne umes da promenis switch i prevedes ponovo?

Eto vidis da si se malo pozabavio vise MSVC'om vise bi izvukao iz njega nebi ga unaprijed osudio kao glupog no u sustini si u pravu neko je glup samo sto je ovaj put korisnik koji nezna koristiti switche've kako treba a prebrzo sudi
Koliko si providan u tvojim izjavama govori i sledeca cinjenica MSVC 2003 postize iste slicne rezultate kao i Beta 2005 ali u tvojoj namjernoj zelji da predstavis nesto kao lose pa kad to ne moze biti AMD onda ajmo malo po Microsoftu u stanju si sve silovati.

Opet moram samog sebe da citiram da bi ljudi videli kako pokusavas da mi podvalis nesto sto nikad nisam rekao. Post #134 treci paragraf:

Dakle, ja sam kompajler iz VS 2005 probao mnoogo pre tebe i znam da je bolji (to sam i napisao samo ti nisi video ili nisi hteo da vidis) ali taj kompajler je beta. Ja sam poredio poslednju zvanicnu verziju MSVC koju vecina koristi, mada ruku na srce ima jos mnogo i onih koji koriste Visual Studio 6 SP5.

Gore sam ti vec rekao da i MSVC 2003 na AMD'u postize odlicne rezultate ako se izaberu posteni salteri
Uostalom gore sam ti vec nekoliko puta rekao da ako zelis uporediti rezultate i snagu jednog sistema onda treba uporedjivati isti source kompiliran jednim te istim kompajlerom pod istim uslovima (salterima) Ti si svjestan toga da ce Intel na MSVC kompilatu propanuti u pod sto se i dokazalo gore kad se pogledaju rezultati zato i izbjegavas posteno uporedjenje. Treba se postaviti pitanje sta zelis testirati kompajler ili CPU .

Ako testiramo kompajlere onda na jednoj te istoj masini !
Ako testiramo CPU onda sa jednim te istim kompilatom !

Mislim da je to logicno pa cak i za tebe !

Pa hajde da je pogledamo:

- gomila firmi i pojedinaca koji pisu softver koristi zastarele kompajlere
- optimizacija nije deo razvoja softvera
- postoji gomila "C++ za 21 dan" programera koji ne znaju nista o arhitekturi racunara i to uopste, a kamoli onog za koji pisu programe
- numericke i logicke optimizacije algoritma su za vecinu programera misaona imenica
- procesori imaju gomilu neiskoriscenih mogucnosti
- gomila programera koristi brute-force pristup u resavanju vecine problema

Sve ovo sto sam naveo je po meni pravo silovanje. Tebi neka je na cast takva realnost, a ja se ponosim time sto ja kobajagi sve silujem pa postizem dobre (a nekad i bolje) rezultate sa kako ti kazes "losim procesorom".
[/QUOTE]

O cemu mi ovdje diskutujemo covjece jel si li ti svjestan gdje sa tvojom pricom ulazis. I ne izvrci rijeci molim te znas dobro nasta sam mislio kad sam rekao silovanje ako si ti glup postaviti jedan obicni switch da MSVC generise SSE instrukcije i postigne adekvatne vrijednosti ICC'a onda nemas nikakvo pravo oznaciti kompajler kao los.
 
SoSo je napisao(la):
Evo i mojih rezultata, ako vam nesto znace za poredjenje... naravno 32-bitni procesor i OS.
soso2.PNG

klokovani rezultati nisu trenutno relevantni bice thread kad bude bench kompletno gotov i imao pristojan GUI.
 
Hint: uradi detekciju brzine CPU-a u program obavezno.
 
monteboy je napisao(la):
Nisam druksi odgovor ni ocekivao !

Hajde, napisacu ti exception handling u asembleru kad si vec toliko zapeo.

monteboy je napisao(la):
To je generalno poznato aplikacije kompilirane ICC'om u prosjeku rade na Intelu 20-25% brze sto nazalost ti nisi mogao u ovom benchu da potvrdis. 😀

To je generalno poznato proseravanje koje niko nije proverio niti potvrdio.

monteboy je napisao(la):
Detaljnije se nisam zabavljao internom optimizacijom ICC'a

Naravno da nisi kad ne bi mogao ni da je razumes sve i da hoces. Nisam drugaciji odgovor ni ocekivao.

monteboy je napisao(la):
...a pogotovo kad se vidi cinjenica da ICC kompilat na mom AMD'u postize odlicne rezultate ?

Pa odluci se vise, ili ti ICC pravi los kod za AMD ili ne?

monteboy je napisao(la):
Zar nebi trebalo da je kontra da ti pocnes kopat po MSVC kompilatu da vidis zasto ti P4 na njemu propada u pod ?

Pa nemam sta da kopam, najvece usporenje je bilo zbog tvoje tri greske u kodu. Ostalo se vec moze tolerisati ako je bas neophodno.

monteboy je napisao(la):
Koliko si ti zadrt covjek boze ?

Pazi ko mi kaze?!?

monteboy je napisao(la):
Pa covjece koliko je na ICC kompilatu tvoj sistem brzi od moga ? Jel ti imas oci u glavu ? Moj sistem radi ispod default specifikacija i postize tvoje vrhunske rezultate 😀 a ti to nazivas uspjehom !!! -> loodilo

Ja sam ti lepo rekao da testiras na DEFAULT taktu da bi mogli da uporedimo dva sistema na defaultu. Niko ti nije trazio da spustas brzinu ispod defaulta.

Mogu ja i da izracunam kad ti vec neces da meris kako treba pa da to sredimo jednom zauvek:

-Na 1954.9 Mhz imas 18.172 sec
-Na 2000 MHz bi imao 2.3% krace vreme odnosno 17.76 sec

Znaci tvoj 3200+ ima 17.76 sec na default taktu

-Ja imam 18.156 sec na 2800 Mhz, dakle na default taktu
-To je 2.21% sporije od tvog procesora na default taktu

Dakle, da ti je PR rating tacan, odnosno da je tih 3200+ zaista ekvivalent 3200 MHz procesoru, trebao bi da imas 15.8865 sec na default taktu.

monteboy je napisao(la):
Eto vidis da si se malo pozabavio vise MSVC'om vise bi izvukao iz njega nebi ga unaprijed osudio kao glupog no u sustini si u pravu neko je glup samo sto je ovaj put korisnik koji nezna koristiti switche've kako treba a prebrzo sudi

Izvini ali sad vec pricas gluposti. Preterao si brate. Pogledaj kod koji generise MSVC 2003 sa /O2 i /arch:SSE2 pa ces videti sta se dobija. Nemam zelju da ti crtam sve. Pre nego sto nekom kazes da je glup prvo proveri mozes li ti da dobijes ono sto treba da se dobije, pa kad vec tvrdis da moze drugacije onda reci i kako umesto sto vredjas.

monteboy je napisao(la):
Koliko si providan u tvojim izjavama govori i sledeca cinjenica MSVC 2003 postize iste slicne rezultate kao i Beta 2005 ali u tvojoj namjernoj zelji da predstavis nesto kao lose pa kad to ne moze biti AMD onda ajmo malo po Microsoftu u stanju si sve silovati.

Mozes ti da pricas sta hoces, MSVC 2003 JE LOSIJI OD MSVC 2005 i to je cinjenica. To je nesto sto sam ja proverio jos prosle godine kad su se pojavili prvi Athlon 64 procesori na nasem trzistu i prva beta Windowsa XP 64. Radio sam detaljan test i MSVC 2005 je generisao brzi kod u skoro svim slucajevima. Dakle, ja pricam na osnovu onoga sto sam probao licno i to sa povelikim uzorkom raznorodnog koda, a ti? Retoricko pitanje, ne moras da odgovoris.

monteboy je napisao(la):
...zato i izbjegavas posteno uporedjenje.

Jesi li ti zato overklokovao procesor pa testirao, a ja nisam?!? Jesi li ti zato napisao program sa greskama koji je sporiji na Intelu nego na AMD-u?!? O kakvom ti postenju onda pricas uopste?

monteboy je napisao(la):
Gore sam ti vec rekao da i MSVC 2003 na AMD'u postize odlicne rezultate ako se izaberu posteni salteri

monteboy je napisao(la):
ako si ti glup postaviti jedan obicni switch da MSVC generise SSE instrukcije i postigne adekvatne vrijednosti ICC'a onda nemas nikakvo pravo oznaciti kompajler kao los.

Znas ti vrlo dobro koje switcheve sam ja postavio samo se namerno pravis blesav i mene pokusavas da napravis glupim sto izgleda i jesam jer gubim vreme u raspravi s tobom.

DAKLE NA MSVC 2003 /O2 /arch:SSE2 GENERISE FPU UMESTO SSE2 KOD ZBOG TOGA STO /O2 SADRZI /OG!!! JEL TI SAD JASNO?!?!?!?
 
Nasao sam ti jos jednu gresku:

Kod:
void Calc_FPU(double* res, double* data1, double* data2, enum CalcOP nOP, const long count)
{
	long i;

	for (i = 0; i < count; i++) {
		switch(nOP) {
		case CalcOP_PowLogSinCos:
			res[i] = pow(log(atan(data1[i]) / atan(data2[i])) -  log(exp(data1[i]) * exp(data2[i])), 2);
			break;
		}	
	}
}

Treba da glasi:

Kod:
void Calc(double* res, double* data1, double* data2, enum CalcOP nOP, const long count)
{
	long i;

	switch(nOP) {
	case CalcOP_PowLogSinCos:
		for (i = 0; i < count; i++) {
			res[i] = pow(log(atan(data1[i]) / atan(data2[i])) -  log(exp(data1[i]) * exp(data2[i])), 2);
		}	
		break;
	}
}

Rationale:

nOP je sa stanovista koda u funkciji konstanta. Nema ni potrebe ni smisla da se switch/case struktura stavlja unutar petlje. Ovo je klasicna pocetnicka greska.

Razlozi zasto si to uradio mogu biti sledeci:

- Zaista ne znas da programiras (to bi jos bilo najbolje)
- Hteo si namerno da izazoves branch misprediction penal kod Intel procesora stavljanjem kontrolne strukture (grananja) u petlju -- nije ti uspelo, probao sam da promenim i skoro da nema razlike osim kod intelovog kompajlera. Njega ovakav kod sprecava da uradi high-level optimizacije.

Pa mi ti sad pricaj o znanju i postenju.

U prilogu nova verzija testa. Namerno nisam menjao redosled u postojece tri funkcije (ICC SSE2, MSVC SSE2, MSVC FPU). Samo sam dodao ICC SSE2 AF (audiofreak) verziju koja je "malo" restrukturirana i optimizovana (naravno i dalje racuna isto):

benchnew.gif


Kad postignes ovo vreme na default taktu sa MSVC 2005 javi se. Samo nesto imam utisak da cu se nacekati :d
 

Prilozi

Ovo sa tvoje strane prelazi stvarno sve mjere druze optuzujes mene da sam namjerno postavio source koji na Intel'u radi sporije iako sam ti rekao da nisam debugirao source uopste da se radilo o slucajnoj a ne namjernoj gresci.

Ili si audiofreak definitivno bezobrazan pa se namjerno pravis mutav ili si stvarno slijepac koji nije imao mnogo posla sa MSVC kompajlerima ! trecu mogucnost ne vidim :

Da li je za tebe ovo audiofreak SSE2 code :

Kod:
// izvrsi odgovarajucu operaciju sa operantima iz data1 i data2 i spremi rezultat u res
void Calc(double* res,double* data1,double* data2,const long count)
{
00401310  push        ebp  
00401311  mov         ebp,esp 
00401313  and         esp,0FFFFFFF8h 
	for(long i=0;i<count;i++ )
00401316  mov         eax,dword ptr [ebp+0Ch] 
00401319  sub         esp,24h 
0040131C  test        eax,eax 
0040131E  push        ebx  
0040131F  push        esi  
00401320  push        edi  
00401321  jle         Calc+0EDh (4013FDh) 
00401327  mov         esi,dword ptr [data2] 
0040132A  mov         ebx,edx 
0040132C  mov         edi,ecx 
0040132E  sub         ebx,esi 
00401330  sub         edi,esi 
00401332  mov         dword ptr [esp+0Ch],eax 
00401336  jmp         Calc+30h (401340h) 
00401338  lea         esp,[esp] 
0040133F  nop              
		res[i] = pow(log(atan(data1[i])/atan(data2[i])) -  log(exp(data1[i])*exp(data2[i])),2); 
00401340  movsd       xmm0,mmword ptr [ebx+esi] 
00401345  movsd       xmm1,mmword ptr [esi] 
00401349  movsd       mmword ptr [esp+20h],xmm0 
0040134F  movsd       mmword ptr [esp+10h],xmm1 
00401355  call        __libm_sse2_atan (403680h) 
0040135A  movsd       mmword ptr [esp+18h],xmm0 
00401360  movsd       xmm0,mmword ptr [esp+10h] 
00401366  call        __libm_sse2_atan (403680h) 
0040136B  movsd       xmm1,mmword ptr [esp+18h] 
00401371  divsd       xmm1,xmm0 
00401375  movapd      xmm0,xmm1 
00401379  call        __libm_sse2_log (403450h) 
0040137E  movsd       mmword ptr [esp+28h],xmm0 
00401384  movsd       xmm0,mmword ptr [esp+20h] 
0040138A  call        __libm_sse2_exp (403230h) 
0040138F  movsd       mmword ptr [esp+18h],xmm0 
00401395  movsd       xmm0,mmword ptr [esp+10h] 
0040139B  call        __libm_sse2_exp (403230h) 
004013A0  movsd       xmm1,mmword ptr [esp+18h] 
004013A6  mulsd       xmm1,xmm0 
004013AA  movapd      xmm0,xmm1 
004013AE  call        __libm_sse2_log (403450h) 
004013B3  movapd      xmm1,xmm0 
004013B7  movsd       xmm0,mmword ptr [esp+28h] 
004013BD  subsd       xmm0,xmm1 
004013C1  movsd       xmm1,mmword ptr [__real@3ff0000000000000 (452048h)] 
004013C9  mov         eax,2 
004013CE  mov         edi,edi 
004013D0  test        al,1 
004013D2  je          Calc+0C8h (4013D8h) 
004013D4  mulsd       xmm1,xmm0 
004013D8  shr         eax,1 
004013DA  je          Calc+0DAh (4013EAh) 
004013DC  movapd      xmm2,xmm0 
004013E0  mulsd       xmm2,xmm0 
004013E4  movapd      xmm0,xmm2 
004013E8  jmp         Calc+0C0h (4013D0h) 
004013EA  movsd       mmword ptr [edi+esi],xmm1 
004013EF  add         esi,8 
004013F2  sub         dword ptr [esp+0Ch],1 
004013F7  jne         Calc+30h (401340h) 
}
004013FD  pop         edi  
004013FE  pop         esi  
004013FF  pop         ebx  
00401400  mov         esp,ebp 
00401402  pop         ebp  
00401403  ret         8

Taj code biva generiran kad postavis /arch:SSE2 i /O2 opciju na 2005 beta

A sad i sa 2003'ojkom :
ovako izgleda code kad je O2 deaktiviran

Kod:
// izvrsi odgovarajucu operaciju sa operantima iz data1 i data2 i spremi rezultat u res
void Calc(double* res,double* data1,double* data2,const long count)
{
00401320  push        ebp  
00401321  mov         ebp,esp 
00401323  sub         esp,1Ch 
	for(long i=0;i<count;i++ )
00401326  mov         dword ptr [i],0 
0040132D  jmp         Calc+18h (401338h) 
0040132F  mov         eax,dword ptr [i] 
00401332  add         eax,1 
00401335  mov         dword ptr [i],eax 
00401338  mov         ecx,dword ptr [i] 
0040133B  cmp         ecx,dword ptr [count] 
0040133E  jge         Calc+0CCh (4013ECh) 
		res[i] = pow(log(atan(data1[i])/atan(data2[i])) -  log(exp(data1[i])*exp(data2[i])),2); 
00401344  push        2    
00401346  mov         edx,dword ptr [i] 
00401349  mov         eax,dword ptr [data1] 
0040134C  fld         qword ptr [eax+edx*8] 
0040134F  sub         esp,8 
00401352  fstp        qword ptr [esp] 
00401355  call        atan (4021C0h) 
0040135A  fstp        qword ptr [ebp-0Ch] 
0040135D  add         esp,8 
00401360  mov         ecx,dword ptr [i] 
00401363  mov         edx,dword ptr [data2] 
00401366  fld         qword ptr [edx+ecx*8] 
00401369  sub         esp,8 
0040136C  fstp        qword ptr [esp] 
0040136F  call        atan (4021C0h) 
00401374  add         esp,8 
00401377  fdivr       qword ptr [ebp-0Ch] 
0040137A  sub         esp,8 
0040137D  fstp        qword ptr [esp] 
00401380  call        log (402070h) 
00401385  fstp        qword ptr [ebp-14h] 
00401388  add         esp,8 
0040138B  mov         eax,dword ptr [i] 
0040138E  mov         ecx,dword ptr [data1] 
00401391  fld         qword ptr [ecx+eax*8] 
00401394  sub         esp,8 
00401397  fstp        qword ptr [esp] 
0040139A  call        exp (401FE0h) 
0040139F  fstp        qword ptr [ebp-1Ch] 
004013A2  add         esp,8 
004013A5  mov         edx,dword ptr [i] 
004013A8  mov         eax,dword ptr [data2] 
004013AB  fld         qword ptr [eax+edx*8] 
004013AE  sub         esp,8 
004013B1  fstp        qword ptr [esp] 
004013B4  call        exp (401FE0h) 
004013B9  add         esp,8 
004013BC  fmul        qword ptr [ebp-1Ch] 
004013BF  sub         esp,8 
004013C2  fstp        qword ptr [esp] 
004013C5  call        log (402070h) 
004013CA  add         esp,8 
004013CD  fsubr       qword ptr [ebp-14h] 
004013D0  sub         esp,8 
004013D3  fstp        qword ptr [esp] 
004013D6  call        pow (40100Ah) 
004013DB  add         esp,0Ch 
004013DE  mov         ecx,dword ptr [i] 
004013E1  mov         edx,dword ptr [res] 
004013E4  fstp        qword ptr [edx+ecx*8] 
004013E7  jmp         Calc+0Fh (40132Fh) 
}
004013EC  mov         esp,ebp 
004013EE  pop         ebp  
004013EF  ret

A ovako izgleda kad /O2 opciju dodas :
razliku koja utice na izvrsavanje sam oznacio za tebe debelim slovima na mom sistemu ubrzanje sa aktiviranim /O2 salterom iznosi oko 40%

Kod:
// izvrsi odgovarajucu operaciju sa operantima iz data1 i data2 i spremi rezultat u res
void Calc(double* res,double* data1,double* data2,const long count)
{
00401320  push        ebp  
00401321  mov         ebp,esp 
00401323  and         esp,0FFFFFFF8h 
00401326  sub         esp,14h 
	for(long i=0;i<count;i++ )
00401329  mov         eax,dword ptr [ebp+14h] 
0040132C  test        eax,eax 
0040132E  push        ebx  
0040132F  push        esi  
00401330  push        edi  
00401331  jle         Calc+0CDh (4013EDh) 
00401337  mov         esi,dword ptr [data2] 
0040133A  mov         edi,dword ptr [data1] 
0040133D  mov         ebx,dword ptr [res] 
00401340  sub         edi,esi 
00401342  sub         ebx,esi 
00401344  mov         dword ptr [esp+0Ch],eax 
00401348  jmp         Calc+30h (401350h) 
0040134A  lea         ebx,[ebx] 
		res[i] = pow(log(atan(data1[i])/atan(data2[i])) -  log(exp(data1[i])*exp(data2[i])),2); 
00401350  fld         qword ptr [edi+esi] 
00401353  sub         esp,8 
00401356  fstp        qword ptr [esp] 
00401359  call        atan (402760h) 
0040135E  fstp        qword ptr [esp+18h] 
00401362  fld         qword ptr [esi] 
00401364  fstp        qword ptr [esp] 
00401367  call        atan (402760h) 
0040136C  fdivr       qword ptr [esp+18h] 
00401370  fstp        qword ptr [esp] 
00401373  call        log (402610h) 
00401378  fstp        qword ptr [esp+20h] 
0040137C  fld         qword ptr [esi] 
0040137E  fstp        qword ptr [esp] 
00401381  call        exp (402580h) 
00401386  fstp        qword ptr [esp+18h] 
0040138A  fld         qword ptr [edi+esi] 
0040138D  fstp        qword ptr [esp] 
00401390  call        exp (402580h) 
00401395  fmul        qword ptr [esp+18h] 
00401399  fstp        qword ptr [esp] 
0040139C  call        log (402610h) 
004013A1  fsubr       qword ptr [esp+20h] 
[B]
004013A5  movsd       xmm1,mmword ptr [__real@3ff0000000000000 (42A058h)] 
004013AD  add         esp,8 
004013B0  mov         eax,2 
004013B5  fstp        qword ptr [esp+18h] 
004013B9  movsd       xmm0,mmword ptr [esp+18h] 
004013BF  nop              
004013C0  test        al,1 
004013C2  je          Calc+0A8h (4013C8h) 
004013C4  mulsd       xmm1,xmm0 
004013C8  shr         eax,1 
004013CA  je          Calc+0BAh (4013DAh) 
004013CC  movapd      xmm2,xmm0 
004013D0  mulsd       xmm2,xmm0 
004013D4  movapd      xmm0,xmm2 
004013D8  jmp         Calc+0A0h (4013C0h) 
004013DA  movsd       mmword ptr [ebx+esi],xmm1 
004013DF  add         esi,8 
004013E2  sub         dword ptr [esp+0Ch],1 
004013E7  jne         Calc+30h (401350h) 
[/B]
}
004013ED  pop         edi  
004013EE  pop         esi  
004013EF  pop         ebx  
004013F0  mov         esp,ebp 
004013F2  pop         ebp  
004013F3  ret

E sad bi fino bilo cisto posto ponavljas i podvlacis rijec postenje da nam reces iz kojih razloga nisi kompilirao kod MSVC'a sa /O2 opcijom vec kad nisi koristio VS 2005 beta ?
 
Poslednja izmena:
audiofreak je napisao(la):
Nasao sam ti jos jednu gresku:

Treba da glasi:

Kod:
void Calc(double* res, double* data1, double* data2, enum CalcOP nOP, const long count)
{
	long i;

	switch(nOP) {
	case CalcOP_PowLogSinCos:
		for (i = 0; i < count; i++) {
			res[i] = pow(log(atan(data1[i]) / atan(data2[i])) -  log(exp(data1[i]) * exp(data2[i])), 2);
		}	
		break;
	}
}

Prvenstveno sam bio deklarisao enum sa vise konstanti koje su predstavljale razlicite formule koje su svaka za sebe davale i razlicite rezultate odnosno razlicit odnos SSE2/FPU sto je rezultiralo switchom u petlji koji je u tom slucaju korektan jer je efikasniji nego vise petlji u jednom switchu a kasnije sam se odlucio samo za ovu jednu formulu sto automatski znaci da je onda switch kompletno suvisan.

inache vec kad optimizujes onda molim te i kako treba :
kod samo jedne jedine opcije switch uopste nije potreban !

ispravno bi bilo sledece :

Kod:
void Calc(double* res, double* data1, double* data2, const long count)
{
	for (long i = 0; i < count; i++) 
	res[i] = pow(log(atan(data1[i]) / atan(data2[i])) -  log(exp(data1[i]) * exp(data2[i])), 2);
		
}
 
Poslednja izmena:
monteboy je napisao(la):
Ili si audiofreak definitivno bezobrazan pa se namjerno pravis mutav ili si stvarno slijepac koji nije imao mnogo posla sa MSVC kompajlerima ! trecu mogucnost ne vidim :

Hajde da vidimo ko je slepac:

monteboy je napisao(la):
Taj code biva generiran kad postavis /arch:SSE2 i /O2 opciju na 2005 beta

To me ne cudi jer sam i rekao da taj kompajler (2005) bolje radi.

monteboy je napisao(la):
A sad i sa 2003'ojkom :
ovako izgleda code kad je O2 deaktiviran

Da li ti je palo na pamet da pogledas pozive funkcija atan(), exp() i log()?!? Ocigledno nije jer bi video da se u njima koristi SSE2 kod iako je /O2 deaktiviran. Sustina funkcije calc() su upravo pozivi gorenavedenih bibliotecnih funkcija.

monteboy je napisao(la):
A ovako izgleda kad /O2 opciju dodas :
razliku koja utice na izvrsavanje sam oznacio za tebe debelim slovima na mom sistemu ubrzanje sa aktiviranim /O2 salterom iznosi oko 40%

Razlika koju pominjes nastaje zato sto se ne poziva vise bibliotecna funkcija pow(x, 2) vec se radi x*x. To onda vise nije ono sto si hteo zar ne?

Navedi mi tacno komandnu liniju i verziju kompajlera da vidimo u cemu je problem posto ja kad prevedem sa:

cl /nologo /c /G7 /O2 /arch:SSE2

dobijam sledeci kod u DLL-u:

Kod:
; Exported entry   1. Calc_FPU
; Exported entry   3. Calc_SSE2_MSVC

		public Calc_SSE2_MSVC
Calc_SSE2_MSVC	proc near

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h
arg_10		= dword	ptr  14h

		cmp	[esp+arg_C], 0	; Calc_FPU
		jnz	locret_100010FD
		push	ebp
		mov	ebp, [esp+4+arg_10]
		test	ebp, ebp
		jle	short loc_100010FC
		push	ebx
		mov	ebx, [esp+8+arg_0]
		push	esi
		mov	esi, [esp+0Ch+arg_8]
		push	edi
		mov	edi, [esp+10h+arg_4]
		sub	edi, esi
		sub	ebx, esi

loc_10001097:				; CODE XREF: Calc_SSE2_MSVC+87j
		fld	qword ptr [edi+esi]
		fld1
		fpatan
		fld	qword ptr [esi]
		fld1
		fpatan
		fdivp	st(1), st
		fldln2
		fxch	st(1)
		fyl2x
		fldl2e
		fmul	qword ptr [esi]
		fld	st
		frndint
		fxch	st(1)
		fsub	st, st(1)
		f2xm1
		fld1
		faddp	st(1), st
		fscale
		fstp	st(1)
		fldl2e
		fmul	qword ptr [edi+esi]
		fld	st
		frndint
		fxch	st(1)
		fsub	st, st(1)
		f2xm1
		fld1
		faddp	st(1), st
		fscale
		fstp	st(1)
		fmulp	st(1), st
		fldln2
		fxch	st(1)
		fyl2x
		fsubp	st(1), st
		fld	ds:dbl_1000B0E0
		call	sub_10001A40
		fstp	qword ptr [ebx+esi]
		add	esi, 8
		sub	ebp, 1
		jnz	short loc_10001097
		pop	edi
		pop	esi
		pop	ebx

loc_100010FC:				; CODE XREF: Calc_SSE2_MSVC+12j
		pop	ebp

locret_100010FD:			; CODE XREF: Calc_SSE2_MSVC+5j
		retn
Calc_SSE2_MSVC	endp

Dakle, kao sto vidis ja ne lazem. Neki problem postoji. Kompajler generise isti kod kao kad izostavim /arch:SSE2 i linker poveze kasnije te dve funkcije u jednu. Verzija kompajlera ovde je 13.10.3077, budi ljubazan pa mi reci koja je tvoja i navedi tacnu komandnu liniju. Ne bi me cudilo da imas noviju verziju ili da cak koristis VS2005, a verujes da koristis VS2003.

monteboy je napisao(la):
E sad bi fino bilo cisto posto ponavljas i podvlacis rijec postenje da nam reces iz kojih razloga nisi kompilirao kod MSVC'a sa /O2 opcijom vec kad nisi koristio VS 2005 beta ?

Sad valjda vidis zasto nisam stavio /O2?!? Uostalom, da te podsetim da je tvoj prvi kompilat bio samo sa /Ot /arch:SSE2 i da si me tada kritikovao sto sam ja stavio /O2. Odluci se vise.

VS 2005 beta nisam koristio jer ga trenutno nemam, no nije problem, dodacemo i to.

monteboy je napisao(la):
to je rezultiralo switchom u petlji koji je u tom slucaju korektan jer je efikasniji nego vise petlji u jednom switchu

Daj razmisli malo pre nego sto nesto ovako napises molim te.

Nije korektan jer ako je count = 10,000 switch se evaluira 10,000 puta bez ikakve potrebe jer je nOP konstantan unutar funkcije.

10,000 testiranja promenljive (cija se vrednost ne menja) u petlji NIJE EFIKASNIJE nego jedno testiranje i vise petlji od kojih se ionako izvrsava samo jedna koju switch izabere na osnovu promenljive.

monteboy je napisao(la):
inache vec kad optimizujes onda molim te i kako treba :
kod samo jedne jedine opcije switch uopste nije potreban !

Prvo, za tvoje obavestenje ovo nije optimizacija vec ispravka (jos jedne) greske.

Drugo, nisam hteo da ga izbacujem da bi mogao da dodas kasnije druge formule -- nemam nista protiv da se izbaci ako ti ne treba vise.
 
audiofreak je napisao(la):
Da li ti je palo na pamet da pogledas pozive funkcija atan(), exp() i log()?!? Ocigledno nije jer bi video da se u njima koristi SSE2 kod iako je /O2 deaktiviran. Sustina funkcije calc() su upravo pozivi gorenavedenih bibliotecnih funkcija.
Je si ti corav covjece ?
Zar ne vidis da u obadva primjera i sa deaktiviranim i aktiviranim /O2 salterom bivaju pozvane iste exp,atan i log funkcije na MSVC 2003

Pitam se sta je htio pisac da nam kaze sa ovakvom izjavom , gdje pise da /O2 osigurava samo SSE2 aj molim te nadji to mjesto i ocisti malo naocare da nebi opet dosle do kardinalne greske koja kosta MSVC 40% u performasama a na osnovu cega ti zakljucujes da je MSVC los kompajler.

Razlika koju pominjes nastaje zato sto se ne poziva vise bibliotecna funkcija pow(x, 2) vec se radi x*x. To onda vise nije ono sto si hteo zar ne?

Kompajler je odabrao za njega najbrzu varijantu a ona je u ovom slucaju x*x a ne pow sustina toga je da ti nije problem bio uporediti rezultate MSVC'a i ICC'a iako je u tvom primjeru generalno kod MSVC koriscen cisti FPU i nije zvana nijedna funkcija biblioteke a sad od jedan put kukas kako se pow funkcija ne poziva nego se koristi x*x. Na to te cijelo vrijeme upucujem da uporedjujes razlicit source na razlicitim kompajlerima i sudis o istom sto je totalno nerealno i prosto nemoguce , nazalost neznam kojim jezikom trebam da govorim da bi to kod tebe dovelo do razumijevanja.

dobijam sledeci kod u DLL-u:

Kod:
; Exported entry   1. Calc_FPU
; Exported entry   3. Calc_SSE2_MSVC

		public Calc_SSE2_MSVC
Calc_SSE2_MSVC	proc near

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h
arg_10		= dword	ptr  14h

		cmp	[esp+arg_C], 0	; Calc_FPU
		jnz	locret_100010FD
		push	ebp
		mov	ebp, [esp+4+arg_10]
		test	ebp, ebp
		jle	short loc_100010FC
		push	ebx
		mov	ebx, [esp+8+arg_0]
		push	esi
		mov	esi, [esp+0Ch+arg_8]
		push	edi
		mov	edi, [esp+10h+arg_4]
		sub	edi, esi
		sub	ebx, esi

loc_10001097:				; CODE XREF: Calc_SSE2_MSVC+87j
		fld	qword ptr [edi+esi]
		fld1
		fpatan
		fld	qword ptr [esi]
		fld1
		fpatan
		fdivp	st(1), st
		fldln2
		fxch	st(1)
		fyl2x
		fldl2e
		fmul	qword ptr [esi]
		fld	st
		frndint
		fxch	st(1)
		fsub	st, st(1)
		f2xm1
		fld1
		faddp	st(1), st
		fscale
		fstp	st(1)
		fldl2e
		fmul	qword ptr [edi+esi]
		fld	st
		frndint
		fxch	st(1)
		fsub	st, st(1)
		f2xm1
		fld1
		faddp	st(1), st
		fscale
		fstp	st(1)
		fmulp	st(1), st
		fldln2
		fxch	st(1)
		fyl2x
		fsubp	st(1), st
		fld	ds:dbl_1000B0E0
		call	sub_10001A40
		fstp	qword ptr [ebx+esi]
		add	esi, 8
		sub	ebp, 1
		jnz	short loc_10001097
		pop	edi
		pop	esi
		pop	ebx

loc_100010FC:				; CODE XREF: Calc_SSE2_MSVC+12j
		pop	ebp

locret_100010FD:			; CODE XREF: Calc_SSE2_MSVC+5j
		retn
Calc_SSE2_MSVC	endp

Gdje bivaju ovdje pozvane funkcije biblioteke atan , exp i pow ?
I drugo pitanje koje saltere si uopste koristio da bi mogao da odradis SSE2 varijantu na MSVC'u i da na osnovu toga doneses zakljucak ?

Dakle, kao sto vidis ja ne lazem. Neki problem postoji. Kompajler generise isti kod kao kad izostavim /arch:SSE2 i linker poveze kasnije te dve funkcije u jednu. Verzija kompajlera ovde je 13.10.3077, budi ljubazan pa mi reci koja je tvoja i navedi tacnu komandnu liniju. Ne bi me cudilo da imas noviju verziju ili da cak koristis VS2005, a verujes da koristis VS2003.

Cekaj stani malo naveo si da MSVC SSE2 ima odgovarajuce vrijeme u tvom benchu pa si zatim naveo da je MSVC FPU ima odgovarajuce vrijeme koje je razlicito i dosta sporije e sad odjedanput tvrdis da u oba slucaja biva generisan isti kode ????

Pa reci nam covjece onda sa kojim salterima si ti natjerao 2003'ojku da generise iskljucivo SSE2 instrukcije ????
 
Slusaj me sad pazljivo -- ja nemam nista licno protiv tebe i necu da te vredjam ali ako nastavis ovako da mi se obracas moze i to da se desi, jasno?

CITAJ MOJE POSTOVE POLAKO I PAZLJIVO

Lepo ti pise u prethodnom postu i koji kompajler sam koristio i koje switcheve. Imas to i u makefile-u u arhivi koji ocigledno nisi ni pogledao.

Ako ti i dalje nije jasno lepo formulisi pitanja pa mi ih postavi, ne mogu da ponavljam iste stvari sto puta.
 
Audiofreak sad si me stvarno razocarao mislio sam da se sa tobom moze fino diskutovat
i u cilju postene analize i razmjene iskustva oko nekih stvari doci do nekih zakljucaka
nebitno sad po koji CPU ili kompajler one bile lose ili dobre :

Zapravo analizirao sam malo tvoj calc.dll sa sledecim rezultatom :

exportujes sledece funkcije sa sledecim Entrypoint's

Calc_FPU -> 10001070h
Calc_SSE2_ICC -> 100014CCh
Calc_SSE2_MSVC -> 10001590h
Calc_SSE2_OPT -> 10001100h
EnableSSE2 -> 10001020h

Do sada ok!

A sad ce mo malo pogledati detaljnije funkciju Calc_SSE2_ICC

Prigovorio si mene u jednom ranijem postu da /O2 optimacija na MSVC ne poziva POW funkciju ako pogledamo detaljnije tvoj Dll onda ni ICC to ne cini nego optimira sa -> mulsd xmm1,xmm1. Znaci dupli standardi sve u korist postenog uporedjivanja , ili ?

Kod:
 Calc_SSE2_ICC:
  		push	ebp
  		mov	ebp,esp
  		and	esp,FFFFFFF0h
  		push	edi
  		push	esi
  		push	ebx
  		sub	esp,00000024h
  		mov	ecx,[ebp+08h]
  		mov	edx,[ebp+0Ch]
  		mov	edi,[ebp+14h]
  		xor	eax,eax
  		mov	ebx,eax
  		mov	esi,edx
 L100014E7:
  		cmp	ebx,[ebp+18h]
  		jge	L10001585
  		test	edi,edi
  		jnz	L1000157D
  		movsd	xmm0,[esi+ebx*8]			; SSE2
  		movsd	[esp+08h],xmm0			; SSE2
 [b] 		call	SUB_L1000A754    [/b]        <- atan  
  		mov	ecx,[ebp+10h]
  		movsd	[esp+10h],xmm0			; SSE2
  		movsd	xmm0,[ecx+ebx*8]			; SSE2
  		movsd	[esp],xmm0			; SSE2
  [b]		call	SUB_L1000A754    [/b]        <- atan
  		movsd	xmm1,[esp+10h]			; SSE2
  		divsd	xmm1,xmm0			; SSE2
  		movapd	xmm0,xmm1			; SSE2
 [b]  		call	SUB_L1000AB90    [/b]        <- log 
  		movsd	[esp+10h],xmm0			; SSE2
  		movsd	xmm0,[esp+08h]			; SSE2
  [b]		call	SUB_L1000A96C   [/b]         <- exp 
  		movsd	[esp+08h],xmm0			; SSE2
  		movsd	xmm0,[esp]			; SSE2
  [b] 		call	SUB_L1000A96C  [/b]          <- exp
  		movsd	xmm1,[esp+08h]			; SSE2
  		mulsd	xmm1,xmm0			; SSE2
  		movapd	xmm0,xmm1			; SSE2
 [b] 		call	SUB_L1000AB90  [/b]          <- log 
  		movsd	xmm1,[esp+10h]			; SSE2
  		mov	ecx,[ebp+08h]
  		subsd	xmm1,xmm0			; SSE2
  		mulsd	xmm1,xmm1			; SSE2
  		movsd	[ecx+ebx*8],xmm1		; SSE2
 L1000157D:
  		add	ebx,00000001h
  		jmp	L100014E7
 L10001585:
  		add	esp,00000024h
  		pop	ebx
  		pop	esi
  		pop	edi
  		mov	esp,ebp
  		pop	ebp
  		retn
 
monteboy je napisao(la):
Audiofreak sad si me stvarno razocarao mislio sam da se sa tobom moze fino diskutovat
i u cilju postene analize i razmjene iskustva oko nekih stvari doci do nekih zakljucaka

Naravno da moze ali problem je sto ne citas pazljivo sta ja napisem. Ti si se zakacio za /O2 i uporno odbijas da cujes sta ti objasnjavam. Kod mene to ne radi kako treba, a ja zaista ne znam zasto. Lepo sam ti naveo switcheve i verziju kompajlera i pitao te sta si ti koristio, a ti umesto da odgovoris pa da zaista obojca nesto korisno zakljucimo nastavljas da me napadas i jos me vredjas.

monteboy je napisao(la):
Prigovorio si mene u jednom ranijem postu da /O2 optimacija na MSVC ne poziva POW funkciju ako pogledamo detaljnije tvoj Dll onda ni ICC to ne cini nego optimira sa -> mulsd xmm1,xmm1. Znaci dupli standardi sve u korist postenog uporedjivanja , ili ?

Nisam ti ja nista prigovorio, samo sam rekao da je to verovatno uzrok razlike od 40% koju dobijas kod tebe.

Bilo bi lepo kada bi mi konacno rekao koje switcheve i verziju kompajlera si koristio. Verziju ti ispise kompajler (cl.exe) kad ga startujes bez parametara.
 
audiofreak je napisao(la):
Naravno da moze ali problem je sto ne citas pazljivo sta ja napisem. Ti si se zakacio za /O2 i uporno odbijas da cujes sta ti objasnjavam. Kod mene to ne radi kako treba, a ja zaista ne znam zasto. Lepo sam ti naveo switcheve i verziju kompajlera i pitao te sta si ti koristio, a ti umesto da odgovoris pa da zaista obojca nesto korisno zakljucimo nastavljas da me napadas i jos me vredjas.

Nisam ti ja nista prigovorio, samo sam rekao da je to verovatno uzrok razlike od 40% koju dobijas kod tebe.

Bilo bi lepo kada bi mi konacno rekao koje switcheve i verziju kompajlera si koristio. Verziju ti ispise kompajler (cl.exe) kad ga startujes bez parametara.

Ja tebe druze ne napadam nego ti skrecem cijelo vrijeme paznju da se konacno odlucis sta zelis testirati performanse CPU ili kompajlera ?
Ako zelis testirati Kompajlere onda sam ti fino rekao gore uzmi verzije koje se daju donekle adekvatno uporediti koristi kod MSVC'a 2005 fp:fast i /O2 pa ces jednostavno doci do zakljucka da ne postoji nikakva znacajna razlika pa cak ni na Intel'u a kamoli na AMD'u ovo tvoje cijelo izlaganje razlicitih kompilata i razlicitih verzija kompajlera nema sa prvobitnom namjerom uporedjivanja efikasnosti CPU nikakve veze.
Cinjenica je da ce ICC na Intel'u odnosno MSVC na AMD uvijek brze raditi samo sto si ti sa pogresnim salterima predstavio namjerno ili nenamjerno neznam tu razliku nerealno veliku pa cak i dovodis zakljucke da je ICC jedini efikasni kompajler a sve ostalo shit.

Cini mi se da sam to do sada 8 puta pokusao da ti recem

Predlazem da izbacis sve verzije vezane za MSVC i koncentrises se na ono sto sam od tebe zatrazio a to je bilo Intel optimirani Dll koji eksportuje dvije funkcije jednu funkciju CalcSSE2 i koristi SSE2 instruktion set. i drugu CalCFPU sa cistim FPU'om nadam se da cu za vikend zavrsiti zapoceti GUI kao i optimizovane rutine za AMD. Uz to jos jedan DLL sa istim funkcijama kao 64 bitna verzija za EMT

Druga stvar optimiranu rutinu komentarisi sta si izmijenio posto vidim da zoves dodatno uz subrutine exp,log,atan i dodatno neke druge.

Mogao bi da se potrudis da mi dostavis sve CPUID flagove vezane za Intel Procesore jer cu ubaciti detekciju CPU'a u GUI'u za AMD imam sve ali mi je Datasheet za Intel malo star.
 
Poslednja izmena:
Monteboy, imam molbu za tebe, hajde molim te testiraj ovo u prilogu pod 64-bitnim windowsom pa mi postuj rezultat, voleo bih da nesto uporedim.
 

Prilozi

Hajde reci mi makar hoces li da probas ovaj mali test koji sam napravio da znam da li da cekam rezultat ili ne?
 
audiofreak je napisao(la):
Hajde reci mi makar hoces li da probas ovaj mali test koji sam napravio da znam da li da cekam rezultat ili ne?

Strpi se koji dan ne gori ti pod nogama trenutno sam zauzet drugim stvarima ipak cu gledati veceras da ti odradim rezultate ispod 64'tvorke
 
monteboy je napisao(la):
Strpi se koji dan ne gori ti pod nogama trenutno sam zauzet drugim stvarima ipak cu gledati veceras da ti odradim rezultate ispod 64'tvorke

Istina da ne gori ali sam radoznao. Proslo je vec nekoliko dana od kad sam to okacio, a tebe niotkuda 🙂
 
audiofreak je napisao(la):
E, ne moras da se mucis, uradili su drugi test.

Nema potrebe da se ljutis , imam trenutno vecih problema od tog testa !
P.S mogao bi objaviti rezultate.
 
monteboy je napisao(la):
Nema potrebe da se ljutis , imam trenutno vecih problema od tog testa !
P.S mogao bi objaviti rezultate.

Ko kaze da se ljutim? Samo te obavestavam da ne moras posto sam dobio rezultate i sa AMD-a.

Inace i ja sam bio zauzet ovih dana, razgovarao sam preko email-a sa covekom po imenu Kevin Frei koji radi u Microsoftu na x64 kompajleru. Nesto smo diskutovali oko novog ABI-ja i naveo sam mu neki primer jednostavnog integerskog C/C++ koda koji blokira store forwarding (sto je penal koji kaci i AMD i Intel procesore podjednako) pa je otvorio bug report za to u njihovoj QA bazi. Nadajmo se da ce fix uci u finalni Whidbey.

Ako sve bude u redu 27. mi stize Pentium 630 (3.0 GHz EM64T) pa cemo nadam se moci da napravimo jedan pristojan 32/64 benchmark koji nikog ne favorizuje.

Bojim se ako objavim rezultate da ce mcekovic da kaze da nisu tacni jer pokazuju broj taktova za neke instrukcije 😉
 
Jedna Prerelease verzija bench'a pa ko zeli nek izvoli.
Bio bih svim Betatesterima zahvalan .... 😉

Sta joj jos fali :
- Verzija 0.9a nema podrsku za CPU'e koji ne podrzavaju SSE2 bice uskoro ....
- detektcija model'a CPU i SSE3 isto jos nije kompletno implementirana
- 64 bitna verzija ce biti uskoro...

Audiofreak zamolio bi te odradi test na P4 i postavi screenshot
 

Prilozi

Poslednja izmena:
Meni javlja greska pri ucitavanju AMD32.dll'a. Procesor je A64 3000+.
 
Meni takodje. Zasto nisi uradio staticko linkovanje nego nam sada fali MSVCR80.DLL?

EDIT:

Hajde ti to ponovo, ne radi ni kad se ubaci DLL jer ocigledno zavisi od jos necega? Necemo valjda da instaliramo svi Visual C++ 2005 Express Edition Beta koji zauzima 215 MB i .NET Framework 2.0 Beta od jos ~50 MB da bi nam radio tvoj benchmark od 152KB?
 

Prilozi

Poslednja izmena:
Kako se ono kaze -> prvi macici se u vodu bacaju.

Evo nova verzija sa staticki linkovanom C bibliotekom
 

Prilozi

34.093с
Athlon 64 3000+ na 2.4GHz (8x300Mhz mem na 267MHz 2.5-4-3-7)
 
Zadatak za Audiofreak'a :

Napisi dio programa u WinApi koji prikazuje u jednom EditCtrl'u frikvenciju CPU stim da se ista analogno kao kod CPU-Z dinamicki update'uje recimo svake pola sekunde ili svaki sekund.

Znaci kad recimo pomocu neke Softwarske alatke u Window'su podignes frikvenciju na primer sa ClockGen da ista bude "just in time" u tvojoj alikaciji prikazana.

Veoma vazno je da frikvencija mora biti prikazana pouzdano znaci opterecenje sistema odnosno drugi procesi koji rade ne smiju remetiti tacno izracunavanje frikvencije


Savjet -> Sa Timerim'a neces stici daleko 😉

Poz...
 
Poslednja izmena:
Nazad
Vrh Dno