Есть у меня программа, в нераспараллеленой версии работает корректно, всегда, valgrind на неё не ругается, gcc предупреждений не выдаёт. Когда я её распараллеливаю с помощью openmp (только одна функция распараллелена) у неё появляется один забавный глюк. Если я программу запускаю просто так, то она работает; если указываю OMP_NUM_THREADS=2 или 4, то тоже работает без проблем, но если я ставлю OMP_NUM_THREADS=3 или 5, то она может дойти до конца, всё записать и зависнуть, совсем. Проверено на двух машинах: на gcc-4.3.3 и 4.4.3. Пробовал проверить valgrind'ом, но оказалось, что он не поддерживает openmp (можно добавить поддержку, но нужно пересобирать компилятор). Скачал вчера intel thread checker — он тоже ничем не помог — при зависании программы он зависает вместе с ней :) Если запустить thread checker с независающим вариантом, то он выдаёт предупреждения практически на всё (218 штук), при этом от этих предупреждений картина не проясняется, вообще.
Посоветуйте мне что-нибудь для отлова подобных ошибок. Может быть кто-нибудь сталкивался уже с подобным? Могу показать код если кто-то хочет на него смотреть :)