Я ожидаю, что два звонка проходят в разной работе. Рассмотрим (например, тривиальный, напечатанный в этом посте, не скомпилированный, а не способ написать это!) Код, подобный
void scale(int n, double *d, double f) {
#pragma omp parallel for
for (int i=0; i<n; i++)
d[i] = d[i] * f;
}
Если вызвать с большим вектором, где n == 10000, вы получите несколько параллелизм и много потоков работает. Если вызывается с n == 3, очевидно, что работа только для трех потоков! Если вы используете #pragma omp parallel for schedule(dynamic)
, вполне возможно, что даже с десятью или двадцатью итерациями один поток выполнит большинство из них.
В заключение: контекст имеет значение.