omp simd reduction auf eine array element?



  • Hi, ich möchte so etwas machen wie:

    for(int r=0; r<1234567; r++)
    {
         #pragma omp simd reduction(+:var[r])
        for(int i=0; i<1234567; i++) var[r] + = i;
    }
    

    r in [r] bei reduction geht aber nicht. Kann man das anders machen?
    Z.B. geht noch

    for(int r=0; r<1234567; r++)
    {
        double &varr = var[r];
         #pragma omp simd reduction(+:varr)
        for(int i=0; i<1234567; i++) varr + = i;
    }
    

    Da erstelle ich aber jedesmal eine Variable, bzw eine Verweis darauf. Gibt es da eine bessere Möglichkeit?


  • Mod

    r in [r] bei reduction geht aber nicht.

    Warum nicht?



  • Arcoth schrieb:

    r in [r] bei reduction geht aber nicht.

    Warum nicht?

    Es kompiliert nicht.

    ./red.cpp:18:41: error: expected ‘)’ before ‘[’ token
             #pragma omp simd reduction(+:var[r])
                                             ^
    ./red.cpp:18:45: error: user defined reduction not found for ‘var’
    

  • Mod

    Welcher Compiler ist denn das? Zeig außerdem ein Gesamtbeispiel.



  • #include <omp.h>
    #include <vector>
    
    int main(){
        std::vector<double> var(1234);
    
        for(int r=0; r<1234; r++)
        {
            double &varr = var[r];//<-reduction(+:varr) geht, var[r] nicht
            #pragma omp simd reduction(+:var[r])
            for(int i=0; i<1234; i++) varr += i;
        }
    }
    

    g++ 5.4


Log in to reply