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

Изчисляването на интеграл и Parallel.For

Равен друг експеримент ефикасността на крайния Parallel.For в сравнение с други методи на паралелизация. За да направите това, се върнете към вече добре познат проблем на изчисляване на определен интеграл обсъдени в предишните глави. "Паралелната алгоритми" Започнахме да проектирате клас NewIntegral. добавят към нея в следващите глави на различни методи за изчисляване на интеграл. Нека добавим още един метод, който се използва за Parallel.For линия паралелно извършване предизвикателство:

Това е най-простият и най-разбираемо решение. Цикълът се състои от един ред. В поредица наречена метод EvalIntegral. което е индексът на цикъла. метод EvalIntegral Образуваната граница интеграция интервал, и се нарича последователен метод, извършва интеграция на предварително определен интервал. Това е кодът за този метод:

Работа с класа NewIntegral. наричаме различни методи за този клас, оценка на времето, необходимо за изчисляване на един или друг метод, извършена в дизайна на интерфейса, представлява традиционен проект Форми на Windows. Няма да се спирам върху описанието му. Следващата фигура показва един проект, който съдържа резултатите от всеки един от тези методи и момента, в който всеки един от методите е похарчил за изчисляването на интеграла:

Знайте, Intuit, лекция, паралелно извършване на електрически вериги

В този експеримент, всички паралелни методи 4-5 пъти по-ефективни от последователни методи. Най-добрият резултат в този момент показа метода с помощта на потоци. Имайте предвид, че когато един сравнително голям брой потоци, този метод работи добре за дълги повторения, тъй като в този случай. Въпреки това, за паралелно извършване на цикъла трябва да се прилага метод Parallel.For като най-проста, интуитивен метод, съответстващ на обичайните за нас оператора за.

Докато линия и Parallel.For

До сега, говорим за циклите на паралелното, ние се разглежда само от вида на цикъла за. По-често срещана форма е формата на цикъл, докато цикъла:

Както паралелизация цикъл, когато заглавието на цикъла не определя броя на повторенията, необходими за завършване на цикъла. Примерът в тази тема се бяхме срещнали, когато погледна броя на градушка. Там е, всъщност, като се има предвид решение и проблемът се появява. Решението се основава на възможността за използване на отчета за почивка в едновременни повторения на цикъла. Изходни условия (б) се проверяват по време на изпълнението на итерация и неговата валидност се извършва абортира завършване на повторения, извършени. В този случай, е възможно да се определи най-малката итерация на индекса, за които условието за добив. Подробни семантика процес прекъсване вече е описан в тази глава. Нека да разгледаме, докато подмяна контур схема паралелна линия Parallel.For на. Това е, както следва:

тялото на цикъла се изпълнява като метод, който се два параметъра - индексът на текущата итерация и опция клас ParallelLoopState:

Остава въпросът да се реши - как да настроите параметър N. Най-често това е известно, най-големият брой повторения. Например, в класическия проблемът за намиране на схемата, като се използва, докато линия. брой повторения не може да надвишава броя на елементите на масива. С други проблеми, които брой е избрана от някои външни предположения, като например проблемът градушка-номерата, ние се интересуват от отговор на определен набор от числа. Например, слабо конвергентни методи за интелигентно определени максимален брой повторения, при което процесът се прекратява. Така че броят N в схемата - номер, който ограничава максималния брой повторения. Нашата схема винаги е възможно да разбера как да се завърши цикълът - или за да се постигне максимално повторения, или за постигане на условия за истина B при итерация. В последния случай известен индекса на минимална повторение, което е състояние става вярно.

Обобщавайки, можем да кажем, че докато вериги също могат да бъдат лесно паралелизирано. Както винаги, основният проблем е да се гарантира независимостта на контур повторения. Отговорността за решаването на този проблем има програмист.

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

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