Рассмотрим следующий пример:Могу ли я использовать фильтр нитей для программ OpenMP?
#include <iostream>
int main() {
int i = 0;
#pragma omp parallel
{
#pragma omp critical
{
++i;
}
}
std::cout << i;
}
Сборка с g++ -fopenmp -fsanitize=thread
и работает выходами
ВНИМАНИЕ: ThreadSanitizer: гонки данных (PID = 9576)
Read размером 4 на 0x7ffdc170f600 с помощью резьбы T1:
# 0 main._omp_fn.0 (a.out + 0x000000400d20)
# 1 gomp_thread_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:118 (libgomp.so.1 + 0x00000000f42d)Предыдущая запись размером 4 на 0x7ffdc170f600 с помощью резьбы T2:
# 0 main._omp_fn.0 (a.out + 0x000000400d35)
# 1 gomp_thread_start /build/gcc/src/gcc-5.2.0/libgomp/ team.c: 118 (libgomp.so.1 + 0x00000000f42d)Местоположение представляет собой стек основной нити.
Т1 нить (TID = 9578, бег), созданный в основном потоке:
# 0 pthread_create /build/gcc/src/gcc-5.2.0/libsanitizer/tsan/tsan_interceptors.cc:895 (libtsan.so 0,0 + 0x000000027a37)
# 1 gomp_team_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:796 (libgomp.so.1 + 0x00000000f98f)
# 2 __libc_start_main (libc.so.6 + 0x00000002060f)резьба Т2 (TID = 9579, бег), созданная в основном потоке:
# 0 pthread_create /build/gcc/src/gcc-5.2.0/libsanitizer/tsan/tsan_interceptors.cc:895 (libtsan.so.0 + 0x000000027a37)
# 1 gomp_team_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:796 (libgomp.so.1 + 0x00000000f98f)
# 2 __libc_start_main (libc.so.6 + 0x00000002060f)РЕЗЮМЕ: ThreadSanitizer: гонки данных ??: 0 main._omp_fn.0
насколько я могу видеть, что это ложное срабатывание. Есть ли способ избежать этого?
(что-то работает с лязгом и libomp бы тоже хорошо.)
Вы должны были бы построить библиотеку OpenMP выполнения с Цан, а если вы хотите, чтобы проанализировать код; в противном случае добавить подавление? –
@ KerrekSB Я боялся, что это единственный ответ. Создание современного материала на моей рабочей машине Ubuntu 12.04 и получение его на работу не очень весело. –
@KerrekSB Можете ли вы рассказать о материалах подавления? Нужно ли мне делать это за каждый ложный хит? В нашем производственном коде есть много, и если я должен проверить их все «вручную», то дезинфицирующее средство теряет смысл. –