Usted está señalando una pregunta correcta, al mismo tiempo, es difícil dar una respuesta sencilla a la misma. Hay varios aspectos involucrados.
- Sobrecarga de iniciar nuevos hilos (o escogerlos de algún caché);
- Contensión en el bus de memoria.
- 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.
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. –
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
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. –