Почему TLS / локальное хранилище потока / ключевое слово thread_local медленное? (linux, лязг 10, г cc 9.3.0) - PullRequest
0 голосов
/ 02 мая 2020

От этого страдают и лязг (10), и г cc (9,3). У меня есть несколько глобальных переменных. Я перебираю data_in и пишу в data_out и misc_data (но этот намного меньше). Мое время выполнения увеличивается с 70 мс до 300 +

Выполняя diff на асме, я вижу %fs: и data@TPOFF везде. Что это такое, как работает TLS и почему это так медленно? Я предположил, что TLS была сопоставлена ​​виртуальная память для каждого потока по-разному, поэтому я предположил, что неправильно, и есть еще что-то?

thread_local u8  data_in[1024*1024*100] __attribute__ ((aligned(16)));
thread_local u16 data_out[sizeof(data_in)] __attribute__ ((aligned(16)));
thread_local u8  misc_data[sizeof(data_in)] __attribute__ ((aligned(16)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...