Я написал последовательный код для решения игры «Футошики». Сейчас я пытаюсь распараллелить его с задачами, но натолкнулся на ошибку, которую не могу исправить. Код запускается правильно, когда я запускаю вызовы задачи. Поэтому я думаю, что ошибка связана именно с этим разделом, но я не могу ее выяснить.
Ниже фрагмент кода является частью функцииimum_remaining_max_effect и выполняет рекурсивный вызывает до тех пор, пока не заполнит каждый индекс матрицы. Затем он вызывает «matrixCallback», как я храню матрицу решения. Переменная count - это количество слоев рекурсивных задач, которые я создаю, поэтому при значении 0 код выполняется последовательно. Когда я последовательно запускаю код, он работает нормально и дает правильный вывод, но когда я увеличиваю счетчик и, следовательно, распараллеливаю его, матрица решения имеет некоторые незаполненные значения. Я не могу понять это. Пожалуйста, помогите. Я также могу опубликовать весь код, если требуется, но его около 400 строк, поэтому расшифровать его будет сложно.
if(!anyEmptyDomain){
if(count)
{
int newCount=count-1;
int newDomainRange=domainRange;
int newEmptyGridCount=emptyGridCount;
std::vector<std::vector< Grid >> newGridMap=gridMap;
std::vector<std::pair<int,int>> newEmptyGrids=emptyGrids;
bool newAnyEmptyDomain=anyEmptyDomain;
#pragma omp task firstprivate(newCount,newDomainRange,newEmptyGridCount,newGridMap,newEmptyGrids,newAnyEmptyDomain,matrix)
{
if(minimum_remaining_max_effect(newCount, newDomainRange, newEmptyGridCount, newGridMap, newEmptyGrids, newAnyEmptyDomain,matrix))
{
if(!printed)
matrixCallback(matrix,newDomainRange,newEmptyGridCount,newGridMap,newEmptyGrids,newAnyEmptyDomain);
}
}
}
else{
if(minimum_remaining_max_effect(count, domainRange, emptyGridCount, gridMap, emptyGrids, anyEmptyDomain,matrix ))
{
if(!printed){
std::cout<<"BROO";
matrixCallback(matrix,domainRange,emptyGridCount,gridMap,emptyGrids,anyEmptyDomain);
}
return true;
}
}