2012-10-12 63 views
6

No estoy seguro de eso. ¿Puedo escribir un memset grande (por ejemplo, 10 MB) en cuatro núcleos para ganar velocidad con esto?¿Se puede paralelizar el memset en 4 núcleos?

es posible, tales-chip de memoria RAM paralelización en absoluto, y también qué tan grande son los costos de tiempo de disparar otros hilos - que es más de un milisegundo o menos?

+5

tal operación sería probablemente sólo conseguir más lenta si parallelized ello - que tendría múltiples núcleos/CPUs lucha por el acceso al bus de memoria. –

+0

Tal vez usar la instrucción específica para mover más bytes una vez te ayude. la paralelización de uso tendrá ventaja solo cuando los datos se distribuyan en diferentes partes de la memoria. – wbao

+4

El único caso en el que un 'memset' paralelo podría ser más rápido es con bloques de memoria muy grandes en una arquitectura NUMA donde cada núcleo está trabajando en la memoria conectada a su procesador. –

Respuesta

2

Usted está señalando una pregunta correcta, al mismo tiempo, es difícil dar una respuesta sencilla a la misma. Hay varios aspectos involucrados.

  1. Sobrecarga de iniciar nuevos hilos (o escogerlos de algún caché);
  2. Contensión en el bus de memoria.
  3. Los aspectos anteriores difieren y tienen un costo muy diferente para diferentes plataformas.

ordenadores más grandes tienen varios buses de memoria. Los más pequeños tienen solo uno. En un sistema de bus de memoria, esto no tiene sentido. Si su sistema tiene varios buses de memoria (canales) su matriz de datos puede tener una división arbitraria entre los bancos de memoria. Si sucede que toda la matriz se ubica en el mismo banco de memoria, la parralelación será inútil. Averiguar el diseño de su matriz es una sobrecarga de nuevo. En otras palabras, antes de dividir la operación entre núcleos, es necesario determinar si vale la pena hacerlo o no.

respuesta simple es que estas difíciles de predecir los gastos generales más probable es que va a consumir el beneficio y hacer que el resultado global peor.

Al mismo tiempo para un realmente enorme área de memoria en algunas arquitecturas que tiene sentido.

+0

¿Valdría la pena determinar al inicio del programa si vale la pena parrallizar el * memset * y decidir en el tiempo de ejecución? –

+0

Esto tal vez debería ocurrir durante el inicio del sistema operativo. La CPU es igual para todas las aplicaciones que se iniciarán. Por otro lado, la división entre los bancos de memoria será siempre diferente y no será fácil de evaluar. –

+1

En las CPU modernas, un solo núcleo de CPU puede saturar fácilmente todos los buses de memoria al escribir ceros. Así que incluso entonces no tiene sentido la paralelización. – MSalters

Cuestiones relacionadas