Предотвращение ложных срабатываний с помощью Clang ThreadSanitizer и TBB

Кто-нибудь пробовал ThreadSanitizer clang с Intel Threading Building Blocks (TBB)?

Мой опыт показывает, что вы получите много предупреждений, даже для относительно простых примеров. К сожалению, многие из них кажутся ложными срабатываниями.

В этот ответ на другой вопрос ThreadSanitizer, файлы подавления рекомендуется. Может ли это помочь? Есть ли файл подавления для TBB или какой-либо другой техники?

(Примечание: с Helgrind, это выглядит похоже. Много ложных срабатываний.)

4

Решение

Я только получил это работает, когда я ссылаюсь на файл подавления в TSAN_OPTIONS, По крайней мере для меня, только ссылки во время компиляции с -fsanitize-blacklist не работал с переменной окружения.

Во всяком случае, вот возможный файл подавления

# sanitizer-thread-suppressions.txt
race:^tbb*

… и вот как вы можете использовать его:

TSAN_OPTIONS="suppressions=sanitizer-thread-suppressions.txt" ./my_binary

Если вы увеличите многословие, вы должны увидеть такие результаты:

TSAN_OPTIONS="verbosity=2 suppressions=sanitizer-thread-suppressions.txt" ./my_binary
...
ThreadSanitizer: matched suppression '^tbb*'

Обратите внимание, что шаблон ^tbb* прост, но потенциально опасен, поскольку может скрывать предупреждения в вашем собственном коде. Более реалистичным было бы что-то вроде этого:

race:^__interceptor_memset*
race:^tbb::interface9::internal::adaptive_mode*
race:^tbb::blocked_range*
race:^tbb::interface9::internal::start_for*
race:^tbb::internal::machine_load_store*
race:^tbb::strict_ppl::internal::micro_queue*
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]