У меня есть функция, которая принимает массив и обновляет массив в для l oop примерно так:
void compute(double values[], int num_points, double ders[]){
for(int i = 0; i < num_points; ++i)
{
double a = values[i* 3 + 0 ];
double b = values[i* 2 + 1 ];
ders[i*4 + 0] = a * b;
ders[i*4 + 1] = a * a;
ders[i*4 + 2] = b * b;
ders[i*4 + 3] = b * a * a;
}
}
Все это хорошо, но затем я обновляю код, чтобы попробовать делать что-то параллельно с OpenMP, как
void compute(double values[], int num_points, double ders[]){
omp_set_dynamic(0);
omp_set_num_threads(2);
#pragma omp parallel for
for(int i = 0; i < num_points; ++i)
{
double a = values[i* 3 + 0 ];
double b = values[i* 2 + 1 ];
ders[i*4 + 0] = a * b;
ders[i*4 + 1] = a * a;
ders[i*4 + 2] = b * b;
ders[i*4 + 3] = b * a * a;
}
}
И теперь я получаю ошибки сегментации.
Мне кажется, что я должен перезаписать какое-то значение в двух потоках - но все в ders и значения индексируются в соответствии с 'i', поэтому кажется, что распараллеливание должно быть тривиальным.
Что я здесь не так делаю?