Определяемое пользователем уменьшение вектора различного размера
Я пытаюсь определить собственное сокращение для векторов комплекса <float>, следуяэтот ответ на вопросСокращение по массиву в OpenMP.
Но размер моих векторов не фиксирован во время компиляции, поэтому я не уверен, как определить инициализатор для вектора вdeclare reduction
Прагма. То есть я не могу просто иметь
initializer( omp_priv=TComplexVector(10,0) )
Но инициализатор нужен для векторов.
Как я могу передать предложению инициализатора размер вектора, который мне нужен во время выполнения? То, что у меня есть, ниже:
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];
}
}
}