Знаете ли вы о некоторых тестах производительности разных способов получить локальное хранилище потоков на С++?

Я делаю библиотеку, которая широко использует локальную переменную потока. Можете ли вы указать на некоторые тесты, которые проверяют возможности различных способов получения локальных переменных потока в С++:

  • С++ 0x thread_local variables
  • расширение компилятора (Gcc __thread,...)
  • boost:: threads_specific_ptr
  • потоковой
  • для Windows
  • ...

Отличается ли С++ 0x thread_local намного лучше на компиляторах, предоставляющих его?

Ответ 1

Вы всегда можете использовать time.h. Его друг при тестировании производительности и ничего больше не доступен.

Ответ 2

Обычно они реализуются как простое смещение в массиве в потоке частной памяти. Таким образом, доступ к переменной потока X, типа T,

T y = X;

грубо переводит,

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

что слишком просто, чтобы ожидать широкого изменения производительности между реализациями. Тем не менее, если вы найдете какие-то такие тесты, пожалуйста, проследите здесь.