Проблема в том, что вы добавили зависимости от итерации к итерации с помощью:
x+=1;
y+=1;
Поэтому, поскольку код стоит прямо сейчас, он не распараллеливается.Попытка сделать это приведет к неверным результатам.(как вы, вероятно, видите)
К счастью, в вашем случае вы можете напрямую вычислить их, не вводя эту зависимость:
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction((double)i, (double)N*i + j);
}
}
Теперь вы можете попробовать бросить над этим прагму OpenMP и посмотретьесли это работает:
#pragma omp parallel for
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction((double)i, (double)N*i + j);
}
}