Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция по ПП 3.pdf
Скачиваний:
12
Добавлен:
02.06.2015
Размер:
4.72 Mб
Скачать

Примеры

Следующий цикл не может работать правильно, поскольку переменная temp является общей. Эта переменная должна быть индивидуальной.

#pragma omp parallel for for{ (i=0; i < 100; i++) temp = array[i];

} array[i] = do_something(temp);

47

Примеры

// This works. The variable temp is now private

#pragma omp parallel for for (i=0; i < 100; i++)

{

int temp; // variables declared within a parallel construct are, by definition, private

temp = array[i];

array[i] = do_something(temp);

}

48

 

Примеры

// This also works. The variable temp is declared private

#pragma omp parallel for private(temp) for (i=0; i < 100; i++)

{

temp = array[i];

array[i] = do_something(temp);

}

49

ОсновыOpenMP

Каждый раз, когда используется OpenMP для распараллеливания цикла, следует тщательно изучить все обращения к памяти, включая обращения, выполняемые вызываемыми функциями.

50

ОсновыOpenMP

Переменные, объявленные в директиве parallel, определяются как индивидуальные, за исключением того случая, когда они объявляются с описателем static, поскольку статические переменные не размещаются в стек.

51

ОсновыOpenMP

Циклы, суммирующиезначения, широко распространены, и в OpenMP имеется специальное выражение для работы с ними. Рассмотрим следующий цикл, в котором вычисляется суммамассивацелых чисел.

52