PDA

Prikaži potpunu verziju : Program za testiranje (minimalne) brzine memorije.


vlad777
23.1.2010, 18:26
Ne prica se o najmanjoj brzini memorije racunara tj.
o worst case scenario adresiranju.
Kada sam napisao ovaj program za testiranje brzine memorije
sa nesekvencijalnim pristupom i pokrenuo ga
dobio sam iznenadjujuce male rezultate za najmanju brzinu.
(napomena: ne koristim mmx instrukcije)
Ako pogledate gif iz attachmenta bice vam odma jasno
kako program radi.

http://img140.imageshack.us/img140/9334/memm.gif
(Nadam se da ce ovo nekom biti inspiracija za clanak.)
Neki rezultati:
-------------------------------------------------
comp od mog drugara
nemam podatke samo da je
u pitanju neki core 2 duo
speed=5563.28 MB/s jump= 1 *4 bytes
speed=3012.05 MB/s jump= 2 *4 bytes
speed=1580.40 MB/s jump= 4 *4 bytes
speed=802.41 MB/s jump= 8 *4 bytes
speed=386.14 MB/s jump= 16 *4 bytes
speed=345.93 MB/s jump= 32 *4 bytes
speed=320.00 MB/s jump= 64 *4 bytes
speed=282.57 MB/s jump= 128 *4 bytes
speed=260.43 MB/s jump= 256 *4 bytes
speed=230.00 MB/s jump= 512 *4 bytes
speed=198.60 MB/s jump= 1024 *4 bytes
speed=197.23 MB/s jump= 2048 *4 bytes
speed=193.94 MB/s jump= 4096 *4 bytes
speed=192.20 MB/s jump= 8192 *4 bytes
speed=390.24 MB/s jump= 16384 *4 bytes
speed=398.13 MB/s jump= 32768 *4 bytes
speed=395.06 MB/s jump= 65536 *4 bytes
speed=386.70 MB/s jump= 131072 *4 bytes
speed=373.17 MB/s jump= 262144 *4 bytes
speed=397.54 MB/s jump= 524288 *4 bytes
speed=804.99 MB/s jump= 1048576 *4 bytes
best=5563.28 MB/s worst=192.20 MB
--------------------------------------------------
cpu: intel Conroe E1200 @ 1.6 Ghz
cache: L1 32 d/i L2 512 KB
memory: 1GB FSB:800MHz
speed=3466.20 MB/s jump= 1 *4 bytes
speed=1927.71 MB/s jump= 2 *4 bytes
speed=1072.96 MB/s jump= 4 *4 bytes
speed=566.01 MB/s jump= 8 *4 bytes
speed=281.45 MB/s jump= 16 *4 bytes
speed=248.46 MB/s jump= 32 *4 bytes
speed=243.72 MB/s jump= 64 *4 bytes
speed=232.05 MB/s jump= 128 *4 bytes
speed=210.52 MB/s jump= 256 *4 bytes
speed=188.26 MB/s jump= 512 *4 bytes
speed=167.48 MB/s jump= 1024 *4 bytes
speed=153.45 MB/s jump= 2048 *4 bytes
speed=134.03 MB/s jump= 4096 *4 bytes
speed=115.19 MB/s jump= 8192 *4 bytes
speed=88.42 MB/s jump= 16384 *4 bytes
speed=84.71 MB/s jump= 32768 *4 bytes
speed=88.39 MB/s jump= 65536 *4 bytes
speed=98.81 MB/s jump= 131072 *4 bytes
speed=107.33 MB/s jump= 262144 *4 bytes
speed=155.59 MB/s jump= 524288 *4 bytes
speed=490.26 MB/s jump= 1048576 *4 bytes
best=3466.20 MB/s worst=84.71 MB/s

---------------------------------------------
Cpu: AMD Barton 2.2 GHz (socket A)
Cache: L1 64KB D/I L2 512 KB full speed
Memory: DDR1 200/400 MHz FSB capacity: 1.2 GB speed: 3200 MB/s
Chipset: VIA KT600

