Как использовать общие, частные, задачи, одинокие, критические прагмы? Что такое хорошие уловы при их использовании?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать общие, частные, задачи, одинокие, критические прагмы? Что такое хорошие уловы при их использовании?

Сообщение Anonymous »

Я пытался понять #pragma ommp сингл, критический, общий, частный и задача. Я понимаю, что эти прагмы делают в теории, однако я изо всех сил пытаюсь понять, как их реализовать. Может ли кто -нибудь пройти через меня, почему прагмы используются такими, какие они есть, и что может сломаться или вести себя неправильно, если они были удалены или неправильно использованы? Что такое хорошие руководства или Thumbrule при реализации этих прагм?

Код: Выделить всё

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] ?
Проблема 2: Умножение больших целых чисел с задачами

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»