User Defined Reduction bei Vektoren unterschiedlicher Größe

Ich versuche, meine eigene Reduktion für Vektoren des komplexen <float> zu definieren, indem ich @ foldiese Antwort zur FrageArray in OpenMP reduzieren.

Aber die Größe meiner Vektoren ist zur Kompilierungszeit nicht festgelegt, daher weiß ich nicht, wie der Initialisierer für den Vektor im @ definiert wirdeclare reduction Pragma. Das heißt, ich kann nicht nur @ hab

initializer( omp_priv=TComplexVector(10,0) )

Aber der Initialisierer wird für Vektoren benötigt.

Wie kann ich der Initialisierungsklausel die Größe des Vektors übergeben, den ich zur Laufzeit benötige? Was ich bisher habe ist unten:

typedef std::vector<complex<float>> TCmplxVec;

void ComplexAdd(TCmplxVec & x,TCmplxVec & y){
  for (int i=0;i<x.size();i++) 
  {
      x.real()+= y.real();
      //... same for imaginary part and other operations
  }

}

#pragma omp declare reduction(AddCmplx: TCmplxVec: \
ComplexAdd(&omp_out, &omp_in)) initializer( \
omp_priv={TCmplxVec(**here I want a variable length**,0} )

void DoSomeOperation ()
{
    //TCmplxVec vec is empty and anotherVec not

    //so each thread runs the inner loop serially
  #pragma omp parallel for reduction(AddCmplx: vec) 
  for ( n=0 ; n<10 ; ++n )
    {
      for (m=0; m<=someLength; ++m){
        vec[m] += anotherVec[m+someOffset dependend on n and else];
      }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage