предложение firstprivate в OpenMP не работает - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть цикл, который работает с объектами и функциями класса.Также он вычисляет несколько значений суммы.Я пытался распараллелить его с OpenMP:

    Network  net = *m_pNetwork;
    TrainingSet tran = trainingSet;
    omp_set_num_threads(4);

    #pragma omp parallel for reduction(+:MSE, incorrectEntries) firstprivate(tran, net) lastprivate(net) private(outputIdx)  
    for (int i = 0; i < tran.size(); i++)
    {    
        net->Evaluate(tran[i].m_inputs);
        Backpropagate(tran[i].m_expectedOutputs);

        // Check all outputs from neural network against desired values
        bool resultCorrect = true;
        for (outputIdx = 0; outputIdx < net->m_numOutputs; outputIdx++)
        {
            if (net->m_clampedOutputs[outputIdx] != tran[i].m_expectedOutputs[outputIdx])
            {
                resultCorrect = false;
            }
            MSE += pow((net->m_outputNeurons[outputIdx] - tran[i].m_expectedOutputs[outputIdx]), 2);
        }       
        if (!resultCorrect)
        {
            //#pragma omp atomic
            incorrectEntries++;
        }
    }

    *m_pNetwork = net;

Моя проблема в том, что значения суммы одинаковы для каждой итерации.Так что я не правильно сделал?

...