2008-09-17 14 views
6

Estaba revisando el sitio "whatif" de Intel y su compilador de memoria transaccional (cada hilo tiene que realizar confirmaciones atómicas o retrotraer la memoria del sistema, como lo haría una base de datos).¿Alguien ha intentado la memoria transaccional para C++?

Parece una forma prometedora de reemplazar cerraduras y mutex pero no puedo encontrar muchos testimonios. ¿Alguien aquí tiene alguna entrada?

+0

¿Siguen vigentes esta pregunta y sus respuestas? –

+0

@JanusTroelsen echa un vistazo a las implementaciones disponibles en https://en.m.wikipedia.org/wiki/Transactional_memory –

+0

Relacionado: https://www.realworldtech.com/haswell-tm/ para la reseña de algunos de los escritos de David Kanter detalles de cómo se implementa realmente en las CPU de Intel. Y también algunas cosas bonitas sobre la memoria transaccional en general. –

Respuesta

7

No he utilizado compilador de Intel, sin embargo, Herb Sutter tenía algunos comentarios interesantes sobre ella ...

De Sutter Speaks: The Future of Concurrency

¿Usted ve un montón de interés y uso de memoria transaccional, o es el concepto demasiado difícil de entender para la mayoría de los desarrolladores?

Aún no es posible saber quién lo está usando porque aún no se ha lanzado al mercado. Intel tiene un prototipo de compilador de memoria transaccional de software. Pero si la pregunta es "¿es demasiado difícil de usar para los desarrolladores?" la respuesta es que ciertamente espero que no. El punto es que es mucho más fácil que las cerraduras. Es la única cosa importante en el horizonte de la investigación que ofrece la esperanza de reducir en gran medida el uso de cerraduras. Nunca reemplazará completamente los bloqueos, pero es nuestra única gran esperanza reemplazarlos parcialmente.

Existen algunas limitaciones. En particular, algunas E/S no son intrínsecamente transaccionales; no puede tomar un bloque atómico que le pida al usuario su nombre y lea el nombre de la consola, y simplemente aborte y vuelva a intentar el bloque automáticamente si entra en conflicto con otra transacción; el usuario puede notar la diferencia si lo solicita dos veces. La memoria transaccional es genial para cosas que solo están tocando la memoria.

Cada proveedor importante de hardware y software que conozco tiene varias herramientas de memoria transaccional en R & D. Hay conferencias y trabajos académicos sobre respuestas teóricas a preguntas básicas. Todavía no estamos en el escenario del Modelo T donde podemos enviarlo. Probablemente verá prototipos tempranos y limitados en los que no puede hacer memoria transaccional ilimitada, donde solo puede leer y escribir, digamos, 100 ubicaciones de memoria. Sin embargo, eso sigue siendo muy útil para permitir más algoritmos sin bloqueos.

+0

Acerca de dónde es demasiado difícil para los desarrolladores: consulte el documento "¿Es realmente más fácil la programación transaccional?" Por Rossbach et al: http://www.cs.utexas.edu/~rossbach/pubs/wddd09-rossbach.pdf –

-1

En algunos casos puedo ver esto como útil e incluso necesario.

Sin embargo, incluso si el procesador tiene instrucciones especiales que hacen que este proceso sea más fácil, todavía hay una gran sobrecarga en comparación con un mutex o semáforo. Dependiendo de cómo se implemente, también puede afectar el rendimiento en tiempo real (tiene que detener las interrupciones o evitar que escriban en las áreas compartidas).

Mi expectativa es que si esto se implementara, solo se necesitaría para partes de un espacio de memoria dado, por lo que el impacto podría ser limitado.

-Adam

+0

Esto no suena como memoria transaccional ... ¿Cuál es la sobrecarga en comparación con mutexes y semáforos? –

+0

Hay varios lugares donde la sobrecarga es más alta. Un ejemplo obvio es revertir una transacción. También hace que el almacenamiento en caché sea más difícil y lleva más carga, ya que todo tiene que ser inmediato de escritura en memoria. La memoria transaccional es una buena idea para algunas aplicaciones, pero tiene un impacto en el rendimiento del sistema y, por lo tanto, no debe implementarse para cada aplicación y sistema. –

+1

Ah, pero los reinicios múltiples son el caso patológico de las transacciones. ¿Cómo se compara esto con el caso patológico de bloqueos (bloqueo largo, rebote entre cachés)? –

4

Dr. Dobb ha tenido un artículo sobre el concepto del año pasado: Programación transaccional de Calum Subvención - http://www.ddj.com/cpp/202802978

Incluye algunos ejemplos, comparaciones y conclusiones usando su biblioteca de ejemplo.

1

Sun Microsystems ha anunciado que lanzarán un nuevo procesador el próximo año, cuyo nombre en clave es Rock, que tiene soporte de hardware para la memoria transaccional.Tendrá algunas limitaciones, pero es un buen primer paso que debería facilitar a los programadores el reemplazo de bloqueos/muteos con las transacciones y que esperan un buen rendimiento.

Para una charla interesante sobre el tema, dada por Mark Moir, uno de los investigadores de Sun que trabajan en Transactional Memory and Rock, echa un vistazo a este link.

Para obtener más información y anuncios de Sun sobre Rock and Transactional Memory en general, este link.

La obligatoria wikipedia entry :)

Por último, this link, de la Universidad de Wisconsin-Madison, contiene una bibliografía de la mayor parte de la investigación que se ha hecho y se está haciendo al respecto memoria transaccional, ya que está relacionado hardware ni del software relacionado.

Cuestiones relacionadas