speed=748.64 MB/s jump= 1 *4 bytes
speed=521.38 MB/s jump= 2 *4 bytes
speed=321.21 MB/s jump= 4 *4 bytes
speed=219.74 MB/s jump= 8 *4 bytes
speed=127.49 MB/s jump= 16 *4 bytes
speed=141.20 MB/s jump= 32 *4 bytes
speed=134.31 MB/s jump= 64 *4 bytes
speed=118.85 MB/s jump= 128 *4 bytes
speed=104.06 MB/s jump= 256 *4 bytes
speed=91.82 MB/s jump= 512 *4 bytes
speed=80.25 MB/s jump= 1024 *4 bytes
speed=77.81 MB/s jump= 2048 *4 bytes
speed=46.80 MB/s jump= 4096 *4 bytes
speed=24.21 MB/s jump= 8192 *4 bytes
speed=23.93 MB/s jump= 16384 *4 bytes
speed=24.12 MB/s jump= 32768 *4 bytes
speed=45.80 MB/s jump= 65536 *4 bytes
speed=79.04 MB/s jump= 131072 *4 bytes
speed=139.05 MB/s jump= 262144 *4 bytes
speed=178.64 MB/s jump= 524288 *4 bytes
speed=218.25 MB/s jump= 1048576 *4 bytes
best=748.64 MB/s worst=23.93 MB/s
-------------------------------------------------

Negde oko 32kB za jump su najlosiji rezultati.



Program:
---------------------------------------------------
//compajlirano kao Win32 Console Application u Visual C++ 6.0
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>


void test2(long* m,long jump,long sizemy){
long a;
long adr=0;
long pass=0;
long smd4=sizemy/4;

while(pass<jump && pass<smd4){
adr=pass;
while(adr<smd4){
a=m[adr]; //zakomentarisi za test brzine algoritma(ne memorije)
adr+=jump;
}
pass++ ;
}
}

void test3(long* m,long jump,long sizemy/*,long* tp*/){

_asm{
//mov tpl,0;
mov edi,[m]
mov esi,edi
add esi,sizemy
mov ecx,edi
mov ebx,0
mov edx,jump
shl edx,2
}
ll:
_asm{
mov edi,ecx //mov edi,[m]
add edi,ebx
}
l:
_asm{
mov eax,[edi] //zakomentarisi za test brzine algoritma(ne memorije)
add edi,edx
cmp edi,esi
jb l
add ebx,4
cmp ebx,edx
jae k
jmp ll
}
k: ;

}

void main(){
double cur,best=0,worst=500000;
int j;
long i;
long size=1024*1024*80; // 80 MB
long times=50;
int tick;
FILE *f;
long *m=(long *)malloc(size); //alocira 80MB za test
f=fopen("test2.txt","w");
for(i=1;i<=524288*2;i<<=1){
//for(i=524288;i<=524288*2*2*2*2;i<<=1){
tick=GetTickCount();
if(i<size && i>0) for(j=0;j<times;j++) test3(m,i,size); //--------------------------
tick=GetTickCount()-tick;
cur=(double)( (double)size*times/((double)tick/1000))/(double)(1024*1024);
if(cur>best)best=cur;
if(cur<worst)worst=cur;
//printf("\n speed=%5.2f MB/s jump= %d *4 bytes tp=%d ",cur,i,tp);
printf("\n speed=%5.2f MB/s jump= %d *4 bytes ",cur,i);
fprintf(f,"\n speed=%5.2f MB/s jump= %d *4 bytes",cur,i);
}

printf("\n\n best=%5.2f MB/s worst=%5.2f MB/s \n",best,worst);
fprintf(f,"\n\n best=%5.2f MB/s worst=%5.2f MB/s \n",best,worst);
fclose(f);
}

veseliburek
23.1.2010, 19:28
pa ajd podeli sa nama kompajliranu verziju pa da i mi bacimo rezultate...

doctor
23.1.2010, 20:00
32975
(okacio sam kao attachment jer je samo 8.5KB velik)

Evo vam kompajlirani program, kompajliran u VCpp 2008.

Radio je kod mene ;)

Nadam se da nemas nista protiv sto sam ja iskompajlirao :)

A zar ne bi bilo moguce napisati ovakav program bez assemblera?

Beagle
23.1.2010, 20:09
^
Trebalo bi da moze. Ovde bi neki masinac dao mnogo preciznije rezultate.

vlad777
24.1.2010, 0:00
A zar ne bi bilo moguce napisati ovakav program bez assemblera?

Procedura test2 je cela u c-u ali je sporija.

Evo i moje kompajlirane verzije u attachmentu.

veseliburek
25.1.2010, 0:30
speed=3883.50 MB/s jump= 1 *4 bytes
speed=1988.07 MB/s jump= 2 *4 bytes
speed=1114.83 MB/s jump= 4 *4 bytes
speed=585.39 MB/s jump= 8 *4 bytes
speed=310.41 MB/s jump= 16 *4 bytes
speed=263.26 MB/s jump= 32 *4 bytes
speed=253.36 MB/s jump= 64 *4 bytes
speed=236.77 MB/s jump= 128 *4 bytes
speed=236.97 MB/s jump= 256 *4 bytes
speed=216.93 MB/s jump= 512 *4 bytes
speed=171.97 MB/s jump= 1024 *4 bytes
speed=173.60 MB/s jump= 2048 *4 bytes
speed=171.97 MB/s jump= 4096 *4 bytes
speed=180.70 MB/s jump= 8192 *4 bytes
speed=179.81 MB/s jump= 16384 *4 bytes
speed=182.50 MB/s jump= 32768 *4 bytes
speed=235.02 MB/s jump= 65536 *4 bytes
speed=287.77 MB/s jump= 131072 *4 bytes
speed=421.72 MB/s jump= 262144 *4 bytes
speed=460.35 MB/s jump= 524288 *4 bytes
speed=893.46 MB/s jump= 1048576 *4 bytes

best=3883.50 MB/s worst=171.97 MB/s

konfa iz profila

holodoc
25.1.2010, 0:53
@vlad777
Nema šanse da je prvi procesor koji je testiran iz familije Core 2 Duo zato što ja sa i5 i Kingstonom na 1333MHz u dvokanalnom modu u prvoj iteraciji prolazim sa "samo" 5300MB/s ;) To je neki jači procesor u pitanju sa poprilično kvalitetnijom memorijom.

vlajo
25.1.2010, 1:03
Sad sam i ja malo testirao i rezultat je

speed=6410.26 MB/s jump= 1 *4 bytes
speed=3561.89 MB/s jump= 2 *4 bytes
speed=1899.34 MB/s jump= 4 *4 bytes
speed=1001.50 MB/s jump= 8 *4 bytes
speed=497.88 MB/s jump= 16 *4 bytes
speed=412.24 MB/s jump= 32 *4 bytes
speed=383.29 MB/s jump= 64 *4 bytes
speed=352.67 MB/s jump= 128 *4 bytes
speed=330.01 MB/s jump= 256 *4 bytes
speed=301.66 MB/s jump= 512 *4 bytes
speed=271.32 MB/s jump= 1024 *4 bytes
speed=269.07 MB/s jump= 2048 *4 bytes
speed=264.06 MB/s jump= 4096 *4 bytes
speed=252.38 MB/s jump= 8192 *4 bytes

Čini mi se da nije sve iskopirano.

Rocker
25.1.2010, 2:43
Naziv teme je više nego neadekvatan, tako da moramo da ga promenimo. Nek' se autor samo izjasni kako misli da bi bilo najbolje. "Minimalna brzina memorije", "program za testiranje (minimalne) brzine memorije" ili nešto treće.

holodoc
25.1.2010, 3:10
Usput, ima li ko kod sebe 64 bitni setup kompajlera za Windows ili da skidam WinSDK :D Baš me interesuje da li bi postojala razlika u performansama između 32bitnog i 64bitnog builda ovog sourcea ali trenutno kod sebe imam samo VS2008EE a mrzi me da skidam ceo SDK :( I može li neko da stavi taj kod u CODE blok? Užasavam se kad vidim ovako postavljen kod ;)

Freško
25.1.2010, 10:57
Rezultat sa laptopom iz profila

