Знаете ли вы о некоторых тестах производительности различных способов получить локальное хранилище потоков в C ++? - PullRequest
10 голосов
/ 26 мая 2010

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

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

Работает ли C ++ 0x thread_local с компиляторами намного лучше?

Ответы [ 2 ]

1 голос
/ 12 июня 2010

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

T y = X;

примерно переводится как,

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

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

1 голос
/ 09 июня 2010

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

...