Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Probar Rutina Optimizada...

Iniciado por TheAzazel, 13 de Enero de 2005, 01:36:52 PM

« anterior - próximo »

TheAzazel

 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?

TheAzazel

 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.

Zaelsius

 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

Minos

 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

TheAzazel

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

[Vil]

 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

TheAzazel

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

vincent

 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
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

sés

 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...
Soy indeciso... ¿o no?

sés

 ¿Podrías el código de tu función de copiar memoria?
O mandármela a sessesarrobawanadoopuntoes
Soy indeciso... ¿o no?

senior wapo

 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

averbell

 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



TheAzazel

 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

ShAq

 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

Pogacha

 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!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.