2010-05-26 2 views
10

Sto facendo una libreria che fa ampio uso di una variabile locale del thread. Puoi indicare alcuni benchmark che mettono alla prova le prestazioni dei diversi modi per ottenere infilare le variabili locali in C++:Conosci qualche test delle prestazioni dei diversi modi per ottenere lo storage locale dei thread in C++?

  • C++ 0x thread_local variabili
  • estensione del compilatore (Gcc __thread, ...)
  • boost :: threads_specific_ptr
  • pthread
  • di Windows
  • ...

Il C++ 0x thread_local funziona molto meglio sui compilatori che lo forniscono?

+0

Non ho effettuato alcun test, ma sarei sorpreso se fossero compilati per cose diverse (con possibile eccezione di pthread <--> Windows), sezione dell'eseguibile contrassegnata come thread locale. –

+0

Qualche conclusione a questa domanda? –

risposta

1

È sempre possibile utilizzare time.h. È tuo amico quando testare roba di prestazioni e nient'altro è disponibile.

+0

Quello che sto cercando è un punto di riferimento dell'uso in diversi contesti. Certo che posso farlo da solo, ma preferirei riutilizzarne uno se esiste. Forse sei interessato a Boost.Chrono :) –

1

Questi sono tipicamente implementati come un offset semplice in una matrice nello spazio di memoria privata del thread. Quindi, l'accesso al filo specifico variabile X, di tipo T,

T y = X; 

traduce approssimativamente,

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

che è troppo semplice aspettarsi un'ampia variazione delle prestazioni tra le implementazioni. Detto questo, se trovi dei benchmark di questo tipo, ti preghiamo di seguire qui.

+1

L'attuale implementazione Boost non è così semplice, poiché la chiave è l'indirizzo della variabile thread_specific_pointer. I compilatori possono ora le chiavi in ​​fase di compilazione e possono apportare alcune ottimizzazioni. Quindi mi aspetto una vasta variazione tra le implementazioni disponibili, che può essere determinante per le librerie che fanno un uso profondo della memoria specifica del thread. –