我有一些代码在一个线程上运行时工作正常。我一直在使用open Mp来parralellize这段代码。问题是当我使用多个线程时,我开始得到损坏的结果。我最好的猜测是我的代码中有某个数据竞争条件,但我找不到它。任何想法或建议表示赞赏。提前谢谢。
omp_set_num_threads( 12 );
double average = 0;
int x;
#pragma omp parallel for schedule(static) reduction(+:average)
for(x = 0; x<K_FOLDS_FOLDS; x++) //NEED TO PARALELLIZE THIS LOOP
{
double result = logistic_regression_test(xtraining[x], xtest[x], ytraining[x], ytest[x]);
average += result;
}
当我注释掉omp_set_num_threads时,代码工作正常。 K_FOLDS_FOLDS = 15并且logistic_Regression_test函数执行一堆东西,然后返回一个double。问题是否可能在该功能内?函数是否每次都在同一个内存位置创建局部变量,即使多个线程正在执行该函数?如果并行调用的每个函数都在更改相同的内存地址,这将解释损坏的数据。