Студопедия — Int i, j;
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Int i, j;






i =1; j =2;

#pragma omp parallel private(i) firstprivate(j)

{

i =3; // i - private переменная, значение при входе в параллельную область не

// определено, поэтому выполняется инициализация

j =i+j; // j - firstprivate переменная, значение при входе в параллельную область

// определено и равно 2

}

cout<<”i=”<<i<<” j=”<<j<<endl;

………….. // код программы

Переменные i и j при выходе из параллельной области сохранят свои оригинальные значения, т.е. значения до входа в параллельную область i=1, j=2.

Пример:

#pragma omp parallel

{

#pragma omp for lastprivate(i) //значение i не определено при входе,

for (i=0; i<10; i++) // поэтому выполняется инициализация

a[i] = b[i] + 1;

}

a[i-1]=b[i-1];

 

В значение i в конце параллельной области будет равно 10, как в случае последовательного выполнения цикла.

5. default(shared | none) позволяет установить область видимости переменных. По умолчанию устанавливается shared.

Использование default(none) требует, чтобы для каждой переменной в параллельной секции была явно задана область видимости. В директиве parallel может быть определен единственный оператор default.

Переменные могут быть исключены из умалчиваемого определения путем использования директив private, firstprivate, lastprivate, reduction и shared, например:

#pragma omp parallel for default(shared) firstprivate(i) private(x) private(r) lastprivate(i)

6. shared (список) - объявляет перечисленные в списке переменные общими для всех нитей группы. Т.е. каждая общая переменная существует в одном экземпляре для всей программы и доступна для каждой нити под одним и тем же именем.

 

Пример: Каждая нить в параллельной области принимает решение, основываясь на номере нити, какую часть массива x обрабатывать.

#pragma omp parallel shared(x, npoints) private(iam, np, ipoints)

{

iam = omp_get_thread_num();

np = omp_get_num_threads();

ipoints = npoints / np;

subdomain(x, iam, ipoints); // функция обработки массива x

}

7. copyin (список) - выполняет присвоение одного и того же значения переменной, определенной в threadprivate в каждую нить параллельной области. Т.е. для каждой переменной, указанной в операторе copyin, значение переменной из основной нити при воде в параллельную область копируется в приватные копии переменных каждой нити. Ограничения, накладываемые на использование клаузы copyin следующее - переменные, указанные в copyin, должны быть переменными threadprivate.

8. reduction (операция: список) - выполняет редукцию переменных, которые перечислены в списке, с оператором op. Список переменных перечисляется через запятую.

Допустимые операции: +, -, *, /, &, |, ||, &&;

Ограничения, накладываемые на использование директивы reduction:

1. Тип переменных должен быть приемлемым для операции редукции, не разрешены типы указателя и ссылки.

2.Переменные, которые указаны в клаузе reduction, не должны быть константами.

3.Переменные, которые указаны в клаузе reduction, должны быть разделяемыми в общем контексте программы.

Пример: В данном примере каждая нить имеет свою копию переменной редукции: a и y. После окончания работы выполняется операция редуцирования (в данном случае сложение) всех локальных копий переменных.

#pragma omp parallel for reduction(+: a, y)

for (i=0; i<n; i++) {

a += b[i];

y = sum(y, c[i]);

}







Дата добавления: 2015-08-12; просмотров: 546. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

ОПРЕДЕЛЕНИЕ ЦЕНТРА ТЯЖЕСТИ ПЛОСКОЙ ФИГУРЫ Сила, с которой тело притягивается к Земле, называется силой тяжести...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия