Hola a todos,
tengo una rutinilla de copia de bloques de memoria bastante optimizada(si ya lo se, debo ser un freaky de estas cosas jeje).
El caso es q a mi disposicion tengo un numero de equipos limitados, lo he probado en un Dothan1.6Ghz, Duron 700 y Athlon XP 3000. Me gustaria probarlo en mas procesadores de distintas velocidades y sobre todo... en los P4, en cualquier de sus versiones para ver que tal se comporta con ellos y si va bien... doy el visto bueno y listo para incluirlo en CRM32Pro.
Os dejo un enlace con el rar del programita.. solo teneis q descomprimir, ejecutar y mientras lo hace...no hagais nada..solo tarda unos segundos... genera un .txt q... o me podeis enviar por email o podeis copiar aqui directamente vale?
gracias a todos los voluntarios :)
MemBandwidth -
http://www.megastormsystems.com/download/Memtest.rarPD: solo tira en Pentium III y superiores y K7 y superiores... ni Pentium MMX ni K6-2 vale?
Esta es la salida de un Dothan 1600Mhz:
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 1114.48 Mb/s 2111.49 Mb/s 89.46
8 Kb 1164.31 Mb/s 2164.13 Mb/s 85.87
16 Kb 1181.92 Mb/s 2170.14 Mb/s 83.61
32 Kb 3906.25 Mb/s 3886.82 Mb/s -0.50
64 Kb 1181.92 Mb/s 1816.86 Mb/s 53.72
128 Kb 1164.31 Mb/s 1771.54 Mb/s 52.15
256 Kb 1200.08 Mb/s 1775.57 Mb/s 47.95
512 Kb 3885.57 Mb/s 1775.00 Mb/s -54.32
1024 Kb 3701.42 Mb/s 1501.92 Mb/s -59.42
2048 Kb 748.56 Mb/s 1038.62 Mb/s 38.75
4096 Kb 708.45 Mb/s 960.59 Mb/s 35.59
8192 Kb 640.79 Mb/s 1018.37 Mb/s 58.92
16384 Kb 639.47 Mb/s 1022.64 Mb/s 59.92
Hay problemillas copiando bloques de 512Kb y 1Mb pero es debido a su cache ... y de todos modos, lo que mas me interesa son los bloques de hasta unos 128kb maximo.
Athlon XP 1600+(1.397ghz), bus a 266mhz, 128KB L1, 256KB L2, chipset NForce2 Ultra
Citar
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3338.68 Mb/s 7167.43 Mb/s 114.68
8 Kb 3324.47 Mb/s 6250.00 Mb/s 88.00
16 Kb 3338.68 Mb/s 7167.43 Mb/s 114.68
32 Kb 3567.35 Mb/s 7102.27 Mb/s 99.09
64 Kb 1471.28 Mb/s 1924.26 Mb/s 30.79
128 Kb 1428.24 Mb/s 1851.30 Mb/s 29.62
256 Kb 438.66 Mb/s 876.82 Mb/s 99.89
512 Kb 423.77 Mb/s 847.07 Mb/s 99.89
1024 Kb 427.24 Mb/s 847.07 Mb/s 98.26
2048 Kb 422.99 Mb/s 845.99 Mb/s 100.00
4096 Kb 426.70 Mb/s 860.93 Mb/s 101.77
8192 Kb 420.82 Mb/s 856.51 Mb/s 103.53
16384 Kb 423.84 Mb/s 861.95 Mb/s 103.37
Pentium IV 2.8 Ghz. 512 MB RAM 400Mhz
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3125.00 Mb/s 6250.00 Mb/s 100.00
8 Kb 3848.52 Mb/s 7167.43 Mb/s 86.24
16 Kb 3567.35 Mb/s 5580.36 Mb/s 56.43
32 Kb 6250.00 Mb/s 5540.78 Mb/s -11.35
64 Kb 1562.50 Mb/s 2496.01 Mb/s 59.74
128 Kb 1390.12 Mb/s 3338.68 Mb/s 140.17
256 Kb 1428.24 Mb/s 2937.03 Mb/s 105.64
512 Kb 979.92 Mb/s 1787.19 Mb/s 82.38
1024 Kb 960.64 Mb/s 1850.71 Mb/s 92.65
2048 Kb 998.72 Mb/s 1721.85 Mb/s 72.41
4096 Kb 978.67 Mb/s 1784.90 Mb/s 82.38
8192 Kb 992.33 Mb/s 1838.86 Mb/s 85.31
16384 Kb 945.81 Mb/s 1819.91 Mb/s 92.42
Me intriga como has echo la optimización, cuando la pongas en tu libreria le echo un vistazo
Edito: ahora me acabo de dar cuenta de que no es open source xDD
Minos, no tiene ningun secreto, es una rutina que saco AMD en el 2001, levemente modificada para que vaya mejor en todos los procesadores...(lease Intel) y dependiendo de su cache...
Lo q mas me sorprende..es lo mal optimizado que esta el memcpy() estandar.... y eso que esta compilado con Visual Studio 2003, todas las optimizaciones al maximo, que genere codigo para P4 y utilice automaticamente SSE.. pensaba que..los de microsoft tendrian varias versiones del memcpy... pero no, es la misma, a ver si la gente arroja mas resultados..en especial algun K8, Prescott o P4 de los antiguos...de los willamette...
El rollo de esto es... q... pantallas con muchos sprites de un tamaño normal (de momento sin utilizar alpha...me metere con ello) se volcaran casi al doble de rapido que de forma habitual.... enviare el codigo modificado a Sam Latinga por si lo kieren incluir en las SDL ya que... esta tiene partes en MMX/SSE pero para GNU no para visual studio :)
Pentium III 450
Tener abiertos msn, emule y 3ds max da algun problema?
Citar
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 315.91 Mb/s 582.15 Mb/s 84.28
8 Kb 308.31 Mb/s 586.52 Mb/s 90.24
16 Kb 272.78 Mb/s 241.57 Mb/s -11.44
32 Kb 250.00 Mb/s 269.03 Mb/s 7.61
64 Kb 236.38 Mb/s 146.38 Mb/s -38.07
128 Kb 271.74 Mb/s 150.33 Mb/s -44.68
256 Kb 232.86 Mb/s 155.10 Mb/s -33.39
512 Kb 126.19 Mb/s 139.02 Mb/s 10.16
1024 Kb 133.07 Mb/s 152.93 Mb/s 14.92
2048 Kb 129.61 Mb/s 148.06 Mb/s 14.24
4096 Kb 130.68 Mb/s 158.31 Mb/s 21.15
8192 Kb 125.79 Mb/s 143.52 Mb/s 14.09
16384 Kb 114.29 Mb/s 117.27 Mb/s 2.61
CitarPentium III 450
Tener abiertos msn, emule y 3ds max da algun problema?
.... hombre, mejor cerrarlo todo en un plis... aunq en teoria, si estan en segundo plano y no estan haciendo ningun trabajo(el msn es posible, espero q con el max no estes renderizando nada jeje y el emule...me da q ese siempre esta haciendo cosas :) ).
Mas o menos, cerrando todo, deben aumentar todos los datos aunq con lo que has puesto aki..se puede utilizar el % mas o menos. Gracias Vil :)
Pentiu IV 1.6GHz 512MB RAM
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 1924.26 Mb/s 3848.52 Mb/s 100.00
8 Kb 1724.61 Mb/s 2780.25 Mb/s 61.21
16 Kb 1428.24 Mb/s 2780.25 Mb/s 94.66
32 Kb 2937.03 Mb/s 2937.03 Mb/s 0.00
64 Kb 625.00 Mb/s 400.03 Mb/s -36.00
128 Kb 588.29 Mb/s 393.78 Mb/s -33.06
256 Kb 199.96 Mb/s 290.75 Mb/s 45.40
512 Kb 209.16 Mb/s 387.40 Mb/s 85.22
1024 Kb 232.51 Mb/s 413.01 Mb/s 77.63
2048 Kb 217.03 Mb/s 416.00 Mb/s 91.68
4096 Kb 241.19 Mb/s 416.00 Mb/s 72.48
8192 Kb 237.60 Mb/s 417.43 Mb/s 75.69
16384 Kb 211.86 Mb/s 420.13 Mb/s 98.30
P4 3GHz HT, 2Gb de RAM
CitarRunning Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 2948.11 Mb/s 5008.01 Mb/s 69.87
8 Kb 2374.62 Mb/s 4568.71 Mb/s 92.40
16 Kb 2083.33 Mb/s 3829.66 Mb/s 83.82
32 Kb 4568.71 Mb/s 4155.58 Mb/s -9.04
64 Kb 925.65 Mb/s 2083.33 Mb/s 125.07
128 Kb 909.49 Mb/s 1783.68 Mb/s 96.12
256 Kb 877.81 Mb/s 1924.26 Mb/s 119.21
512 Kb 908.14 Mb/s 1314.81 Mb/s 44.78
1024 Kb 909.20 Mb/s 1314.81 Mb/s 44.61
2048 Kb 908.03 Mb/s 1313.13 Mb/s 44.61
4096 Kb 908.03 Mb/s 1313.13 Mb/s 44.61
8192 Kb 886.86 Mb/s 1306.40 Mb/s 47.31
16384 Kb 877.71 Mb/s 1295.11 Mb/s 47.55
-= EDIT =-
SEGUNDA ejecución:
CitarRunning Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 4177.81 Mb/s 5540.78 Mb/s 32.62
8 Kb 2948.11 Mb/s 4542.15 Mb/s 54.07
16 Kb 1998.08 Mb/s 3848.52 Mb/s 92.61
32 Kb 4542.15 Mb/s 4542.15 Mb/s 0.00
64 Kb 909.49 Mb/s 2083.33 Mb/s 129.07
128 Kb 909.49 Mb/s 1665.78 Mb/s 83.16
256 Kb 832.89 Mb/s 1924.26 Mb/s 131.03
512 Kb 892.57 Mb/s 1282.43 Mb/s 43.68
1024 Kb 876.54 Mb/s 1282.43 Mb/s 46.31
2048 Kb 875.42 Mb/s 1280.79 Mb/s 46.31
4096 Kb 860.93 Mb/s 1248.00 Mb/s 44.96
8192 Kb 856.51 Mb/s 1272.13 Mb/s 48.52
16384 Kb 832.97 Mb/s 1261.08 Mb/s 51.40
Me da que la medida de tiempos no está muy fina...
¿Podrías el código de tu función de copiar memoria?
O mandármela a sessesarrobawanadoopuntoes
Portatil con P4 Desktop 2.6 GHz, 1GB RAM DDR (333MHz), No recuerdo el cache, Hypertreading desactivado
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3720.24 Mb/s 6510.42 Mb/s 75.00
8 Kb 3551.14 Mb/s 6009.61 Mb/s 69.23
16 Kb 3241.70 Mb/s 5580.36 Mb/s 72.14
32 Kb 5580.36 Mb/s 6510.42 Mb/s 16.67
64 Kb 1444.08 Mb/s 2993.29 Mb/s 107.28
128 Kb 1446.76 Mb/s 3382.03 Mb/s 133.77
256 Kb 1321.91 Mb/s 2893.52 Mb/s 118.89
512 Kb 975.03 Mb/s 1623.70 Mb/s 66.53
1024 Kb 963.01 Mb/s 1558.88 Mb/s 61.88
2048 Kb 938.63 Mb/s 1588.59 Mb/s 69.25
4096 Kb 950.06 Mb/s 1625.00 Mb/s 71.04
8192 Kb 944.04 Mb/s 1583.67 Mb/s 67.76
16384 Kb 946.98 Mb/s 1596.67 Mb/s 68.61
Portatil P4 Desktop 2Ghz, 256MB RAM (cache 256/512)
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 2693.97 Mb/s 5208.33 Mb/s 93.33
8 Kb 2684.71 Mb/s 4595.59 Mb/s 71.18
16 Kb 2232.14 Mb/s 4316.30 Mb/s 93.37
32 Kb 4340.28 Mb/s 4882.81 Mb/s 12.50
64 Kb 918.04 Mb/s 1658.70 Mb/s 80.68
128 Kb 940.13 Mb/s 1238.11 Mb/s 31.70
256 Kb 951.58 Mb/s 1499.52 Mb/s 57.58
512 Kb 416.98 Mb/s 876.54 Mb/s 110.21
1024 Kb 401.96 Mb/s 847.99 Mb/s 110.97
2048 Kb 378.09 Mb/s 875.42 Mb/s 131.54
4096 Kb 399.39 Mb/s 885.36 Mb/s 121.68
8192 Kb 407.78 Mb/s 880.82 Mb/s 116.00
16384 Kb 405.71 Mb/s 881.75 Mb/s 117.34
Esto es para un P4 1.800 con 1,5 Gb de ram
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 2441.41 Mb/s 4595.59 Mb/s 88.24
8 Kb 2433.80 Mb/s 3906.25 Mb/s 60.50
16 Kb 1998.08 Mb/s 3906.25 Mb/s 95.50
32 Kb 3720.24 Mb/s 4595.59 Mb/s 23.53
64 Kb 829.35 Mb/s 940.13 Mb/s 13.36
128 Kb 839.15 Mb/s 896.96 Mb/s 6.89
256 Kb 812.11 Mb/s 1471.28 Mb/s 81.17
512 Kb 516.53 Mb/s 886.49 Mb/s 71.62
1024 Kb 516.53 Mb/s 885.49 Mb/s 71.43
2048 Kb 533.52 Mb/s 885.36 Mb/s 65.95
4096 Kb 519.31 Mb/s 895.52 Mb/s 72.45
8192 Kb 516.64 Mb/s 889.91 Mb/s 72.25
16384 Kb 507.94 Mb/s 891.99 Mb/s 75.61
Si, ya lo sabia...la medida de tiempos no es 100% (vamos...q tiene un margen de error grande... sobre todo a muchos Mhz...3Ghz! y con los bloques pequeños :) ), y la forma de comprobarlo no es la mas indicada pero no es ningun Sandra SiSoft jeje, era solo para comprobar que no perdia rendimiento en ningun micro y por lo que va hasta el momento... con los P4 se resiente con las copias de 32kb.
Me falta algun K8... a ver si alguno tiene :)
Ses, cuelgo el codigo tambien para que lo veas, esa es la rutina sin modificar de AMD, cuando la ajuste para que funcione medianamente bien en un P4, tambien la colgare... basicamente el problema q tienen los P4 es q tienen muy poca cache de L1.. y por eso se resienten...
ah..y los mb no son muy reales... un P4 a 3Ghz... copiando bloques de 8kb...vuela! pero la funcion de este programilla no es de servir de benchmark o similar..es para descubrir problemas en algun micro :)
Código fuente -
http://www.megastormsystems.com/download/M...Memtest_src.rartahora
XP2800+, 512MB Ram DDR333, placa base Nforce 2
Citar----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 5008.01 Mb/s 8311.17 Mb/s 65.96
8 Kb 4542.15 Mb/s 10016.03 Mb/s 120.51
16 Kb 5008.01 Mb/s 9889.24 Mb/s 97.47
32 Kb 4177.81 Mb/s 7167.43 Mb/s 71.56
64 Kb 2170.14 Mb/s 2381.86 Mb/s 9.76
128 Kb 2083.33 Mb/s 2381.86 Mb/s 14.33
256 Kb 1665.78 Mb/s 1724.61 Mb/s 3.53
512 Kb 416.53 Mb/s 1000.00 Mb/s 140.08
1024 Kb 413.01 Mb/s 1000.00 Mb/s 142.13
2048 Kb 416.00 Mb/s 959.41 Mb/s 130.63
4096 Kb 416.00 Mb/s 960.59 Mb/s 130.91
8192 Kb 413.87 Mb/s 954.49 Mb/s 130.63
16384 Kb 402.94 Mb/s 963.61 Mb/s 139.15
Pentium 4Ht 2.4Ghz 512KB cache Intel D865Perl 256MB DDR333
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 2948.11 Mb/s 5540.78 Mb/s 87.94
8 Kb 3338.68 Mb/s 4155.58 Mb/s 24.47
16 Kb 2780.25 Mb/s 4542.15 Mb/s 63.37
32 Kb 5008.01 Mb/s 5008.01 Mb/s 0.00
64 Kb 1250.00 Mb/s 2170.14 Mb/s 73.61
128 Kb 1190.93 Mb/s 1315.24 Mb/s 10.44
256 Kb 1000.32 Mb/s 1665.78 Mb/s 66.52
512 Kb 574.69 Mb/s 1019.58 Mb/s 77.42
1024 Kb 581.53 Mb/s 1019.58 Mb/s 75.33
2048 Kb 548.52 Mb/s 978.67 Mb/s 78.42
4096 Kb 567.27 Mb/s 998.72 Mb/s 76.06
8192 Kb 564.36 Mb/s 1013.05 Mb/s 79.50
16384 Kb 558.55 Mb/s 1024.00 Mb/s 83.33
Bueno!
AMD64 3000+ (cache L1:L2 128:512) 1GBRAM->400Mhz
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 5580.36 Mb/s 10016.03 Mb/s 79.49
8 Kb 4976.11 Mb/s 10016.03 Mb/s 101.28
16 Kb 5580.36 Mb/s 10016.03 Mb/s 79.49
32 Kb 5540.78 Mb/s 12400.79 Mb/s 123.81
64 Kb 2277.70 Mb/s 3125.00 Mb/s 37.20
128 Kb 2170.14 Mb/s 3125.00 Mb/s 44.00
256 Kb 2277.70 Mb/s 2083.33 Mb/s -8.53
512 Kb 666.38 Mb/s 1468.05 Mb/s 120.30
1024 Kb 657.96 Mb/s 1427.79 Mb/s 117.00
2048 Kb 665.53 Mb/s 1425.96 Mb/s 114.26
4096 Kb 665.53 Mb/s 1468.93 Mb/s 120.72
8192 Kb 671.28 Mb/s 1418.65 Mb/s 111.33
16384 Kb 664.36 Mb/s 1446.33 Mb/s 117.70
No esta mal... y dices que es de una codigo que saco AMD, yo es que no paso por las web's de las casas de las CPU's, igual hay cosas interesantes.
Saludos.
Muchas gracias a todos por colaborar :)
visto lo visto... unos pekeños arreglos con los P4 antiguos y listo. Veo q en general, va muchismo mejor en todos los procesadores.
Lo diso, gracias a todos... lo proximo en colgar sera un programita testeando los sprites con y sin optimizaciones (lo sé, soy un empanado de la optimizacion jeje)
talaproximaaa (q sera pronto ;) )
Celeron 1.8 Ghz 128 DDR
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 2277.70 Mb/s 4155.58 Mb/s 82.45
8 Kb 2176.18 Mb/s 3848.52 Mb/s 76.85
16 Kb 1919.53 Mb/s 3583.72 Mb/s 86.70
32 Kb 3324.47 Mb/s 3848.52 Mb/s 15.76
64 Kb 819.78 Mb/s 1041.67 Mb/s 27.07
128 Kb 520.83 Mb/s 876.82 Mb/s 68.35
256 Kb 549.79 Mb/s 892.86 Mb/s 62.40
512 Kb 587.66 Mb/s 926.45 Mb/s 57.65
1024 Kb 588.10 Mb/s 925.36 Mb/s 57.35
2048 Kb 587.35 Mb/s 924.17 Mb/s 57.35
4096 Kb 594.51 Mb/s 906.98 Mb/s 52.56
8192 Kb 577.81 Mb/s 919.43 Mb/s 59.12
16384 Kb 540.08 Mb/s 909.95 Mb/s 68.48
Hey, por lo que veo, soy el único con 128 MB ddr :(
portatil PIII 800MHz 384MB
Pos a mi 64k me va 6 veces más rápido el memcpy normal no? He repetido 2 veces y sale muy parecido.
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 614.67 Mb/s 1114.48 Mb/s 81.31
8 Kb 604.68 Mb/s 1114.48 Mb/s 84.31
16 Kb 609.40 Mb/s 742.63 Mb/s 21.86
32 Kb 1594.39 Mb/s 684.11 Mb/s -57.09
64 Kb 609.40 Mb/s 108.21 Mb/s -82.24
128 Kb 253.24 Mb/s 90.40 Mb/s -64.30
256 Kb 55.06 Mb/s 77.47 Mb/s 40.70
512 Kb 65.65 Mb/s 94.41 Mb/s 43.82
1024 Kb 64.88 Mb/s 94.41 Mb/s 45.51
2048 Kb 64.85 Mb/s 93.28 Mb/s 43.83
4096 Kb 64.74 Mb/s 93.61 Mb/s 44.60
8192 Kb 64.79 Mb/s 92.25 Mb/s 42.38
16384 Kb 63.59 Mb/s 93.98 Mb/s 47.79
fiero...me has hundido en la miseria... :blink:
puedes poner las caracteristicas de tu micro..pq se q de p3 a 800 habia muchas versiones...q si con cache avanzada no se que, q si con mas o menos cache y que si con mas o menos bus....
realmente, en un p3 como el tuyo...hay problemas que debo solucionar... cdo me informes de eso..modificare el codigo y si eso, te lo envio para que me digas a ver....si mejoro... o como poco..q no empeore tanto vale?
gracias sr. fiero :)
P3 866 , 512 ram:
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 617.59 Mb/s 1000.32 Mb/s 61.97
8 Kb 602.35 Mb/s 1111.31 Mb/s 84.50
16 Kb 520.83 Mb/s 1086.58 Mb/s 108.62
32 Kb 1783.68 Mb/s 1614.15 Mb/s -9.50
64 Kb 609.88 Mb/s 340.12 Mb/s -44.23
128 Kb 390.63 Mb/s 295.82 Mb/s -24.27
256 Kb 166.12 Mb/s 261.81 Mb/s 57.61
512 Kb 224.10 Mb/s 268.75 Mb/s 19.92
1024 Kb 221.18 Mb/s 268.75 Mb/s 21.51
2048 Kb 217.94 Mb/s 268.41 Mb/s 23.16
4096 Kb 219.90 Mb/s 268.41 Mb/s 22.06
8192 Kb 215.02 Mb/s 268.42 Mb/s 24.84
16384 Kb 215.61 Mb/s 265.65 Mb/s 23.21
2a vez:
4 Kb 526.45 Mb/s 862.31 Mb/s 63.80
8 Kb 609.88 Mb/s 1135.54 Mb/s 86.19
16 Kb 581.29 Mb/s 1111.31 Mb/s 91.18
32 Kb 1787.76 Mb/s 1562.50 Mb/s -12.60
64 Kb 609.88 Mb/s 340.12 Mb/s -44.23
128 Kb 381.66 Mb/s 297.62 Mb/s -22.02
256 Kb 151.52 Mb/s 259.04 Mb/s 70.95
512 Kb 223.14 Mb/s 265.92 Mb/s 19.17
1024 Kb 221.12 Mb/s 270.24 Mb/s 22.21
2048 Kb 218.00 Mb/s 268.32 Mb/s 23.08
4096 Kb 218.92 Mb/s 268.41 Mb/s 22.61
8192 Kb 218.78 Mb/s 267.03 Mb/s 22.06
16384 Kb 217.50 Mb/s 268.53 Mb/s 23.46
Portátil PIII 1GHz, 256 MB RAM
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 796.38 Mb/s 1528.86 Mb/s 91.98
8 Kb 780.47 Mb/s 1417.88 Mb/s 81.67
16 Kb 812.96 Mb/s 1528.86 Mb/s 88.06
32 Kb 2225.78 Mb/s 2520.16 Mb/s 13.23
64 Kb 796.38 Mb/s 458.75 Mb/s -42.40
128 Kb 722.71 Mb/s 406.27 Mb/s -43.79
256 Kb 464.20 Mb/s 459.02 Mb/s -1.12
512 Kb 278.53 Mb/s 346.65 Mb/s 24.46
1024 Kb 198.93 Mb/s 287.77 Mb/s 44.66
2048 Kb 178.24 Mb/s 286.34 Mb/s 60.65
4096 Kb 180.72 Mb/s 287.40 Mb/s 59.03
8192 Kb 181.48 Mb/s 283.83 Mb/s 56.40
16384 Kb 162.13 Mb/s 288.29 Mb/s 77.8
Mi cpu con nombres y apellidos (antes me he colao en los MHz, ya no sé ni lo que tengo...):
----------------------
CPU-Z version 1.26
----------------------
CPUID Output
------------------------------------------------------------------------------
Number of CPUs 1
Name Intel Pentium III E
Code name Coppermine-T
Specification Intel Pentium III E 850 MHz
Family/Model/Stepping 68A
Extended Family/Model 0/0
Brand ID 2
Package BGA/Micro-PGA
Core Stepping cD0
Technology 0.18µ
Instructions Sets MMX, SSE
Clock Speed 845.7 MHz
Clock multiplier x8.5
Front Side Bus Frequency 99.5 MHz
Bus Speed 99.5 MHz
L1 Data Cache 16 KBytes, 4-way set associative, 32 Bytes line size
L1 Instruction Cache 16 KBytes, 4-way set associative, 32 Bytes line size
L2 Cache 256 KBytes, 8-way set associative, 32 Bytes line size
L2 Latency 0
L2 Speed 845.7 MHz (Full)
L2 Location On Chip
L2 ECC Check enabled
L2 Data Prefetch Logic no
L2 Bus Width 256 bits
Si quieres que pruebe algo ya me dirás
Un benchmark de este tipo no sé qué sentido tiene la verdad y mucho menos si los que lo hacen únicamente especifican qué prorcesador tienen. No deberían comentar qué política de caché tienen, tamaño de la misma, niveles... por no comentar el sistema operativo etc. Otro tipo de especificaciones que se deberían dar son las condiciones del test (número de veces, intervalo entre ellas, etc).
Sin más recomendar dos cosas:
- Hennesy&Paterson - arquitectura de ordenadores (cualquier edición , anteriores al 2004 para conceptos básicos) muy recomendable
- SPEC: conocidos benchmarks
Por otro lado me gustaría abrir hacer una pregunta acerca de este tipo de optimizaciones: alguna vez habeis usado optimizaciones para la transferencia de datos y realmente han optimizado algo la aplicación. Siempre que yo he hecho alguna transferencia de una cantidad de datos interesante (una imagen) ha sido más costoso el procesado de los datos que la propia transferencia. Qué pensais?
un saludo
Estoy de acuerdo en casi todo lo que has dicho ethernet. Sin embargo hay cosas que para una prueba de velocidad de transferencia de memoria no creo que importen. Por ejemplo el sistema operativo. Transferir 256K de memoria de un sitio a otro en memoria RAM da igual en w98, w2000, XP o linux. Otra cosa diferente es el rendimiento global de una aplicación compleja como un procesador de texto, etc, entonces si hay diferencias segun el sistema operativo.
A la hora de transferencia de imagenes el verdadero cuello de botella según mi experiencia es la memoria de video. He visto mi motor correr más rápido en un PII a 266 con una Matrox G400 que en un PIII a 500 MHZ con una tarjeta normalita.
Vayamos por partes...
el unico sentido que tenia era descubrir si en algun procesador habia algun problema GRAVE de funcionamiento... , no me interesa la cantidad de memoria, el sistema operativo, tan solo micro y velocidad ya que con eso, ya se que arquitectura es...salvo la excepcion del fiero que el p3 800 habia varias versiones(aunq su micro, es el mas avanzado... la cache es ATC...) y por eso le pregunte...si de primeras pido la salida del cpu-z o wcpuid... la gente se habria echao para atras y necesitaba el maximo numero de test posibles en el menor tiempo posible(lo empece ayer, dedique menos de 1h y hoy ya lo termino en menos de 20min).
Tambien me da igual la diferencia en la salida, como ya comente anteriormente, varia y es sencillo, no es un Sandra Sisoft ni tampoco una Spec2005...
Luego, resumiendo: EL OBJETIVO ERA DESCUBRIR ALGUNA ANOMALIA GRAVE EN ALGUN PROCESADOR. Y asi ha sido, los p4 willamette antiguos y los P3 necesitan un leve ajuste para no perder una media de la mitad de rendimiento..., luego, objetivo logrado :).
Ahora otra cosa... la razon de ser de la optimizacion de memoria... yo si he notado cambios tremendos de velocidad de ejecucion en aplicaciones optimizando las copias... pero no hablare del pasado, no te pongo el profile pq es mazo tocho pero, un jueguecillo sencillo, 2D, con varios sprites (sin alpha eh?) moviendose por la pantalla, 32bits de color y a 1024x768... bien, si lo haces por hardware...tal y como dijo fiero...la tarjeta de video lo hara volar... pero.. y si no? y si se hace por software? muy sencillo, coges la aplicacion, mides los tiempos y leches...el 90% se lo consume el SDL_Blitxxx... y eso??? ahora bien... optimiza esa funcion al doble de velocidad (de media que saka los memcpy optimizados) y voila! reduces casi a la mitad el tiempo de ejecucion de los SDL_blit... y... estoy de acuerdo, que a veces, las propias transformaciones de los datos son mas costosas que las copias pero..a un sprite(sin alpha)..no le aplicas ninguna transformacion..es solo copiar y copiar lo mas rapido posible.
Si teneis alguna otra preguntilla, o pensais que estoy colgaoo jeje, podeis decirlo abiertamente... pero a mi me gusta optimizar las cosillas una vez terminada, para algunos puede tener mas o menos sentido pero... para mi lo tiene :). Y para terminar, muxas gracias a todos los que han posteado sus resultados, un saludo
ok, tienes razón. Aunque utilizo rutinas por soft para poner los sprites, el volcado de pantalla lo hago con un BitBlt de DX así que las tarjetas buenas lo harán por hardware.
un saludo
Cita de: "fiero"ok, tienes razón. Aunque utilizo rutinas por soft para poner los sprites, el volcado de pantalla lo hago con un BitBlt de DX así que las tarjetas buenas lo harán por hardware.
un saludo
No si...SDL (cuando utiliza el backend de DX) tambien hace el blit final a video y normalmente las tarjetas de video se encargan de ello... pero... todas las copias y preparacion del framebuffer cuando estas en modo software..las haces en la memoria RAM y usando CPU...
Estoy comentando un poco los ejemplos de la libreria, cuando lo suba, tambien ira un test de sprites dnd se vera en pruebas si al final...se gana algo...o si no se gana jeje.
Fiero... mas tarde colgare la version modificada a ver si me la puedes ejecutar en el p3 y asi comprobar en practica q mejoro (pq como no tengo ningun p3..todo es teoria de caches jiji).
Ethernet...dime algo... :), en parte te entiendo pero.... anda q no me gusta a mi optimizar las cosas :), es un vicio de la epoca del msdos ;)
Como librería o trozo de código no pongo objección, simplemente no veo con buenos ojos la forma de testearla aunque es visible que es notablemente mas rápida que memcpy con lo cual para lo usos que has comentado es muy válida.
un saludp
Intel Centrino (Pentium M) 1300 Mhz, 512 MB RAM.
PASADA No 1Citar
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 951.58 Mb/s 1775.57 Mb/s 86.59
8 Kb 963.32 Mb/s 1771.54 Mb/s 83.90
16 Kb 975.34 Mb/s 1771.54 Mb/s 81.63
32 Kb 3396.74 Mb/s 3241.70 Mb/s -4.56
64 Kb 987.67 Mb/s 848.26 Mb/s -14.12
128 Kb 987.67 Mb/s 886.78 Mb/s -10.22
256 Kb 986.43 Mb/s 1562.50 Mb/s 58.40
512 Kb 3240.66 Mb/s 1531.37 Mb/s -52.75
1024 Kb 623.80 Mb/s 820.38 Mb/s 31.51
2048 Kb 556.35 Mb/s 811.65 Mb/s 45.89
4096 Kb 522.79 Mb/s 794.30 Mb/s 51.93
8192 Kb 516.64 Mb/s 783.05 Mb/s 51.56
16384 Kb 511.32 Mb/s 790.12 Mb/s 54.53
PASADA No 2Citar
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 940.13 Mb/s 1775.57 Mb/s 88.86
8 Kb 963.32 Mb/s 1771.54 Mb/s 83.90
16 Kb 975.34 Mb/s 1771.54 Mb/s 81.63
32 Kb 3396.74 Mb/s 3112.55 Mb/s -8.37
64 Kb 975.34 Mb/s 750.48 Mb/s -23.05
128 Kb 987.67 Mb/s 866.13 Mb/s -12.31
256 Kb 975.34 Mb/s 1591.14 Mb/s 63.14
512 Kb 3124.00 Mb/s 1558.88 Mb/s -50.10
1024 Kb 624.30 Mb/s 820.38 Mb/s 31.41
2048 Kb 552.41 Mb/s 803.30 Mb/s 45.42
4096 Kb 519.31 Mb/s 794.30 Mb/s 52.95
8192 Kb 513.23 Mb/s 791.03 Mb/s 54.13
16384 Kb 510.98 Mb/s 790.94 Mb/s 54.79
Wenas.
PIV 2600, bus a 800.....1GBram ddr a 400.
Yo he hecho varias pruebas y, a diferencia del resto, me daba los mismos valores o muy parecidos:
Citar
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3583.72 Mb/s 4542.15 Mb/s 26.74
8 Kb 2937.03 Mb/s 3567.35 Mb/s 21.46
16 Kb 1787.76 Mb/s 3338.68 Mb/s 86.75
32 Kb 3567.35 Mb/s 3848.52 Mb/s 7.88
64 Kb 781.25 Mb/s 2770.39 Mb/s 254.61
128 Kb 781.25 Mb/s 2381.86 Mb/s 204.88
256 Kb 757.76 Mb/s 2504.01 Mb/s 230.45
512 Kb 1162.20 Mb/s 1562.00 Mb/s 34.40
1024 Kb 1162.20 Mb/s 1562.00 Mb/s 34.40
2048 Kb 1109.53 Mb/s 1608.25 Mb/s 44.95
4096 Kb 1109.53 Mb/s 1611.57 Mb/s 45.25
8192 Kb 1103.84 Mb/s 1654.58 Mb/s 49.89
16384 Kb 1069.64 Mb/s 1637.53 Mb/s 53.09
PIV 2,8HT FSB800 - 400Mhz DDR (1GB)
Similar a otros.
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3848.52 Mb/s 6250.00 Mb/s 62.40
8 Kb 3848.52 Mb/s 6250.00 Mb/s 62.40
16 Kb 3567.35 Mb/s 5540.78 Mb/s 55.32
32 Kb 6250.00 Mb/s 6250.00 Mb/s 0.00
64 Kb 1220.70 Mb/s 3125.00 Mb/s 156.00
128 Kb 1514.05 Mb/s 2937.03 Mb/s 93.98
256 Kb 1390.12 Mb/s 2780.25 Mb/s 100.00
512 Kb 1135.17 Mb/s 1787.19 Mb/s 57.44
1024 Kb 1135.17 Mb/s 1787.19 Mb/s 57.44
2048 Kb 1133.72 Mb/s 1784.90 Mb/s 57.44
4096 Kb 1133.72 Mb/s 1784.90 Mb/s 57.44
8192 Kb 1127.91 Mb/s 1775.74 Mb/s 57.44
16384 Kb 1090.91 Mb/s 1824.23 Mb/s 67.22
Mi pc (a parte de lo que trae 1GB de ram):
Citar
CPU-Z Report
--------------------------------------------------------------------------------
CPU-Z version 1.26.
CPU(s)
Number of CPUs 2 (1 Physical)
CPU#1 APIC ID = 0
CPU Name Intel Pentium 4
Name Intel Pentium 4
Code Name Prescott
Specification Intel® Pentium® 4 CPU 3.20GHz
Family / Model / Stepping F 3 4
Extended Family / Model 0 0
Package mPGA-478
Core Stepping D0
Technology 0.09 µ
Supported Instructions Sets MMX, SSE, SSE2, SSE3
CPU Clock Speed 3215.5 MHz
Clock multiplier x 16.0
Front Side Bus Frequency 201.0 MHz
Bus Speed 803.9 MHz
L1 Data Cache 16 KBytes, 8-way set associative, 64 Bytes line size
L1 Trace Cache 12 Kµops, 8-way set associative
L2 Cache 1024 KBytes, 8-way set associative, 64 Bytes line size
L2 Speed 3215.5 MHz (Full)
L2 Location On Chip
L2 Data Prefetch Logic yes
L2 Bus Width 256 bits
Y lo que me dio de resultado:
Citar
Running Mem Bandwidth v1.0...
----- Memory bandwidth -----
Memory block Normal memcpy() Optimized memcpy() % Diff
------------ --------------- ------------------ -------
4 Kb 3583.72 Mb/s 7102.27 Mb/s 98.18
8 Kb 4542.15 Mb/s 7167.43 Mb/s 57.80
16 Kb 3567.35 Mb/s 5008.01 Mb/s 40.38
32 Kb 5008.01 Mb/s 5540.78 Mb/s 10.64
64 Kb 2630.47 Mb/s 2381.86 Mb/s -9.45
128 Kb 2630.47 Mb/s 2504.01 Mb/s -4.81
256 Kb 2630.47 Mb/s 2496.01 Mb/s -5.11
512 Kb 2947.17 Mb/s 1923.65 Mb/s -34.73
1024 Kb 648.67 Mb/s 1190.55 Mb/s 83.54
2048 Kb 648.38 Mb/s 1160.71 Mb/s 79.02
4096 Kb 632.09 Mb/s 1160.71 Mb/s 83.63
8192 Kb 653.20 Mb/s 1182.93 Mb/s 81.10
16384 Kb 622.37 Mb/s 1198.13 Mb/s 92.51
Saludos! B)
nsL...al fin un prescott!
luego.... la conclusion es... en P4 de los antiguos (willamette), en P4 de los mas modernos(prescott) y en P3... necesito hacer unas correciones, en el resto, la cosa va bastante mejor.
Ahora estoy con los ejemplos de la libreria CRM32Pro(ya que si no, dificil es q alguien la use), pero en cuanto termine... colgare la modificacion final que ya deberia ir fina en todos los procesadores.
Gracias a todos, un saludo