int i;
#pragma omp parallel for
for (i=0; i<N; i++) {
     ....
}

良く見たらこんな感じで i が共有されてる状態になってた。

private を使うか、

int i;
#pragma omp parallel for private (i)
for (i=0; i<N; i++) {
     ....
}

i のスコープをループ内に限定してやれば、

#pragma omp parallel for
for (int i=0; i<N; i++) {
     ....
}

ちゃんと速くなった。