ПредишенСледващото

OpenMP - библиотека за Fortran език за програмиране, C, C ++, ви позволява да стартирате в паралелни секции на код за многопроцесорни системи или процесори с HyperThreading. Построен в GCC компилатор от версия 4.2. Разработен с активното участие на Intel, за които те много ви благодаря.

Няколко правила за това как да активирате този режим:

Паралелното е възможно да влезе в земята, тоест, определен блок ще се изпълняват по няколко пъти (определени от потребителя) или за цикли. В първия случай, ние не трябва да се спре, можете да прочетете за в OpenMP_talk презентация. Ние засегна само паралелно извършване на цикли.

В този пример, за цикъла ще бъде изпълнена в два потока, така че е невъзможно да се определи предварително последователността, в която променливата и се случва тялото линия. Така, че е необходимо да се отървете от зависимост от предишната стъпка.

Например, ако имате такъв цикъл:

Тя трябва да бъде превърнато в следната форма:

Много често намерих такъв случай:

Частично Аве натрупва стойности и зависи от повторение. Ако стартирате програмата в паралелен режим, можете да получите различни отговори. Както го разбере, факт е, че за да се увеличи стойността на променливата AVE А [Ь]. от паметта на регистър се копира стойност Аве. обобщи, и след това новата стойност се запаметява в запаметяващата част на променливата. В между четене и писане на друг процес да запишете нов обобщи стойност, която след това ще бъдат загубени и не се взема предвид.

Отчитане на такъв случай се нарича намаляване, и е обявена, както следва за променливите:

След това за всяка променлива се създава списък и инициализира локална работа копие според оп - +, *, - (странно и / не) 0, 1, 0, съответно. След това изчисление се комбинира с локалното копие на глобална променлива.

По този начин, предишния пример правилния запис е както следва:

Ако искате да използвате генератор на случайни числа в рамките на цикъла, което се случва паралелно извършване, е необходимо да бъдат много внимателни, защото ако тя се използва за последователност на псевдо-случайни числа, те могат да се припокриват един с друг. Подробностите са написани на OpenMP_talk.

Така че, готови ли сте за паралелното програмния цикъл. Основни правила - да се отърве от зависимостта от итерация, че е желателно да се използва в рамките на контури само местна цикъл променливи, следи отблизо това отнасяне към глобални променливи (разпредели тези случаи като намаление). Бъдете сигурни, да се сравнят резултатите преди и след.

Внимание! Имам затруднения с създаване и изтриване на динамични обекти в рамките на цикъла, така че аз препоръчвам да направите тези сделки извън нея.

Оптимална работа на вашия компютър!

Свързани статии

Подкрепете проекта - споделете линка, благодаря!