Я пытаюсь распараллеливание следующую структуру с использованием OpenMP в C++:Как распараллелить эту структуру?
x1,x2,y1,y2,k1,k2 = 0;
a1,a2,b1,b2; //initialized to some value
vec1,vec2;
for (i=0;i<N;++i) {
for (j=0;j<M;++j) {
x2 = j - a2;
y2 = i - b2;
func(x1,y1,x2,y2); // the function changes x1,y1 values
x2 = x1;
y2 = y1;
func2(x1,y1,x2,y2); // the function changes x1,y1 values
x1 += a1;
y1 += b1;
k1 = func3(x1,y1);
vec2[k2] = vec1[k1];
vec2[k2+1] = vec1[k1+1];
k2 += 2;
}
}
Не могли бы вы мне помочь ?. Я очень ценю любую помощь, которую вы можете предоставить.
EDIT:
Последнее решение, которое я попытался это:
x1,x2,y1,y2,k1,k2 = 0;
a1,a2,b1,b2; //initialized to some value
vec1,vec2;
#pragma omp parallel for ordered schedule(dynamic,1) collapse(2)
for (i=0;i<N;++i) {
for (j=0;j<M;++j) {
x2 = j - a2;
y2 = i - b2;
func(x1,y1,x2,y2); // the function changes x1,y1 values
x2 = x1;
y2 = y1;
func2(x1,y1,x2,y2); // the function changes x1,y1 values
#pragma omp critical
{
x1 += a1;
y1 += b1;
}
k1 = func3(x1,y1);
#pragma omp ordered
{
vec2[k2] = vec1[k1];
vec2[k2+1] = vec1[k1+1];
}
#pragma omp atomic
k2 += 2;
}
}
В результате в сбоем сегментации.
Что вы пробовали? какие ошибки вы получили? – Guiroux
Я уже отредактировал ответ, это одно из решений, которые я пробовал до сих пор. Я не уверен, как это сделать, так что это всего лишь пример. – Finfa811
Вы не можете. У вас много зависимостей данных. – knivil