Я вижу совершенно другое время выполнения, когда беру цикл for в g ++ 4.7.0
и используя
std::vector<double> x;
std::vector<double> y;
std::vector<double> prod;
for (int i = 0; i < 5000000; i++)
{
double r1 = ((double)rand() / double(RAND_MAX)) * 5;
double r2 = ((double)rand() / double(RAND_MAX)) * 5;
x.push_back(r1);
y.push_back(r2);
}
int sz = x.size();
#pragma omp parallel for
for (int i = 0; i< sz; i++)
prod[i] = x[i] * y[i];
серийный код (без openmp
) выполняется за 79 мс.
код «параллельно для» выполняется за 29 мс.
Если я опускаю for
и использую #pragma omp parallel
, время выполнения снимает до 179 мс,
который медленнее, чем последовательный код. (машина имеет hw параллелизма 8)
код ссылки на libgomp