Ver Mensaje Individual
  #4  
Antiguo 30-11-2019
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Mientras mas componentes y puntos de "contacto" MENOR sera la velocidad LINEAL del proceso.

Eso es de lo mas obvio y elemental.

Lo que se puede mejorar (y eso es un posible que depende de...) es la ESCALABILIDAD de tipo HORIZONTAL, o sea, la capacidad de distribuir entre multiples procesos/equipos la carga. Pero eso aumenta la complejidad.

Hay carias "capas" y si uno tiene encuenta la arquitectura de los equipos de computo:

https://gist.github.com/jboner/2841832

Cita:
Latency Comparison Numbers (~2012)
----------------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 us
Send 1K bytes over 1 Gbps network 10,000 ns 10 us
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
Disk seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from disk 20,000,000 ns 20,000 us 20 ms 80x memory, 20X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms

Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns

Credit
------
By Jeff Dean: http://research.google.com/people/jeff/
Originally by Peter Norvig: http://norvig.com/21-days.html#answers
O escalado:
Cita:
If L1 access is a second, then:

L1 cache reference : 0:00:01
Branch mispredict : 0:00:10
L2 cache reference : 0:00:14
Mutex lock/unlock : 0:00:50
Main memory reference : 0:03:20
Compress 1K bytes with Zippy : 1:40:00
Send 1K bytes over 1 Gbps network : 5:33:20
Read 4K randomly from SSD : 3 days, 11:20:00
Read 1 MB sequentially from memory : 5 days, 18:53:20
Round trip within same datacenter : 11 days, 13:46:40
Read 1 MB sequentially from SSD : 23 days, 3:33:20
Disk seek : 231 days, 11:33:20
Read 1 MB sequentially from disk : 462 days, 23:06:40
Send packet CA->Netherlands->CA : 3472 days, 5:20:00
Si fuera la MAXIMA velocidad, lo que hay que hacer:
  • Mantener todo lo posible en la CACHE de la CPU, con un mínimo de alocaciones
  • Usar SIMD si es posible (1er nivel de paralelismo)
  • Usar codigo sequencial y predecible (para que el branch predictor de la CPU sea feliz).
  • Procesar en "batch", lo anterior
  • Usar hilos (2d nivel de paralelismo) SI VALE LA PENA
  • Saturar todos los canales (CPU, DISCO, MEMORIA)


Lo cual apunta a un esquema 1/2 niveles maximo. 3 y mas es para explotar el 3/4 nivel de paralelismo (equipos y centros de datos).

Pero si manejas POQUITOS DATOS, como menos de lo que cabe en RAM o disco local, osea, poquito como terabytes? Mejor simple que complejo.
__________________
El malabarista.
Responder Con Cita