Al tratar de aumentar la velocidad de mis aplicaciones en PCs no NUMA/estándar, siempre encontré que el cuello de botella era la llamada a malloc()
porque incluso en máquinas multi-core es compartida/sincronizada entre todos los núcleos.¿La función do malloc/memcpy se ejecuta de forma independiente en NUMA?
que disponer de un PC con una arquitectura NUMA el uso de Linux y C y tengo dos preguntas:
- En una máquina NUMA, ya que cada núcleo está provisto con su propia memoria, a
malloc()
ejecuten de forma independiente en cada núcleo/memoria sin bloquear los otros núcleos? - En estas arquitecturas, ¿cómo se realizan las llamadas a
memcpy()
? ¿Se puede llamar esto independientemente en cada núcleo o, llamándolo una vez que el núcleo bloqueará a los otros? Tal vez estoy equivocado, pero recuerdo que tambiénmemcpy()
tiene el mismo problema quemalloc()
, es decir, cuando un núcleo lo está usando, los demás tienen que esperar.
Hola Brian. Muchas gracias. ¿Conoces alguna buena biblioteca de malloc que sea consciente de NUMA? Busqué en Google y encontré MPC ... ¿es bueno en tu opinión? –
En las raras ocasiones en que escribo algo para que sea compatible con NUMA, asigno directamente mi memoria desde el sistema operativo utilizando VirtualAllocExNuma (Windows) o libnuma (linux). – Brian
Muchas gracias lo intentaré. –