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

Пример

Функцияnum_threads

Явнозадаетколичествопотоков, которыебудутвыполнять параллельнуюобласть

По умолчанию выбирается значение, установленноеспомощьюфункции omp_set_num_threads()

196

Пирмер

Функцияnum_threads

Модифицировавпрограмму,приведенную вышеследующимобразом:

n=omp_get_thread_num();

Присвоение переменной

«n» числапотоков, входящихв

текущуюгруппу потоков

 

#pragma omp parallel num_threads(4), private(n)

Явное заданиепотоков, вданномслучаечетырех,длявыполнения параллельногорегиона

получимвывод:

197

Функциидляработыстаймером

omp_get_wtime — возвращаетв вызвавшемпотоке астрономическое времявсекундах(вещественноечисло двойнойточности — double), прошедшееснекоторого моментав прошлом. Еслинекоторый участок программыокружить вызовамиданной функции,торазность возвращаемых

значенийпокажетвремяработы

 

данногоучастка.

198

 

Функциидляработыстаймером

omp_get_wtick() — возвращаетв вызвавшемпотоке разрешающую способность таймеравсекундах,то естьточность таймера.

199

Примерыивременныехарактеристики

Вычислениечислаπ

С использованием OpenMP

Без использования OpenMP

200

Вычисление числа π

voidexpressPi(){

longlong num_steps=1000000000; doublestep;

clock_tstart,stop; doublex,pi,sum=0.0; inti;

step=1./(double)num_steps; start=clock();

201

Вычисление числа π

#pragmaompparallelforprivate(x) reduction(+:sum)

for(i=0;i<num_steps;i++)

{

x=(i+.5)*step;

sum=sum+4.0/(1.+x*x);

}

pi=sum*step; stop=clock();

Console::WriteLine("ВеличиначислаПи:"+pi+ "\n");

Console::WriteLine("Времявычислений:"+ ((double)(stopstart)/1000.0)+"сек.\n");

}

202

Инструментарийдля OpenMP

203

Инструментарийдля OpenMP

ВключениеподдержкиOpenMP 2.0в

средеVisual Studio 2010

Открыть, еслинеоткрыто, окно «Обозревательрешений»,выбраввменю «Вид»пункт«Обозревательрешений».

204

Инструментарийдля OpenMP

Вокне«Обозревательрешений»щелкнуть правойкнопкоймышипоназванию проектаивыбратьпункт«Свойства».

205

Инструментарийдля OpenMP

206

Инструментарийдля OpenMP

Вверхнейчасти«Страницысвойств» выбратьдлякакой конфигурациии платформыизменятьсвойства.

207

Инструментарийдля OpenMP

Далеевыбратьвдеревесвойств, находящемсяслевойстороны «Страницы свойств»,«Свойстваконфигурации»- «C/C++»- «Язык»ивправомокне установить свойство«ПоддержкаOpen MP»взначение«Да».

208

Инструментарийдля OpenMP

Далеевыбратьвдеревесвойств, находящемсяслевойстороны «Страницы свойств»,«Свойстваконфигурации»- «C/C++»- «Язык»ивправомокне установить свойство«ПоддержкаOpen MP»взначение«Да».

209

Инструментарийдля OpenMP

210

Инструментарийдля OpenMP

#include <omp.h>

Use Intel C++

211

Инструментарийдля OpenMP

Теперьприкомпиляциипроекта выбираемтуконфигурацию,настройки которой необходимы.Для смены конфигурациивыбратьменю «Построение»пункт«Диспетчер конфигурации».

212

Инструментарийдля OpenMP

213

Инструментарийдля OpenMP

Вверхнейчастиокна«Диспетчер конфигураций»выбратьактивную конфигурациюиплатформудлявсех проектов решения.

214

Инструментарийдля OpenMP

илинастроить индивидуальнодля каждого проектаврешении.

215

Инструментарийдля OpenMP

Длятого, чтобыпрагмынебыли проигнорированыпредпроцессором, необходимоподключитьбиблиотеку OpenMP «omp.h»следующейстрокой кода:

#include <omp.h>

216

Инструментарийдля OpenMP

Еслибиблиотеканеподключена,тоне смотря нато,чтовсвойствахпроекта включенаподдержкаOpenMP,прагмы будутпроигнорированыкомпилятором и кодбудетсгенерированкак последовательный.

217

Инструментарийдля OpenMP

Условная компиляция

Стандарт описывает набор директив

(directive), предложений (clause), функций и глобальных переменных библиотеки

OpenMP.

218

Инструментарийдля OpenMP

Условная компиляция

Для определения поддержки и версии OpenMP предпроцессором в библиотеке определен специальный макрос «_OPENMP». Он представляет собой 6- разрядное десятичноечисло, старшие цифры которого год, а младшие месяц релиза данной версии. Например, для

OpenMP2.0 «_OPENMP» примет значение «200203».

219