2010-05-26 6 views
10

Estoy haciendo una biblioteca que hace un uso extensivo de una variable local de subprocesos. Puedes señalar algunos puntos de referencia que ponen a prueba las actuaciones de las diferentes maneras de conseguir enhebrar las variables locales en C++:¿Conoces alguna prueba de rendimiento de las diferentes formas de obtener almacenamiento local de subprocesos en C++?

  • C++ 0x thread_local las variables
  • extensión del compilador (GCC __thread, ...)
  • impulso :: threads_specific_ptr
  • pthread
  • de Windows
  • ...

¿Funciona C++ 0x thread_local mucho mejor en los compiladores que lo proporcionan?

+0

No he hecho ninguna prueba, pero me sorprendería si se compilan en diferentes cosas (con la posible excepción pthread <--> Windows) es decir, la sección del ejecutable marcada como hilo local. –

+0

¿Alguna conclusión a esta pregunta? –

Respuesta

1

Siempre puede usar time.h. Es tu amigo cuando prueba material de rendimiento y no hay nada más disponible.

+0

Lo que estoy buscando es un punto de referencia del uso en diferentes contextos. Por supuesto que puedo hacerlo yo mismo, pero preferiría reutilizar uno si existe. Quizás esté interesado en Boost.Chrono :) –

1

Normalmente se implementan como un desplazamiento simple en una matriz en el espacio de la memoria privada del subproceso. Por lo tanto, el acceso al hilo específico variable de X, de tipo T,

T y = X; 

podría traducir como,

T y = *(T*)(cur_thread.local_tbl[key_X]); 

que es demasiado simple para esperar una amplia variación en el rendimiento entre las implementaciones. Dicho esto, si encuentra dichos puntos de referencia, siga aquí.

+1

La implementación actual de Boost no es tan simple, ya que la clave es la dirección de la variable thread_specific_pointer. Los compiladores pueden ahora las claves en tiempo de compilación, y pueden hacer algunas optimizaciones. Así que espero una amplia variación entre las implementaciones disponibles, que puede ser determinante para las bibliotecas que hacen un uso profundo del almacenamiento específico de subprocesos. –

Cuestiones relacionadas