2011-03-25 20 views
9

¿Alguien tiene alguna buena experiencia con un asignador de memoria sin bloqueo para C/C++?C: biblioteca de asignación de memoria sin bloqueo

He examinado boost y libcds, pero no estoy seguro de qué biblioteca usar.

Antecedentes, he estado investigando una "tabla de bloqueo, sin espera, sin bloqueo, dinámica perfecta hashing, expansible, hash concurrente" * Sí, sé que suena pretencioso, pero eso es lo que se llama.

De todos modos, me estoy preparando para comenzar la prueba de múltiples hilos, y necesito encontrar la mejor manera de configurar la asignación de memoria, cuando se agregan nuevos nodos. (y cuando necesito asignar matrices de punteros)

¿Alguien tiene alguna buena experiencia con la asignación de memoria sin bloqueo?

+1

¿No implica esperar, sin bloqueo, sin bloqueo implica implícito, y sin bloqueo implica concurrente? Un poco redundante ... – GManNickG

+0

Lo sé, pero a mi profesor de investigación le gusta presionar todas las palabras del botón. –

+3

Olvidaste de NUMA de la lista de deseos. Todas las implementaciones de asignadores básicos no funcionan bien en hardware NUMA si también desea concurrencia. –

Respuesta

5

Los bonitos gráficos muestran esta implementación es buena:

http://locklessinc.com/

Es de código abierto GPL 3.0 desde 14 Noviembre 2011 :)

+0

Publicaron allí código de evaluación comparativa del rendimiento, lo cual es bueno, porque quería buscar una mejor herramienta de temporización que la hora estándar.h –

+0

@Feldman, puede ver en las tablas las alternativas: 'tcmalloc' de Google nee' jemalloc' , y el asignador predeterminado de glibc que es increíblemente bueno en estos días. –

+2

Y una vez más, Hoard falla espectacularmente. Lo he recomendado varias veces, pero cada punto de referencia con el que me encuentro colocan 'jemalloc' y' tcmalloc' muy adelante. –

0

Por qué no probar el asignador de tbb? no estoy seguro de qué tan 'libre de bloqueo' es, aunque dudo que encuentre un verdadero asignador libre de bloqueos *, al menos uno que funcione en hilos/núcleos (como tcmalloc)

* Traté de construir uno hace unos meses, pero hacerlo sin cerradura tiene algunos inconvenientes, al menos desde mi punto de vista. No estaba muy interesado en TLS arena como nedmalloc tiene. Terminé con un asignador híbrido, que se bloquea solo cuando un contenedor de fragmentos está vacío.

+0

Hay una versión de Hoard que está completamente libre de bloqueos. –

2

También hay streamflow. No lo he usado yo mismo; Me encontré con esto mientras leía algunas publicaciones.