使用openMP可能存在数据争用情况,数据损坏

时间:2015-08-31 05:33:09

标签: c++ multithreading

我有一些代码在一个线程上运行时工作正常。我一直在使用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。问题是否可能在该功能内?函数是否每次都在同一个内存位置创建局部变量,即使多个线程正在执行该函数?如果并行调用的每个函数都在更改相同的内存地址,这将解释损坏的数据。

0 个答案:

没有答案