Foros - Stratos

Stratos => General => Mensaje iniciado por: TheAzazel en 13 de Enero de 2005, 01:36:52 PM

Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 13 de Enero de 2005, 01:36:52 PM
 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.rar

PD: solo tira en Pentium III y superiores y K7 y superiores... ni Pentium MMX ni K6-2 vale?
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 13 de Enero de 2005, 01:41:42 PM
 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.
Título: Probar Rutina Optimizada...
Publicado por: Zaelsius en 13 de Enero de 2005, 01:53:39 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: Minos en 13 de Enero de 2005, 02:09:28 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 13 de Enero de 2005, 02:18:39 PM
 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 :)
Título: Probar Rutina Optimizada...
Publicado por: [Vil] en 13 de Enero de 2005, 02:21:51 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 13 de Enero de 2005, 02:31:32 PM
 
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 :)
Título: Probar Rutina Optimizada...
Publicado por: vincent en 13 de Enero de 2005, 02:44:59 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: sés en 13 de Enero de 2005, 02:55:47 PM
 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...
Título: Probar Rutina Optimizada...
Publicado por: sés en 13 de Enero de 2005, 03:01:57 PM
 ¿Podrías el código de tu función de copiar memoria?
O mandármela a sessesarrobawanadoopuntoes
Título: Probar Rutina Optimizada...
Publicado por: senior wapo en 13 de Enero de 2005, 03:13:26 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: averbell en 13 de Enero de 2005, 03:14:50 PM
 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


Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 13 de Enero de 2005, 03:18:29 PM
 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.rar

tahora
Título: Probar Rutina Optimizada...
Publicado por: ShAq en 13 de Enero de 2005, 06:00:00 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: Pogacha en 13 de Enero de 2005, 06:22:29 PM
 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!
Título: Probar Rutina Optimizada...
Publicado por: _Grey en 13 de Enero de 2005, 06:34:39 PM
 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.
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 14 de Enero de 2005, 12:33:07 AM
 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 ;) )
Título: Probar Rutina Optimizada...
Publicado por: ZüNdFoLGe en 14 de Enero de 2005, 12:58:52 AM
 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   :(  
Título: Probar Rutina Optimizada...
Publicado por: fiero en 14 de Enero de 2005, 02:44:04 AM
 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
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 14 de Enero de 2005, 03:19:00 AM
 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 :)
Título: Probar Rutina Optimizada...
Publicado por: jazcks en 14 de Enero de 2005, 08:43:14 AM
 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

Título: Probar Rutina Optimizada...
Publicado por: jelorol en 14 de Enero de 2005, 09:09:54 AM
 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
Título: Probar Rutina Optimizada...
Publicado por: fiero en 14 de Enero de 2005, 11:47:21 AM
 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
Título: Probar Rutina Optimizada...
Publicado por: ethernet en 14 de Enero de 2005, 12:13:42 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: fiero en 14 de Enero de 2005, 01:08:20 PM
 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.
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 14 de Enero de 2005, 01:47:31 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: fiero en 14 de Enero de 2005, 02:14:27 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 14 de Enero de 2005, 02:24:40 PM
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 ;)
Título: Probar Rutina Optimizada...
Publicado por: ethernet en 14 de Enero de 2005, 06:07:58 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: rrc2soft en 15 de Enero de 2005, 01:56:06 AM
 Intel Centrino (Pentium M) 1300 Mhz, 512 MB RAM.

PASADA No 1
Citar
  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 2
Citar
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
Título: Probar Rutina Optimizada...
Publicado por: shephiroth en 15 de Enero de 2005, 03:55:32 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: Warchief en 15 de Enero de 2005, 04:46:22 PM
 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
Título: Probar Rutina Optimizada...
Publicado por: nsL en 15 de Enero de 2005, 05:44:12 PM
 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)
Título: Probar Rutina Optimizada...
Publicado por: TheAzazel en 15 de Enero de 2005, 05:59:39 PM
 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