speed=2909.09 MB/s jump= 1 *4 bytes
speed=1841.62 MB/s jump= 2 *4 bytes
speed=921.02 MB/s jump= 4 *4 bytes
speed=468.82 MB/s jump= 8 *4 bytes
speed=240.60 MB/s jump= 16 *4 bytes
speed=193.07 MB/s jump= 32 *4 bytes
speed=186.99 MB/s jump= 64 *4 bytes
speed=178.64 MB/s jump= 128 *4 bytes
speed=172.16 MB/s jump= 256 *4 bytes
speed=165.27 MB/s jump= 512 *4 bytes
speed=156.29 MB/s jump= 1024 *4 bytes
speed=163.79 MB/s jump= 2048 *4 bytes
speed=158.03 MB/s jump= 4096 *4 bytes
speed=146.54 MB/s jump= 8192 *4 bytes
speed=151.39 MB/s jump= 16384 *4 bytes
speed=200.78 MB/s jump= 32768 *4 bytes
speed=241.28 MB/s jump= 65536 *4 bytes
speed=247.59 MB/s jump= 131072 *4 bytes
speed=236.16 MB/s jump= 262144 *4 bytes
speed=257.04 MB/s jump= 524288 *4 bytes
speed=507.94 MB/s jump= 1048576 *4 bytes

best=2909.09 MB/s worst=146.54 MB/s

Aleksandar1987
25.1.2010, 13:50
Test sa konfom iz profila na 64bitnoj sedmici


speed=3714.02 MB/s jump= 1 *4 bytes
speed=2003.00 MB/s jump= 2 *4 bytes
speed=1110.19 MB/s jump= 4 *4 bytes
speed=576.20 MB/s jump= 8 *4 bytes
speed=284.58 MB/s jump= 16 *4 bytes
speed=275.71 MB/s jump= 32 *4 bytes
speed=260.84 MB/s jump= 64 *4 bytes
speed=247.74 MB/s jump= 128 *4 bytes
speed=224.53 MB/s jump= 256 *4 bytes
speed=206.44 MB/s jump= 512 *4 bytes
speed=183.55 MB/s jump= 1024 *4 bytes
speed=180.19 MB/s jump= 2048 *4 bytes
speed=171.74 MB/s jump= 4096 *4 bytes
speed=160.66 MB/s jump= 8192 *4 bytes
speed=158.38 MB/s jump= 16384 *4 bytes
speed=191.64 MB/s jump= 32768 *4 bytes
speed=249.17 MB/s jump= 65536 *4 bytes
speed=257.96 MB/s jump= 131072 *4 bytes
speed=242.59 MB/s jump= 262144 *4 bytes
speed=247.97 MB/s jump= 524288 *4 bytes
speed=483.79 MB/s jump= 1048576 *4 bytes

best=3714.02 MB/s worst=158.38 MB/s

Freško
26.1.2010, 19:17
Neznam kakvo se stanje kod drugih ali se meni čini da ovaj test i nije baš najpouzdaniji jer rezultati variraju +/- i 30% evo recimo ~20% bolji rezultat na istoj mašini iz čista mira

speed=3412.97 MB/s jump= 1 *4 bytes
speed=1815.71 MB/s jump= 2 *4 bytes
speed=924.21 MB/s jump= 4 *4 bytes
speed=488.58 MB/s jump= 8 *4 bytes
speed=229.79 MB/s jump= 16 *4 bytes
speed=196.02 MB/s jump= 32 *4 bytes
speed=182.73 MB/s jump= 64 *4 bytes
speed=183.12 MB/s jump= 128 *4 bytes
speed=171.23 MB/s jump= 256 *4 bytes
speed=166.99 MB/s jump= 512 *4 bytes
speed=155.81 MB/s jump= 1024 *4 bytes
speed=167.22 MB/s jump= 2048 *4 bytes
speed=160.70 MB/s jump= 4096 *4 bytes
speed=148.67 MB/s jump= 8192 *4 bytes
speed=153.29 MB/s jump= 16384 *4 bytes
speed=201.26 MB/s jump= 32768 *4 bytes
speed=244.27 MB/s jump= 65536 *4 bytes
speed=250.00 MB/s jump= 131072 *4 bytes
speed=238.81 MB/s jump= 262144 *4 bytes
speed=261.49 MB/s jump= 524288 *4 bytes
speed=516.13 MB/s jump= 1048576 *4 bytes

best=3412.97 MB/s worst=148.67 MB/s

tako da.....

