Решение
Ошибка сегментации, так как вы используете private(col)
. Таким образом, col
не копируется из вашей функции и даже не инициализируется. Используйте firstprivate(col)
, чтобы сделать правильную копию col
.
Advise
omp taskgroup
заставит ваш код работать последовательно, так как в конце области видимости существует неявный барьер. Вероятно, лучше этого избежать (например, используя omp taskwait
в конце l oop и немного изменив остальную часть кода). Если вы хотите изменить это, обратите внимание, что i
необходимо копировать, используя firstprivate
вместо shared
.
Более того, избегайте использования глобальных переменных, таких как SOLUTION_EXISTS
, в параллельном коде. Это обычно вызывает много проблем от порочных ошибок до медленных кодов. И если вам все еще нужно / нужно сделать это, переменные, используемые в нескольких потоках , должны быть защищены с использованием, например, директив omp atomic
или omp critical
.