Pregunta

Yo estaba mirando de Intel "whatif" sitio y sus Transaccional Memoria compilador (cada hilo tiene que hacer atómica comete o reversión de la memoria del sistema, como una Base de datos).

Parece un camino prometedor para reemplazar las cerraduras y las exclusiones mutuas, pero no puedo encontrar muchos testimonios.¿Alguien aquí tiene alguna entrada?

¿Fue útil?

Solución

No he usado Intel compiler, sin embargo, Herb Sutter había algunos comentarios interesantes sobre ella...

De Sutter Habla:El Futuro de la Concurrencia

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

Aún no es posible responder que lo usa porque no ha sido lanzado al mercado todavía.Intel tiene un software transaccional memoria compilador de prototipo.Pero si la pregunta es "¿es muy difícil para los desarrolladores a utilizar?", la respuesta es que, ciertamente, espero que no.El punto es que es la manera más fácil que los bloqueos.Es la única cosa importante en la investigación horizonte que tiene la esperanza de que se reduce enormemente el uso de cerraduras.Nunca reemplazará bloquea completamente, pero es nuestra única esperanza grande para reemplazar parcialmente.

Hay algunas limitaciones.En particular, algunos de e/S es inherentemente no transaccional—usted no puede tomar una atómica bloque que se pide al usuario su nombre y leer el nombre de la consola, y automáticamente se abortar y volver a intentar el bloque en caso de conflicto con otra transacción;el usuario puede notar la diferencia si usted pronto él dos veces.Transaccional de memoria es ideal para la materia que es sólo tocando la memoria, sin embargo.

Cada uno de los principales proveedores de hardware y software sé de múltiples transaccional herramientas de la memoria en R&D.Hay conferencias y ponencias académicas teórica sobre respuestas a preguntas básicas.No estamos en el Modelo T de la etapa, sin embargo, donde podemos enviarlo.Usted probablemente va a ver desde el principio, limitada prototipos donde no se puede hacer sin límites transaccionales de la memoria—donde sólo se puede leer y escribir, digamos, 100 posiciones de memoria.Eso sigue siendo muy útil para habilitar la más libre de bloqueo de los algoritmos, sin embargo.

Otros consejos

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

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

He construido la combinatoria STM de la biblioteca en la parte superior de algunas de programación funcional ideas.No requiere ningún compilador de apoyo (excepto que usa C++17), no trae una nueva sintaxis.En general, se adopta la interfaz de la STM biblioteca de Haskell.

Por lo tanto, mi biblioteca tiene varias propiedades atractivas:

  • Monadically combinatoria.Cada transacción es una de cómputo dentro de la costumbre mónada nombre STML.Usted puede combinar monádico transacciones en las más grandes monádico transacciones.
  • Las transacciones son separados de modelo de datos.Construir el simultáneas de datos con el modelo transaccional variables (TVars) y ejecutar transacciones a través de ella.
  • Hay retry combinador.Esto permite que usted vuelva a ejecutar la transacción.Muy útil para construir, breve y comprensible de las transacciones.
  • Hay diferentes monádico combinadores para expresar computaciones poco.
  • Hay Context.Todos los cálculos se debe ejecutar en un contexto, no en el global de la ejecución.Así que usted puede tener muchos contextos diferentes si necesita varios independiente STM grupos.
  • La aplicación es bastante simple conceptualmente.Al menos, la implementación de referencia en Haskell es así, pero tuve que reinventar varios enfoques para la implementación en C++ debido a la falta de un buen soporte de la Programación Funcional.

La biblioteca muestra muy bonito estabilidad y robustez, incluso si consideramos que es experimental.Por otra parte, mi enfoque abre un montón de posibilidades para mejorar la biblioteca de rendimiento, características, amplitud, etc.

Para demostrar su trabajo, he resuelto el Dining Philosophers tarea.Usted puede encontrar el código en los enlaces de abajo.Ejemplo de transacción:

STML<bool> takeFork(const TVar<Fork>& tFork)
{
    STML<bool> alreadyTaken = withTVar(tFork, isForkTaken);
    STML<Unit> takenByUs    = modifyTVar(tFork, setForkTaken);
    STML<bool> success      = sequence(takenByUs, pure(true));
    STML<bool> fail         = pure(false);
    STML<bool> result       = ifThenElse(alreadyTaken, fail, success);
    return result;
};

ACTUALIZACIÓN Yo he escrito un tutorial, usted lo puede encontrar aquí.

Sun Microsystems ha anunciado que está lanzando un nuevo procesador próximo año, nombre en clave de Rock, que tiene soporte de hardware para transaccional de la memoria.Tendrá algunas limitaciones, pero es un buen primer paso que debería hacer más fácil para los programadores para reemplazar cerraduras/mutexes con las transacciones y esperar un buen rendimiento.

Para una interesante charla sobre el tema, dado por Mark Moir, uno de los investigadores en el Sol de trabajo en Memoria de Transaccional y el Rock, echa un vistazo a este enlace.

Para obtener más información y anuncios de Sol sobre la Roca y Transaccional de la Memoria en general, este enlace.

La obligatoriedad de la entrada de la wikipedia :)

Finalmente, en este enlace, en la Universidad de Wisconsin-Madison, contiene una bibliografía de la mayoría de la investigación que ha sido, y es, que se realiza sobre Transaccional de la Memoria, ya sea de hardware o de software relacionados.

En algunos casos puedo ver esto como ser ú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 semáforo o exclusión mutua.Dependiendo de cómo se implementa también puede tener un impacto rendimiento en tiempo real (tiene que parar de interrupciones, o impedir que la escritura en sus áreas comunes).

Mi expectativa es que si esto se lleva a la práctica, sólo sería necesario para las partes de un determinado espacio de memoria, sin embargo, y por lo que el impacto podría ser limitada.

-Adam

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top