Napomena:
Memorije u laptopu mi rade na 533MHz
-------------------------------------------------------------------------------
Rezultat na Serveru iz profila:


speed=5442.18 MB/s jump= 1 *4 bytes
speed=2877.70 MB/s jump= 2 *4 bytes
speed=1532.57 MB/s jump= 4 *4 bytes
speed=775.80 MB/s jump= 8 *4 bytes
speed=373.17 MB/s jump= 16 *4 bytes
speed=311.07 MB/s jump= 32 *4 bytes
speed=291.57 MB/s jump= 64 *4 bytes
speed=282.25 MB/s jump= 128 *4 bytes
speed=264.74 MB/s jump= 256 *4 bytes
speed=243.34 MB/s jump= 512 *4 bytes
speed=217.88 MB/s jump= 1024 *4 bytes
speed=214.77 MB/s jump= 2048 *4 bytes
speed=208.98 MB/s jump= 4096 *4 bytes
speed=244.27 MB/s jump= 8192 *4 bytes
speed=384.99 MB/s jump= 16384 *4 bytes
speed=425.22 MB/s jump= 32768 *4 bytes
speed=421.76 MB/s jump= 65536 *4 bytes
speed=412.92 MB/s jump= 131072 *4 bytes
speed=398.13 MB/s jump= 262144 *4 bytes
speed=423.15 MB/s jump= 524288 *4 bytes
speed=844.77 MB/s jump= 1048576 *4 bytes

best=5442.18 MB/s worst=208.98 MB/s

vlad777
26.1.2010, 19:51
Naziv teme je više nego neadekvatan, tako da moramo da ga promenimo. Nek' se autor samo izjasni kako misli da bi bilo najbolje. "Minimalna brzina memorije", "program za testiranje (minimalne) brzine memorije" ili nešto treće.

Pa ako bas mora da naslov bude promenjen neka bude:
program za testiranje (minimalne) brzine memorije.

Ali ja stvarno nisam nigde naleteo na clanak ili text o ovome
i hardverskim razlozima zasto brzina memorije toliko pada
za nesekvencijalni pristup.

vlad777
26.1.2010, 20:01
Čini mi se da nije sve iskopirano.

Moras da pustis program da zavrsi , ima oko 20 merenja.
Isto tako masina mora da bude rasterecena inace pokazuje
manje rezultate.

lobanja
27.1.2010, 19:40
speed=4065.04 MB/s jump= 1 *4 bytes
speed=2015.11 MB/s jump= 2 *4 bytes
speed=1127.71 MB/s jump= 4 *4 bytes
speed=610.97 MB/s jump= 8 *4 bytes
speed=298.37 MB/s jump= 16 *4 bytes
speed=263.64 MB/s jump= 32 *4 bytes
speed=250.23 MB/s jump= 64 *4 bytes
speed=244.75 MB/s jump= 128 *4 bytes
speed=231.88 MB/s jump= 256 *4 bytes
speed=208.29 MB/s jump= 512 *4 bytes
speed=188.24 MB/s jump= 1024 *4 bytes
speed=186.05 MB/s jump= 2048 *4 bytes
speed=181.44 MB/s jump= 4096 *4 bytes
speed=173.21 MB/s jump= 8192 *4 bytes
speed=173.56 MB/s jump= 16384 *4 bytes
speed=259.89 MB/s jump= 32768 *4 bytes
speed=332.47 MB/s jump= 65536 *4 bytes
speed=353.11 MB/s jump= 131072 *4 bytes
speed=342.23 MB/s jump= 262144 *4 bytes
speed=365.73 MB/s jump= 524288 *4 bytes
speed=725.16 MB/s jump= 1048576 *4 bytes

best=4065.04 MB/s worst=173.21 MB/s

samo jedno,cemu mi ovo u realnom zivotu sluzi?

vlad777
31.1.2010, 0:13
best=4065.04 MB/s worst=173.21 MB/s

samo jedno,cemu mi ovo u realnom zivotu sluzi?

Ako sam u pravu to znaci da tvoj racunar vecinu vremena
radi sa memorijom dosta sporije nego sto reklamiraju
brzinu memorije.
Isto tako mislim da je minimalna brzina memorije jako
vazna za programe koji rade u realnom vremenu.