Код: Выделить всё
double random_noise();
int operation(double *x, double *y, int n) {
int i;
double w;
double min_y = y[0];
int min_y_index = 0;
#pragma omp parallel for private(i, w) shared(x, y, n, min_y, min_y_index)
for (i = 0; i < n - 1; ++i) {
w = random_noise();
x[i] = (y[i] + y[i+1]) / 2.0 + w;
#pragma omp critical
{
if (y[i+1] < min_y) {
min_y = y[i+1];
min_y_index = i;
}
}
}
#pragma omp single
{
x[n-1] = y[n-1] + random_noise();
}
return min_y_index;
}
- Почему нам нужно критическое для обновления min_y и min_y_index ? x [n-1] ?
Код: Выделить всё
Integer mulInteger(const Integer &a, const Integer &b)
{
Integer result{0};
#pragma omp parallel
{
partial_result = {0}; // assume this is thread-local
#pragma omp single
for (size_t i = 0; i < a.size(); i++)
{
#pragma omp task
{
partial_result = addInteger(mulShiftedInteger(b, a[i], i), partial_result);
}
}
#pragma omp critical
result = addInteger(partial_result, result);
}
return result;
}
Я не понимаю, почему одиночные и задача цели и почему они используются там>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ood-thumbr
Мобильная версия