¬икористанн€ функц—÷онального п—÷дходу при програмуванн—÷ розпод—÷лених задач дл€ кластеру на приклад—÷ т

курсова€ работа: »нформатика, программирование

ƒокументы: [1]   Word-212681.doc —траницы: Ќазад 1 ¬перед

 и—„вський нац—÷ональний ун—÷верситет —÷мен—÷ “араса Ўевченка

–ад—÷оф—÷зичний факультет

 афедра комптјўютерно—„ —÷нженер—÷—„










¬» ќ–»—“јЌЌя ‘”Ќ ÷–∆ќЌјЋ№Ќќ√ќ ѕ–∆ƒ’ќƒ” ѕ–» ѕ–ќ√–јћ”¬јЌЌ–∆ –ќ«ѕќƒ–∆Ћ≈Ќ»’ «јƒј„ ƒЋя  Ћј—“≈–” Ќј ѕ–» Ћјƒ–∆ “≈’ЌќЋќ√–∆–« DRYADLINQ














 и—„в 2010

–еферат


¬ипускна квал—÷ф—÷кац—÷йна робота бакалавра ____ с., 10 рис., 4 додатки, 17 джерел.

–еал—÷зовано обчислювальну задачу дл€ кластера при використанн—÷ функц—÷онального п—÷дходу у програмуванн—÷, а саме технолог—÷—„ DryadLINQ. ѕопередньо встановлено на вс—÷х вузлах кластера та на кл—÷—‘нтськ—÷й машин—÷ DryadLinq Pack. ѕродемонстровано роботу DryadLINQ та описан—÷ —„—„ основн—÷ частини. “акож проанал—÷зовано ефективн—÷сть роботи DryadLINQ на р—÷зн—÷й к—÷лькост—÷ вузл—÷в кластера дл€ обчисленн€ одно—„ —÷ то—„ ж задач—÷. ¬ €кост—÷ прикладу обчислювально—„ задач—÷ обрано обрахунок —÷нтегралу методом ћонте- арло.

 лючов—÷ слова: WINDOWS HPC, LINQ, DRYADLINQ, LINQTOOBJECT, MPP, ‘”Ќ ÷–∆ќЌјЋ№Ќ≈ ѕ–ќ√–јћ”¬јЌЌя, –∆ћѕ≈–ј“»¬Ќ≈ ѕ–ќ√–јћ”¬јЌЌя, ћ≈Ќ≈ƒ∆≈– –ќЅ–∆“.

«м—÷ст


¬ступ

1. ќгл€д л—÷тератури

1.1 ѕоширенн€ систем дл€ високопродуктивних обчислень

1.2 ‘ункц—÷ональне програмуванн€

1.3 Microsoft HPC 2008

1.4 “ехнолог—÷€ Dryad та DryadLinq €к розширенн€ LinqToObject

2. –еал—÷зац—÷—„ розпод—÷лено—„ програми з використанн€м DryadLINQ

2.1 —труктура та налаштуванн€ кластерно—„ системи

2.2 ‘айли конф—÷гурац—÷—„

2.3 ѕредставленн€ колекц—÷й даних

2.4 ‘айл метаданих

2.5 Ѕ—÷бл—÷отеки LinqToDryad. dll та System. Threading. dll

2.6 ¬иконанн€ роботи Dryad

¬исновки

ѕерел—÷к посилань

ƒодатки

¬ступ


ѕри програмуванн—÷ задач дл€ паралельних обчислювальних систем виникають наступн—÷ складност—÷ у розробника: необх—÷дно програму розбивати на потоки, контролювати —„х виконанн€ та забезпечувати обм—÷н м—÷ж ними. ѕри цьому код програми ста—‘ гром—÷здким та т€жким дл€ читанн€. ¬ цих умовах виника—‘ необх—÷дн—÷сть просто—„ та ефективно—„ методики програмуванн€ задач дл€ паралельних обчислювальних систем.  онцепц—÷€ функц—÷онального програмуванн€ нада—‘ можлив—÷сть позбавитис€ в—÷д вищезгаданих проблем. ѕри використанн—÷ —÷нструментальних засоб—÷в €к—÷ будуть виконувати вс—÷ д—÷—„ по розпаралеленню програми, програмуванн€ дл€ паралельних обчислювальних систем ста—‘ звичайною задачею функц—÷онального програмуванн€. ќтже розробнику непотр—÷бно замислюватис€ над особлив—÷стю паралельних обчислювальних систем, а саме над розпаралеленн€м створювано—„ програми. як насл—÷док —‘ по€ва таких технолог—÷й €к Dryad, Hadoop, MapReduce та —÷нш—÷. ¬ дан—÷й робот—÷ досл—÷джу—‘тьс€ застосуванн€ платформи Dryad та технолог—÷—„ DryadLINQ, побудован—÷й на баз—÷ мови —÷нтегрованих запит—÷в LINQ в мов—÷ програмуванн€ C# дл€ кластерних систем Microsoft Windows HPC.

1. ќгл€д л—÷тератури


1.1 ѕоширенн€ систем дл€ високопродуктивних обчислень


–одоначальниками машин дл€ високопродуктивних обчислень були системи, що використовували спец—÷альн—÷ процесори, складн—÷ комун—÷кац—÷йн—÷ р—÷шенн€, що волод—÷ли великим енергоспоживанн€м —÷ варт—÷стю. ¬арт—÷сть обумовлювалась ун—÷кальн—÷стю встановлюваного обладнанн€, в першу чергу процесор—÷в.

« переходом на арх—÷тектуру MPP (Massive Parallel Processing) - масову паралельну обробку, де використовувалос€ велике число сер—÷йно випущених процесор—÷в, вдалос€ пом—÷тно знизити витрати на створенн€ суперкомп'ютер—÷в, оск—÷льки не використовувалис€ вже розроблен—÷ технолог—÷—„. ќсновна варт—÷сть —÷ складн—÷сть тепер пол€гала у використанн—÷ спец—÷альних комун—÷кац—÷йних р—÷шень дл€ зв'€зку цих процесор—÷в.

"Ѕеовульф", створений в 94-му роц—÷ - обчислювальний комплекс (кластер) на основ—÷ звичайних комп'ютер—÷в, об'—‘днаних мережею, з поширеною та доступною операц—÷йною системою (зазвичай Linux). ѕереваги очевидн—÷ - вс—÷ компоненти легко можна купити —÷ з—÷брати, в—÷дсутн—÷сть спец—÷ал—÷зованих р—÷шень —÷ компонент значно знизило витрати. ћ—÷нусом —‘ б—÷льш низька швидк—÷сть обм—÷ну даними м—÷ж вузлами, з огл€ду на використанн€ звичайно—„ комп'ютерно—„ мереж—÷.

–еал—÷зац—÷€ проекту Ѕеовульф призвела до виникненн€ велико—„ к—÷лькост—÷ посл—÷довник—÷в, бо вона заклала основу дл€ значно б—÷льш низьких за варт—÷стю високопродуктивних обчислень. ѕрикладом може стати система јвалон, €ка була з—÷брана в 98-му роц—÷ —÷ м—÷стила до 140 процесор—÷в Alpha 21164A 533ћ√ц. …ого варт—÷сть становила приблизно 313 тис€ч долар—÷в, а продуктивн—÷сть була на р—÷вн—÷ суперкомп'ютера з 64-ма процесорами SGI Origon 2000, чи€ варт—÷сть була близько 1,8 м—÷льйон—÷в долар—÷в. ¬ 2000 роц—÷ в top500 к—÷льк—÷сть кластерних р—÷шень становило 2. 2%, в 2004 - 57,8%, а в 2009 - 81,2%. ƒинам—÷ка розвитку представлена на –ис. 1. 1:


–ис. 1.1. ƒинам—÷ка розвитку супер ≈ќћ.


ѕ—÷д кластером тут розум—÷—‘тьс€ обчислювальна система на арх—÷тектур—÷ MPP (Massive Parallel Processing) де засобами звтјў€зку м—÷ж вузлами використову—‘тьс€ Ethernet, Myrinet, InfiniBand або —÷ншими в—÷дносно недорогими мережами. як насл—÷док - пов—÷льний обм—÷н м—÷ж вузлами кластера. “ому в числ—÷ найважлив—÷ших роб—÷т —‘ розвиток паралельних обчислювальних технолог—÷й, а саме:

1. –озпаралелюванн€ обчислень, створенн€ нових метод—÷в та алгоритм—÷в, ор—÷—‘нтованих на ефективне використанн€ в багатопроцесорних системах, а також модерн—÷зац—÷€ —÷снуючих з реал—÷зац—÷—‘ю можливостей широкого паралел—÷зму.

2. –озробка систем паралельного програмуванн€, мовних та —÷нших засоб—÷в —÷з збереженн€м наступност—÷ прикладних програмних комплекс—÷в по в—÷дношенню до апаратних побудов розпод—÷лено—„ обчислювально—„ мереж—÷.

3. —творенн€ програмного забезпеченн€ функц—÷онуванн€ багатопроцесорних систем, у тому числ—÷ комун—÷кац—÷йно—„ мереж—÷ обчислювальних модул—÷в (ќћ) —÷ м—÷ж ќћ —÷ зовн—÷шн—÷ми абонентами.

4. –озробка арх—÷тектур багатопроцесорних обчислювальних систем. –∆нженерне конструюванн€ ќћ та обчислювального пол€ в ц—÷лому.

5. ѕобудова —÷ зад—÷€нн€ розпод—÷лених обчислювальних та —÷нформац—÷йних систем (кластер—÷в робочих станц—÷й, багатомашинних комплекс—÷в та —÷н.)


1.2 ‘ункц—÷ональне програмуванн€


‘ункц—÷ональне програмуванн€ (дал—÷ ‘ѕ) - наступний етап п—÷сл€ —÷мперативного програмуванн€ (–∆ѕ).  од написаний за допомогою ‘ѕ на в—÷дм—÷ну в—÷д –∆ѕ може звестис€ до дек—÷лькох р€дк—÷в, в—÷дпов—÷дно в—÷н легше чита—‘тьс€ та в—÷длагоджу—‘тьс€. “обто тут основний акцент робитьс€ на функц—÷—„. ‘ункц—÷ональне обчисленн€ - функц—÷€ (або €кщо бути точн—÷ше - "чиста функц—÷€", pure function) - прийма—‘ вх—÷дн—÷ аргументи на вход—÷, робить певн—÷ обчисленн€ —÷ поверта—‘ де€кий результат. ѕри цьому функц—÷€ не створю—‘ н—÷€ких поб—÷чних ефект—÷в. ѕ—÷д поб—÷чними ефектами розум—÷ють:

  • «м—÷нюванн€ глобальних (статичн—÷ в терм—÷нах C #) зм—÷нних або читати зм—÷нюван—÷ дан—÷.
  • ¬иклик —÷нших функц—÷—„ €к—÷ можуть створити поб—÷чний ефект або повернути глобальн—÷ зм—÷нн—÷ дан—÷.
  • «айматис€ будь-€ким введенн€м / виводом
  • ѕосилати або приймати будь-€к—÷ пов—÷домленн€.

“ри останн—÷ в загальному це зм—÷на стану або читанн€ зм—÷нюваного стану за допомогою виклику. «агалом, функц—÷€ не ма—‘ право робити н—÷чого, що могло б зм—÷нити стан, —÷ покладатис€ на зм—÷нн—÷ (ззовн—÷) дан—÷. ¬се, що робить функц—÷€ - це обчисленн€ —÷ видача результату. ” такого п—÷дходу —‘ одна особлив—÷сть: функц—÷€ завжди поверта—‘ один —÷ той же результат дл€ одних —÷ тих же аргумент—÷в. ÷е нада—‘ так—÷ переваги:

  • Ћегк—÷сть налагодженн€, адже функц—÷€ залежить лише в—÷д параметр—÷в. ¬есь стан при функц—÷ональних обчисленн€х розташову—‘тьс€ в стец—÷, так що його легко анал—÷зувати, —÷ нав—÷ть можна роботи покрокове скасуванн€ —÷ повтор д—÷й.
  • Ћегк—÷сть розпаралелюванн€. ƒва виклики одн—÷—‘—„ —÷ т—÷—‘—„ ж функц—÷—„ абсолютно незалежн—÷ —÷ можуть виконуватис€ паралельно.  р—÷м того, потенц—÷йно виконанн€ функц—÷—„ може бути автоматично распаралелено комп—÷л€тором.
  • ¬исока повторна використовуваних функц—÷й. “обто функц—÷ю легше використовувати в —÷ншому м—÷i—÷ програми (або в —÷нш—÷й програм—÷).

‘актично, в—÷дсутн—÷сть поб—÷чних ефект—÷в залежить не т—÷льки в—÷д функц—÷—„, а й в—÷д вираз—÷в що м—÷ст€тьс€ в н—÷й, тобто в них також потр—÷бно не допускати поб—÷чних ефект—÷в. ¬ C# ‘ѕ реал—÷зу—‘тьс€ завд€ки LINQ або, €к ще можна назвати, мова —÷нтегрованих запит—÷в. ўе одним з прийом—÷в ‘ѕ (у пор—÷вн€нн—÷ з –∆ѕ) —‘ прийом передач—÷ невеликого, так би мовити, уточнюючого, виразу в €кусь ун—÷версальну функц—÷ю. C# (—÷ б—÷льш—÷сть попул€рних.net-мов) не ма—‘ конструкц—÷й мови, що дозвол€ють в—÷докремити чистий функц—÷ональний код в—÷д —÷мперативного або зм—÷шаного.

Ќав—÷ть стар—÷ —÷мперативн—÷ мови, наприклад, C —÷ ѕаскаль, п—÷дтримують базову —÷дею ‘ѕ - можлив—÷сть ман—÷пул€ц—÷—„ функц—÷€ми. ќднак у б—÷льшост—÷ сучасних —÷мперативних мовах реал—÷зована ц€ можлив—÷сть також погано. «азвичай все обмежу—‘тьс€ можлив—÷стю передати вказ—÷вник на т—÷ло функц—÷—„. —каж—÷мо, в — —÷ C++ —÷м'€ глобально—„ функц—÷—„ —÷нтерпрету—‘тьс€ €к вказ—÷вник на не—„.

‘ункц—÷ональн—÷ мови (‘ћ) розвивають цю —÷дею, звод€чи —„—„ у принцип - функц—÷€ —‘ в програм—÷ таким же повноц—÷нним об'—‘ктом, €к —÷ прим—÷рник будь-€кого —÷ншого типу (наприклад, екземпл€р р€дка). –«—„ можна використовувати €к звичайний обтјў—‘кт. Ќаприклад, в — ми можемо передати вказ—÷вник на функц—÷ю —÷ншо—„ функц—÷—„, але скласти (п—÷д час виконанн€) з двох функц—÷й третю ми не в силах. Ќеможливо в — —÷ оголосити функц—÷ю по м—÷iю. ” ‘ћ ж все це можливо. ћан—÷пулювати функц—÷€ми в ‘ћ дуже просто —÷ зручно. ƒл€ цього необх—÷дний функц—÷ональний тип. «азвичай в—÷н буде приймати вигл€д string Function (int x, string y);

проте €кщо зам—÷нити перечисленн€ на "*", а дл€ опису поверненого значенн€ функц—÷—„ використати "->", тод—÷ вищерозгл€нуту ф-—÷ю можна описати: int * string - > string або int - > string - > string, отже функц—÷€ €ка отриму—‘ int —÷ поверта—‘ функц—÷ю, €ка отриму—‘ string та поверта—‘ string. ƒаний вираз назива—‘тьс€ "л€мбда виразом", та —÷сну—‘ ц—÷ла теор—÷€ що об“—рунтову—‘ це.

ƒругою особлив—÷стю ‘ѕ у пор—÷вн€нн—÷ з –∆ѕ —‘ робота з—÷ списками. ” ‘ѕ список зазвичай вида—‘тьс€ за допомогою структури даних, €к однонаправлений звтјў€зний список (дал—÷ просто список). ќсоблив—÷стю ц—÷—‘—„ структури даних —‘ те, що вона дозвол€—‘ створювати незм—÷нн—÷ списки. ѕри цьому список ма—‘ р€д обмежень:

  • ¬—÷н допуска—‘ додаванн€ елемент—÷в т—÷льки в початок списку.
  • ¬идаленн€ елемент—÷в неможливо (але, €к —÷ будь-€кий —÷нший об'—‘кт у.net, елементи зв—÷льн€ютьс€ автоматично, €кщо на них нема—‘ —÷нших посилань).
  • ƒл€ збер—÷ганн€ кожного елемента створю—‘тьс€ окремий об'—‘кт.
  • ƒоступ за —÷ндексом елемента можливий т—÷льки перебором.

ƒан—÷ обмеженн€ робл€ть списки неефективними, €кщо —„х використовують в —÷мперативн—÷й манер—÷, але зручними —÷ ефективними при програмуванн—÷ в функц—÷ональному стил—÷. Ќа жаль, в.net нема—‘ реал—÷зац—÷—„ однонаправленого пов'€заного списку (клас LinkedList <Of> —‘ реал—÷зац—÷—‘ю двонаправленого пов'€заного списку). «астосуванн€ списк—÷в у ‘ѕ виправдане ще й тим, що в основному списки реал—÷зуютьс€ в них у вигл€д—÷ алгебра—„чних тип—÷в даних. ÷е дозвол€—‘ зд—÷йснювати розб—÷р списк—÷в з застосуванн€м з—÷ставленн€ з—÷ зразком. Ќа жаль, поки нема—‘ н—÷ одно—„ —÷мперативно—„ мови програмуванн€, що волод—÷—‘ под—÷бною можлив—÷стю, так що це перевага поки не —‘ доступною дл€ тих, хто з тих чи —÷нших причин не хоче скористатис€ функц—÷ональною мовою програмуванн€ дл€ реал—÷зац—÷—„ сво—„х завдань.

–∆мперативний код (–∆ ) - обробка посл—÷довностей (списк—÷в) €к посл—÷довн—÷сть перетворень, €к це прийн€то в ‘ѕ, тобто –∆  сукупн—÷сть цикл—÷в, та вс€ обробка посл—÷довност—÷ це вм—÷сти цих цикл—÷в. ” ‘ѕ обробка списк—÷в розбива—‘тьс€ на к—÷лька простих перетворень, €к—÷ можна виконати посл—÷довно. “ак €к на кожн—÷й стад—÷—„ обробки виходить (фактично) нова посл—÷довн—÷сть, налагодженн€ такого коду ста—‘ вельми простим завданн€м у пор—÷вн€нн—÷ з –∆ .  р—÷м того, читати такий код значно прост—÷ше.

Ќайчаст—÷ше у ‘ѕ використовуютьс€ наступн—÷ функц—÷—„ роботи з—÷ списками: Fold - згортка (тобто обчисленн€ за списком де€кого значенн€), Map - в—÷дображенн€ одного списку в —÷нший з використанн€м функц—÷—„ перетворенн€ елемент—÷в —÷ Filter - ф—÷льтрац—÷€ списку. “обто вс—÷ ц—÷ функц—÷—„ —‘ аналогами цикл—÷в перебору кожного елементу списку з виконанн€м певно—„ д—÷—„. ” функц—÷ональному код—÷ ми висловлю—‘мо т—÷льки вимоги, а отже в—÷н не може бути р—÷зним —÷ робити те саме на в—÷дм—÷ну в—÷д –∆ . ÷е робить функц—÷ональну запис б—÷льше простий у читанн—÷ —÷ кодуванн—÷.

¬ C # 3. 5 дл€ вираженн€ (—÷ обробки) посл—÷довностей використову—‘тьс€ тип IEnumerable <T>. ‘ункц—÷—„ обробки посл—÷довностей у вигл€д—÷ метод—÷в-розширень пом—÷щен—÷ в б—÷бл—÷отеку System. Core. dll, €ка поставл€—‘тьс€ разом з.net Framework 3. 5. ¬с—÷ ц—÷ методи знаход€тьс€ в клас—÷ Enumerable з простору —÷мен System. Linq.


1.3 Microsoft HPC 2008


Windows HPC Server 2008 - це нова верс—÷€ платформи високопродуктивних обчислювальних систем (HPC) корпорац—÷—„ Microsoft. ѕобудований на баз—÷ 64-розр€дно—„ верс—÷—„ Windows Server 2008, продукт Windows HPC Server 2008 (HPCS) може ефективно масштабуватис€ на тис€ч—÷ процесорних €дер, надаючи потужн—÷ —÷нструменти дл€ створенн€ високопродуктивно—„ середовища HPC. HPCS легко —÷нтегру—‘тьс€ з —÷ншими продуктами Microsoft такими €к Microsoft Office SharePoint та Windows Workflow Foundation, що зб—÷льшу—‘ продуктивн—÷сть роботи користувач—÷в та адм—÷н—÷стратор—÷в. «авд€ки —÷нтеграц—÷—„ з Windows Communication Foundation (WCF), Windows HPC Server 2008 дозвол€—‘ розробникам додатк—÷в дл€ арх—÷тектури Service-Oriented Architecture (SOA) використовувати всю м—÷ць паралельних обчислень, що нада—‘тьс€ р—÷шенн€ми класу HPC. Windows HPC Server 2008 п—÷дтриму—‘ п'€ть р—÷зних конф—÷гурац—÷й, що вимагають в—÷д одного до трьох мережевих адаптер—÷в на кожному вузл—÷ кластеру та в—÷д одного до трьох мережевих адаптер—÷в на головному вузл—÷.


–ис. 1.2. “ополог—÷—„ кластерно—„ мереж—÷.


  • ћережа загального користуванн€ (або мережа п—÷дпри—‘мства): необх—÷дн—÷ дл€ з'—‘днанн€ з —÷снуючою мережею
  • ѕриватна мережа: необх—÷дна дл€ керуванн€ вузлами кластера та забезпечити мережевий траф—÷к м—÷ж вузлами
  • ћережа MPI (мережа програм) - високошвидк—÷сна мережа дл€ забезпеченн€ траф—÷ку MPI

¬с—÷ тополог—÷—„ кр—÷м 5 п—÷дтримують автоматичне розгортанн€ кластерно—„ системи. ƒл€ тополог—÷й 1 —÷ 3 вузли можна п—÷дключити до мереж—÷ загального користуванн€ з допомогою головного вузла або додаткового сервера.

–обота - виконанн€ певно—„ програми на кластер—÷, що може складатис€ €к з одн—÷—‘—„ задач—÷ так —÷ з багатьох. «адач—÷ можуть виконуватис€ посл—÷довно одна за одною, або паралельно - одночасно на дек—÷лькох процесорах.

ќсновний принцип виконанн€ роботи в Windows HPC Server 2008 спира—‘тьс€ на три важливих пон€тт€:

ѕредставленн€ роботи

ѕлануванн€ роботи

¬иконанн€ завдань

÷—÷ три пон€тт€ формують основну структуру циклу роботи в област—÷ високопродуктивних обчислень житт€ —÷ —‘ основою, на €к—÷й Microsoft —÷нженерних Windows HPC Server.  ожного разу, коли користувач готу—‘ виконанн€ завданн€ в кластер—÷ обчисленн€, робота проходить через три етапи. Ќа рис. 1. 3 показан—÷ компоненти кластера —÷ €к вони сп—÷вв—÷днос€тьс€ один з одним.


–ис. 1.3. ¬за—‘мозвтјў€зок компонент—÷в кластера.


√оловний вузол (проте —„х може бути два €кщо використову—‘мо в—÷дмовост—÷йк—÷сть) - центральний вузол в кластер—÷ з допомогою €кого можна адм—÷н—÷струвати вс—÷ —÷нш—÷ вузли. √оловний вузол розгорта—‘ обчислювальн—÷ вузли, запуска—‘ планувальник завдань, стежить за роботою та станом кожного обчислювального вузла, проходить д—÷агностику вузл—÷в, а також нада—‘ зв—÷ти про роботу вузл—÷в —÷ вид—÷в д—÷€льност—÷. WCF Broker використовуютьс€ дл€ —÷нтерактивних додатк—÷в SOA, створенн€ —÷нтерактивних сес—÷й, €к—÷ представл€ють роботи планувальника роботи, балансуванн€ навантаженн€ встановлених вузл—÷в —÷, нарешт—÷, поверта—‘ результати кл—÷—‘нту сес—÷—„. ќбчислювальн—÷ вузли виконувати робоч—÷ завданн€.

 оли користувач в—÷дправл€—‘ завданн€ на кластер, планувальник завдань перев—÷р€—‘ роботу "астивостей —÷ збер—÷га—‘ роботу в бази даних Microsoft SQL Server. якщо шаблон дл€ роботи заданий, цей шаблон прийма—‘тьс€ або використову—‘тьс€ шаблон за замовчуванн€м, —÷ робота входить в чергу. ѕри на€вност—÷ ресурс—÷в робота спр€мову—‘тьс€ до обчислювальних вузл—÷в. ќск—÷льки кластер знаходитьс€ в домен—÷, робота викону—‘тьс€ з використанн€м прав доступу користувача. ” результат—÷ зника—‘ складн—÷сть використанн€ та синхрон—÷зац—÷—„ р—÷зних обл—÷кових даних, —÷ користувач не повинен п—÷клуватис€ про методи обм—÷ну даними та права доступу м—÷ж вузлами. Windows HPC Server 2008 забезпечу—‘ прозоре виконанн€, доступ до даних, а також вбудован—÷ засоби безпеки.

Ќа рис. 1.4 показано базову арх—÷тектуру програми що використову—‘ SOA модель програмуванн€.


–ис. 1. 4. Ѕазова арх—÷тектура SOA програми.



∆итт—‘вий цикл роботи на кластер—÷ Windows HPC можна вид—÷лити три основн—÷ етапи:

1. —творенн€ сес—÷—„ кл—÷—‘нтом.

2. ѕланувальник завдань вид—÷л€—‘ вузли —÷ запуска—‘ серв—÷с, €кий завантажу—‘ служби динам—÷чно—„ б—÷бл—÷отеки (DLL-файли). ѕланувальник завдань вид—÷л€—‘ вузол Ѕрокер, щоб почати роботу WCF Ѕрокера. «апускаютьс€ задач—÷ на вузлах та на WCF брокер—÷ встановлюютьс€ endpoints (умови завершенн€ задач).

3.  л—÷—‘нт отриму—‘ пов—÷домленн€ про стан виконанн€ задач на кластер—÷ та WCF брокер сл—÷дку—‘ за р—÷вном—÷рним навантаженн€м на вузли кластера.

јдм—÷н—÷стратор може використовувати Windows HPC Server 2008 Administrator Console дл€ мон—÷торингу кластера та планувальник дл€ сл—÷дкуванн€ за прогресом —÷ вид—÷леними ресурсами дл€ кожно—„ роботи.


1.4 “ехнолог—÷€ Dryad та DryadLinq €к розширенн€ LinqToObject


Dryad - високопродуктивний двигун загального призначенн€ дл€ розпод—÷лених обчислень, дл€ запуску розпод—÷лених програм на р—÷зних кластерних технолог—÷€х, у тому числ—÷ Windows HPC Server 2008. Dryad почали розробл€ти в Microsoft починаючи з 2006 року. Dryad спрощу—‘ завданн€ реал—÷зац—÷—„ розпод—÷лених програм:

  • ƒвигун Dryad викону—‘ де€к—÷ з найб—÷льш складних аспект—÷в великомасштабних розпод—÷лених програм, у тому числ—÷ доставки даних в потр—÷бне м—÷iе, плануванн€ ресурс—÷в, оптим—÷зац—÷—„ та ви€вленн€ збо—„в —÷ в—÷дновленн€.
  • Dryad п—÷дтриму—‘ модел—÷ програмуванн€, €ка призначен—÷ дл€ програмуванн€ п—÷д кластер.
  • Dryad може оперувати великомасштабними обтјў—‘мами даних при паралельних обчисленн€х.

dryadlinq програмуванн€ функц—÷ональний п—÷дх—÷д

ƒл€ використанн€ технолог—÷—„ Dryad на кластерах Microsoft HPC створено розширенн€ LINQ, що отримало назву DryadLinq. DryadLINQ - розширена верс—÷€ мови —÷нтегрованих запист—÷в LINQ. ¬елика частина коду в типовому застосуванн—÷ DryadLINQ под—÷бно до того, €кий використову—‘тьс€ LinqToObject. DryadLinq використовують DryadLinq API; вс—÷ вза—‘мод—÷—„ програми з Dryad реал—÷зуютьс€ через провайдер DryadLinq. јрх—÷тектуру DryadLinq можна представити у вигл€д—÷ схеми зображено—„ на рис. 1. 5.


–ис. 1.5. јрх—÷тектура DryadLinq.


Application Layer (р—÷вень програми). ѕрограми на DryadLinq комп—÷люютьс€ в пром—÷жний код —÷ використовують DryadLINQ API дл€ частин програми що базуютьс€ на Dryad. ѕрограми в основному пишутьс€ на C#, проте можна використовувати —÷нш—÷ середовища, що п—÷дтримують Linq, наприклад F#.

DryadLINQ API and provider. DryadLinq нада—‘ розширену верс—÷ю LINQ API €ку використовують програми дл€ реал—÷зац—÷—„ запит—÷в. ѕровайдер DryadLinq конверту—‘ запити в роботу Dryad —÷ викону—‘ роботу на кластер—÷.

Dryad execution engine (виконавчий двигун Dryad). ¬иконавчий двигун Dryad керу—‘ виконанн€м кожно—„ роботи Dryad на кластер—÷.

Server cluster (кластер) Ќа кластер—÷ роботи виконуютьс€ на певних вузлах. «а виконанн€м роб—÷т сл—÷дку—‘ JobManager на головному вузл—÷ кластера.

«астосуванн€ Dryad розм—÷щу—‘тьс€ кл—÷—‘нтському комп'ютер—÷, що п—÷дключений до кластеру мережевим з'—‘днанн€м. ¬елика частина коду програми, так—÷ €к користувальницький —÷нтерфейс зазвичай викону—‘тьс€ на робоч—÷й станц—÷—„. “—÷ частини програми, що використовують Dryad упакован—÷ в €кост—÷ роботи Dryad —÷ викону—‘тьс€ на кластер—÷. –оботи Dryad —‘ механ—÷змом дл€ виконанн€ розпод—÷лених програм на кластер—÷. Ќа рис. 1. 6 представлена схема роботи просто—„ розпод—÷лено—„ програми тако—„ €к множенн€ на константу кожного елемента масиву.


–ис. 1.6 —хема роботи просто—„ розпод—÷лено—„ програми.


«л—÷ва в—÷добража—‘тьс€ головний виконавчий план, тобто €к ц€ робота буде виконуватис€ на одному комптјўютер—÷, проте розпод—÷лена робота буде виконуватис€ наступним чином:

¬х—÷дн—÷ дан—÷ розбиваютьс€ на виконавч—÷ частини, —÷ кожна частина коп—÷ю—‘тьс€ в один з обчислювальних вузл—÷в.

ќкремий прим—÷рник коду обробки направл€—‘тьс€ кожного обчислювального вузла.

¬с—÷ обчислювальн—÷ вузли одночасно обробл€ють дан—÷ з сво—„х виконавчих частин.

ќброблен—÷ виконавч—÷ частини складаютьс€ один наб—÷р даних, —÷ повертаютьс€ кл—÷—‘нтський програм—÷.

ƒана д—÷аграма на рисунку в загальному демонстру—‘ роботу DryadLinq, проте €кщо розгл€нути це б—÷льш детально, то DryadLinq використову—‘ механ—÷зм схожий на "UNIX piping mechanism" дл€ звтјў€зку м—÷ж р—÷зними процесами Dryad. ¬иконавчий план роботи Dryad €вл€—‘ собою направлений ацикл—÷чний граф, вершинами €кого —‘ незалежн—÷ процеси що працюють з даними лише з—÷ свого р—÷вн€ю. ƒл€ нескладно—„ задач—÷ цей граф буде мати наступний вигл€д:


–ис. 1.7. ¬иконавчий план роботи Dryad.


« л—÷ва в—÷добража—‘тьс€ головний виконавчий план, тобто виконанн€ роботи на одному комптјўютер—÷. « права - виконанн€ розпод—÷лено—„ роботи €к м—÷н—÷мум на 6 вузлах кластера. –озгл€немо це б—÷льш детально:

–озпод—÷ленн€ вх—÷дних даних (Input data partitions). –обота Dryad почина—‘тьс€ з колекц—÷—‘ю вх—÷дних даних, так—÷ €к log файл наприклад. ¬х—÷дн—÷ дан—÷ розбиваютьс€ на частини —÷ коп—÷юютьс€ на вузли кластера. (ƒана верс—÷€ DryadLinq не розбива—‘ дан—÷ —÷ не коп—÷ю—‘ —„х на вузли, це необх—÷дно робити окремо)

–—÷вень (Stage). –обота Dryad склада—‘тьс€ з одного або б—÷льше р—÷вн—÷в.  ожен р—÷вень в—÷дпов—÷да—‘ елементу основного плану виконанн€.

¬ершина (Vertex).  ожен р—÷вень склада—‘тьс€ з одного або б—÷льше однакових вершин.  ожна вершина —‘ незалежним екземпл€ром коду обробки даних певного р—÷вн€, —÷ використову—‘ дан—÷ лише з—÷ свого р—÷вн€. ¬ершини мають певн—÷ особливост—÷:

  • –—÷зн—÷ етапи можуть мати р—÷зне число вершин.
  • якщо на певному р—÷вн—÷ використовуютьс€ статичн—÷ дан—÷, число вершин дикту—‘тьс€ к—÷льк—÷стю наданих частин даних. якщо —‘ б—÷льше розд—÷л—÷в з даними, н—÷ж робочих комп'ютер—÷в, Dryad використову—‘ к—÷лька проход—÷в дл€ обробки даних.
  • ѕевний тип вершини може бути використаний на дек—÷лькох р—÷вн€х.
  • ƒл€ DryadLINQ, кожна вершина використовують методи Microsoft.net Framework.
  •  ожна вершина зазвичай викону—‘тьс€ на окремому обчислювальному вузл—÷.

 анал (Channel). ƒан—÷ на кожному наступному р—÷вн—÷ берутьс€ з попереднього за допомогою канал—÷в. ƒл€ цього DryadLINQ використову—‘ два механ—÷зма: файли та сп—÷льно—„ пам'€т—÷. —п—÷льну пам'€ть канал—÷в —÷нод—÷ називають сп—÷льною пам'€тю FIFO канал—÷в (перший ув—÷йшов, перший вийшов). ƒе€к—÷ вказ—÷вки:

  • DryadLINQ пересила—‘ дан—÷ за допомогою файлу, що —‘ найб—÷льш гнучким дл€ канального типу. DryadLINQ використову—‘ сп—÷льну пам'€ть т—÷льки дл€ певних iенар—÷—„в.
  • вершина може мати канал дл€ б—÷льш н—÷ж одн—÷—‘—„ вершини в наступному р—÷вн—÷.
  • –—÷зн—÷ види канал—÷в можуть бути використан—÷ у р—÷зних частинах графу.
  •  анали п—÷дключаютьс€ до вершин, так що граф —‘ ацикл—÷чним.
  •  анали працюють за принципом точка-точка. ¬они пов'€зують вих—÷д з одн—÷—‘—„ вершини з входом —÷ншо—„ вершини.

 —÷льк—÷сть вершин на кожному р—÷вн—÷ та к-сть канал—÷в що —„х по—‘дну—‘ вибира—‘тьс€ з м—÷ркувань оптим—÷зац—÷—„ та швидкод—÷—„. ¬ додаток, Dryad може динам—÷чно зм—÷нювати певн—÷ р—÷вн—÷ графу дл€ покращенн€ продуктивност—÷ виконанн€ роботи. ≈фективн—÷сть роботи DryadLINQ трохи нижче, н—÷ж при застосуванн—÷ Dryad API, проте р—÷зниц€ в—÷дносно невелика.

2. –еал—÷зац—÷—„ розпод—÷лено—„ програми з використанн€м DryadLINQ


2.1 —труктура та налаштуванн€ кластерно—„ системи


Ќа рис. 2. 1 представлена принципова схема, €к Dryad викону—‘ роботу.


–ис. 2.1. —хема виконанн€ роботи Dryad.


 ористувач запуска—‘ програму що використову—‘ DryadLINQ з кл—÷—‘нтсько—„ робочо—„ станц—÷—„. ѕ—÷сл€ створенн€ виконавчого графу, менеджер роб—÷т Dryad створю—‘ роботу з запит—÷в DryadLINQ та запуска—‘ роботу в кластер—÷ Windows HPC. ћенеджер роб—÷т Dryad - задача Windows HPC на головному вузл—÷, €ка керу—‘ виконанн€м в—÷дпов—÷дно—„ роботи на кластер—÷. «окрема, робота менеджера породжу—‘ вершини, що —‘ завданн€ми, €к—÷ належать до одн—÷—‘—„ роботи на Windows HPC.

ѕрограмне забезпеченн€ Dryad встановлене на вс—÷х комптјўютерах кластера дл€ того щоб виконувати певн—÷ детал—÷ роботи Dryad. Ќа головному вузл—÷ встановлено головна частина программного забезпеченн€ Dryad, що включа—‘ в себе наступне: менджер роб—÷т, менеджер вузл—÷в та —÷н. ¬—÷д вузл—÷в вимага—‘тьс€ т—÷льки обробл€ти дан—÷ що м—÷ст€тьс€ на них. “обто кожен вузол ма—‘ коп—÷ю частини програми що працю—‘ з колекц—÷—‘ю даних.

 ластерна програма на основ—÷ Dryad залежать в—÷д:

кл—÷—‘нтсько—„ робочо—„ станц—÷—„.

ќбчислювальн—÷ вузли.

комптјўютер—÷в чи бази даних, на €ких розм—÷щуютьс€ дан—÷.

¬се ма—‘ бути правильно налаштовано дл€ того щоб програма на Dryad нормально працювала.

ѕри застосуванн—÷ DryadLINQ, програма повинна мати можлив—÷сть перем—÷щенн€ даних м—÷ж вузлами кластера €к—÷, в свою чергу, повинн—÷ мати в—÷дпов—÷дний доступ до один одного. «агалом DryadLINQ вимага—‘ прив—÷ле—„ високого р—÷вн€. якщо робота DryadLINQ що запущена на кластер—÷ поверта—‘ помилку з кодом один, то зазвичай це недостатн—÷сть прав користувача або в—÷дсутн—÷сть певного ресурсу з в—÷дпов—÷дним доступом. “обто необх—÷дним дл€ виконанн€ роботи Dryad на кластер—÷ —‘ права користувача на можлив—÷сть погодженн€ —÷ запуску роботи на кластер—÷, а також права доступу до вх—÷дних даних.

—тандартн—÷ папки вводу виводу

ѕри встановленн—÷ програмного комплексу Dryad автоматично створюютьс€ —÷ в—÷дкрива—‘тьс€ доступ до наступних папок на кожному вузл—÷, а також на головному вузл—÷ кластера:

  • DryadData - дл€ розташуванн€ вх—÷дних даних
  • XC - дл€ збереженн€ пром—÷жних даних що створюютьс€ роботою Dryad
  • XC\output - використову—‘тьс€ €к папка за замовчуванн€м дл€ вих—÷дних даних (€кщо ви не хочете використовувати цю папку дл€ виведенн€ даних, то —„—„ можна зм—÷нити у файл—÷ конф—÷гурац—÷—„ DryadLINQ)


2.2 ‘айли конф—÷гурац—÷—„


 ожен проект DryadLINQ повинен включати в себе файл конф—÷гурац—÷—„ DryadLinqConfig. xml. ‘айли конф—÷гурац—÷—„ под—÷л€ютьс€ на:

  • √лобальний DryadLinqConfig. xml - м—÷стить налаштуванн€ що не зм—÷нюютьс€ в залежност—÷ в—÷д проекту (наприклад —÷мтјў€ головного вузла, стандартн—÷ папки вводу виводу). ¬—÷н м—÷ститьс€ в C: \Program Files\Microsoft Research DryadLINQ
  • Ћокальний DryadLinqConfig. xml - налаштуванн€ дл€ певно—„ розпод—÷лено—„ програми. ÷ей файл знаходитьс€ в папц—÷ проекту програми разом з виконавчими файлами.

–озгл€немо вм—÷ст глобального файлу конф—÷гурац—÷—„. ƒл€ даного кластера в—÷н прийма—‘ наступний вигл€д:


<DryadLinqConfig>

<ClusterName>hnode</ClusterName>

<Cluster name="hnode"

schedulertype="Hpc"

partitionuncdir=" XC\output "

dryadoutputdir="file: // \\hnode\Userdata\tmaliarchuk\output" />

</DryadLinqConfig>


–озберемо по частинам:

  • hnode - —÷мтјў€ головного вузла кластера
  • XC\output - папка дл€ збереженн€ пром—÷жних даних що створюютьс€ роботою Dryad
  • file: // \\hnode\Userdata\tmaliarchuk\output - папка виводу результату

як вже було зазначено локальний файл конф—÷гурац—÷—„ знаходитьс€ в папц—÷ проекту, в—÷н м—÷стить т—÷льки шл€х до глобального файлу конф—÷гурац—÷—„:

<DryadLinqConfig>

<DryadLinqRoot>

C: \Program Files\Microsoft Research DryadLINQ

</DryadLinqRoot>

</DryadLinqConfig>

«а замовчуванн€м це C: \Program Files\Microsoft Research DryadLINQ.


2.3 ѕредставленн€ колекц—÷й даних


ƒан—÷ в робот—÷ Dryad необх—÷дно представити у вигл€д—÷ колекц—÷—„. ƒл€ звичайного запит—÷в LinqToObject це тип IEnumerable<T>. ÷е так би мовити колекц—÷€ даних типу “ над €кою можна виконувати так—÷ операц—÷—„ €к сортуванн€, видобуток та —÷нш—÷ функц—÷—„ €к—÷ доступн—÷ в б—÷бл—÷отец—÷ System. Linq. ѕроте п—÷сл€ перел—÷чених операц—÷—„ робота Dryad поверта—‘ не обтјў—‘кт типу IEnumerable<T>, а IQueryable<T>. IQueryable<T> насл—÷ду—‘ IEnumerable<T>, проте ц—÷ два типи колекц—÷й працюють по р—÷зному:

IEnumerable<T> - представл€—‘тьс€ €к —÷тератор по колекц—÷—„ даних, €к—÷ знаход€тьс€ на комптјўютер—÷. ѕ—÷д час виконанн€ програми обтјў—‘кт колекц—÷—„ комп—÷люютьс€ локальним.net JIT комп—÷л€тором, —÷ —÷тератори використовуютьс€ дл€ покращенн€ виконанн€ програми локально.

IQueryable<T> - представл€—‘тьс€ €к запит по колекц—÷—„ даних. ѕ—÷д час виконанн€ програми обтјў—‘кт колекц—÷—„ переда—‘тьс€ провайдеру DryadLINQ що транслю—‘ запити в роботу Dryad —÷ поверта—‘ вже оброблен—÷ дан—÷ до програми. ÷е використову—‘тьс€ дл€ розпод—÷лених програм на кластер—÷.

ѕ—÷д час виконанн€ роботи Dryad на кластер—÷ вх—÷дн—÷ дан—÷ представл€ютьс€ у вигл€д—÷ PartitionedTable<T>. PartitionedTable<T> насл—÷ду—‘ IQueryable<T>, а отже насл—÷ду—‘ —÷ вс—÷ методи IQueryable<T>. PartitionedTable<T> представл€—‘ дан—÷ н—÷би вони знаход€тьс€ на одному вузл—÷, проте в реальност—÷ вони розд—÷лен—÷ на частини та знаход€тьс€ не на одному вузл—÷.


2.4 ‘айл метаданих


як вже було зазначено даний верс—÷€ DryadLINQ не п—÷дтриму—‘ автоматичне розбитт€ даних та коп—÷юванн€ —„х на вузли. ÷е необх—÷дно зробити самост—÷йно, або програмно, написавши додатков—÷ процедури що будуть це виконувати. ќтже множина розпод—÷лених даних пол€га—‘ в наступних файлах:

  • файл метаданих, €кий €вл€тьс€ текстовим файлом що м—÷стить метадан—÷ €к—÷ описують розпод—÷лен—÷ дан—÷
  • множини розпод—÷лених даних, вони можуть бути будь €кого зручного дл€ вашо—„ програми формату включно б—÷нарний формат.

‘айл метеданих може приймати наступний вигл€д (у випадку виконанн€ роботи на 4 вузлах):



‘айл метаданих ма—‘ формат. pt —÷ м—÷стить три розд—÷ли:

  • папка та —÷мтјў€ файлу - перша строчка опису—‘ стандартну папку з в—÷дкритим доступом —÷ стандартне —÷мтјў€ дл€ часткових даних.  ожен вузол в кластер—÷ ма—‘ папку DryadData з в—÷дпов—÷дними правами доступу та кожна частина розпод—÷лених даних повинна м—÷ститис€ в ц—÷й папц—÷ на в—÷дпов—÷дних вузлах
  • к—÷льк—÷сть частин - друга строчка опису—‘ к—÷льк—÷сть частин розпод—÷лених даних. ¬ даному випадку 4
  • опис розпод—÷лених даних - решта файлу. ќдна строка - на одну частину.  ожна л—÷н—÷€ м—÷стить три або б—÷льше елемент—÷в розпод—÷лених комою: номер частини даних (в дес€тковому вигл€д—÷), розм—÷р частини, —÷мтјў€ комптјўютер—÷в де знаход€тьс€ ц—÷ дан—÷.

” файл—÷ метеданих не повинно бути жодних проб—÷л—÷в. Ќомер частин розпод—÷лених почина—‘тьс€ з 00000000. –озм—÷р частини вказувати не обовтјў€зково, тобто €кщо при кожному новому виконанн—÷ роботи Dryad —„—„ розм—÷р зм—÷ню—‘тьс€ можна вказати нульовий розм—÷р. “акож певна чатина даних може не знаходитис€ в стандартн—÷й папц—÷. ” цьому випадку в р€дку опису ц—÷—‘—„ частини п—÷сл€ перел—÷ку вузл—÷в де знаходитьс€ ц€ частина необх—÷дно поставити ": " та пот—÷м вказати —÷мтјў€ папки та —÷мтјў€ частини. Ќаприклад у випадку використанн€ т—÷льки одн—÷—‘—„ частини розпод—÷лених даних файл метаданих може бути наступним



“ут ми не вказу—‘мо папку та —÷мтјў€ за замовчуванн€м.


2.5 Ѕ—÷бл—÷отеки LinqToDryad. dll та System. Threading. dll


“акож проект що використову—‘ DryadLINQ необ х—÷дно п—÷дключити дв—÷ б—÷бл—÷отеки LinqToDryad. dll та System. Threading. dll. LinqToDryad. dll м—÷стить клас б—÷бл—÷отек DryadLINQ та провайдер DryadLINQ. –озташуванн€ ц—÷—‘—„ б—÷бл—÷отеки за замовчуванн€м C: \Program Files\Microsoft Research DryadLINQ\lib де м—÷ститьс€ верс—÷—„ ц—÷—‘—„ б—÷бл—÷отеки дл€ в—÷длагодженн€ та дл€ к—÷нцево—„ верс—÷—„ проекту. System. Threading. dll стандартна б—÷бл—÷отека платформи.net 3. 5 необх—÷дна дл€ використанн€ стандартних можливостей ц—÷—‘—„ платформи (наприклад WCF). –озташову—‘тьс€ вона за замовчуванн€м в —: \Program Files\Microsoft Research DryadLINQ\Lib\Microsoft\Framework\v3. 5\


2.6 ¬иконанн€ роботи Dryad


ƒл€ реал—÷зац—÷—„ консольно—„ програми обчисленн€ —÷нтегралу 1/х методом ћонте- арло на кластер—÷ Windows HPC 2008 з використанн€м DryadLINQ програма перед початком роботи генеру—‘ випадков—÷ точки в певному д—÷апазон—÷ запису—‘ —„х у дек—÷лька текстових файл—÷в кожен з €ких пот—÷м коп—÷ю—‘тьс€ на в—÷дпов—÷дний вузол.

–озгл€немо виконанн€ роботи Dryad на приклад—÷ запиту DryadLINQ


PartitionedTable<LineRecord> table = PartitionedTable. Get<LineRecord> (uri);

IQueryable<string> table1 = table

. Select (s => s. line)

. Where (s => (1/ (fun (s. Split (' ') [0]))) > fun (s. Split (' ') [1]));

double result = (1. 000000 * table1. Count () * (x2-x1) * (y2-y1)) /lenght;


—початку зчиту—‘тьс€ файл метаданих де вказу—‘тьс€ к—÷льк—÷сть та м—÷iе знаходженн€ частин розпод—÷лених даних €к—÷ попередньо були скоп—÷йован—÷ на в—÷дпов—÷дн—÷ вузли. ƒал—÷ представл€—‘тьс€ IQueryable<string> у вигл€д—÷ PartitionedTable<string>. ¬ запит—÷ DryadLINQ реал—÷зу—‘тьс€ виб—÷рка тих текстових р€дк—÷в в €ких функц—÷€ 1/x в—÷д першого числа б—÷льша за друге число. “ут використову—‘тьс€ функц—÷€ fun €ка переводить string у double та функц—÷€ Split з простору System. Text що розд—÷л€—‘ стр—÷чку на частини м—÷ж €кими був знак проб—÷лу. ÷е реал—÷зу—‘тьс€ двома методами Select та Where. ѕерший серед вс—÷—‘—„ сукупност—÷ вх—÷дних д—÷них вид—÷л€—‘ р€док, а другий анал—÷зу—‘ чи цей р€док задовольн€—‘ нашим умовам. ѕ—÷сл€ цього п—÷драхову—‘тьс€ к—÷льк—÷сть обраних р€дк—÷в за допомогою методу Count.

ѕ—÷д час виконанн€ роботи Dryad на консол—÷ провайдер Dryad виводить наступне:


–ис. 2.2


як видно з рисунка провайдер Dryad виводить:

  • шл€х стандартно—„ папки виводу
  • м—÷iе знаходженн€ файлу метаданих
  • елементи кожного р—÷вн€ виконавчого графа Dryad
  • —÷нформац—÷€ про стан п—÷дключенн€ до кластера та погодженн€ роботи на ньому
  • —÷нформу—‘тьс€ чи робота викону—‘тьс€ (running) чи вона поки що в черз—÷ (queued)

ѕ—÷сл€ завершенн€ виконанн€ роботи Dryad на кластер—÷ провайдер Dryad поверта—‘ оброблен—÷ дан—÷ до програми.

ƒана програма обчисленн€ —÷нтегралу методом ћонте- арло була запущена на р—÷зн—÷й к—÷лькост—÷ вузл—÷в: в—÷д одного до шести.


–ис. 2.3. «алежн—÷сть часу виконанн€ роботи Dryad в—÷д к—÷лькост—÷ зад—÷€них вузл—÷в.

¬исновки


¬ результат—÷ зробленого анал—÷зу п—÷дход—÷в до розробки паралельних програм було об“—рунтовано доц—÷льн—÷сть створенн€ нового, €кий передбача—‘ покладанн€ фоново—„ роботи по розпаралеленню на —÷нструментальн—÷ засоби, а не на розробника. —еред —÷снуючих парадигм програмуванн€ було обрано парадигму функц—÷онального програмуванн€ €к таку що в—÷дпов—÷да—‘ висунутим критер—÷€м.

¬насл—÷док анал—÷зу —÷нструментальних засоб—÷в дл€ створенн€ функц—÷онально ор—÷—‘нтованих програм було обрано DryadLINQ.

–еал—÷зована обчислювальна задача методом ћонте- арло дозволила сформувати концепц—÷ю використанн€ функц—÷онального п—÷дходу у програмуванн—÷ дл€ реал—÷зац—÷—„ паралельних обчислювальних задач.

ѕерел—÷к посилань


  1. Windows¬о HPC Server 2008 Resource Kit: // ссылка на сайт удаленаa>resourcekit. windowshpc.net/home.php
  2. DryadLINQ - Microsoft Research Project Page // ссылка на сайт удаленаa>research. microsoft.com/en-us/projects/dryadlinq/
  3. Microsoft¬о Connect - Dryad // http://connect. microsoft.com/Dryad
  4. Dryad - Microsoft Research Project Page // ссылка на сайт удаленаa>research. microsoft.com/en-us/projects/dryad/
  5. Dryad and DryadLINQ for Data Intensive Research // ссылка на сайт удаленаa>research. microsoft.com/en-us/collaboration/tools/dryad. aspx
  6. Intel - HPC: архитектура суперкомпьютеров и разновидности // ссылка на сайт удаленаa>ru. intel.com/business/community/? automodule=blog&blogid=6276&showentry=888
  7. Russian Software Developer Network // ссылка на сайт удаленаa>rsdn.ru/
  8. Language-Integrated Query (LINQ) // ссылка на сайт удаленаa>msdn. microsoft.com/en-us/library/bb397926. aspx
  9. LINQ:.net Language-Integrated Query // ссылка на сайт удаленаa>msdn. microsoft.com/en-us/library/bb308959. aspx
  10. Dryad and DryadLINQ team blogs // ссылка на сайт удаленаb/dryad/
  11. Meijer E., Barga R. Introduction to Dryad and DryadLINQ // ссылка на сайт удаленаa>channel9. msdn.com/posts/Charles/Expert-to-Expert-Erik-Roger-Barga-Introduction-to-Dryad-and-DryadLINQ/
  12. Vert J. Data-Intensive Computing on Windows HPC Server with the DryadLINQ Framework // ссылка на сайт удаленаa>microsoftpdc.com/Sessions/SVR17
  13. Podwysocki M. Dryad/DryadLINQ and Project Trident Released
  14. // ссылка на сайт удаленаa>weblogs. asp.net/podwysocki/archive/2009/07/16/dryad-dryadlinq-and-project-trident-released. aspx
  15. Campbell D. Dryad and DryadLINQ: Academic Accelerators for Parallel Data Analysis // ссылка на сайт удаленаa>blogs. msdn.com/b/msr_er/archive/2010/02. aspx
  16. Colaci A. Dryad and DryadLINQ for Data Intensive Research // ссылка на сайт удаленаa>blogs. msdn.com/b/lchong/archive/2009/09/23/dryad-and-dryadlinq-for-data-intensive-research. aspx
  17. Chong L. Scaling out PLINQ: DryadLINQ at PDC09 and Supercomputing09 // ссылка на сайт удаленаa>blogs. msdn.com/b/pfxteam/archive/2009/11/11/9921066. aspx

ƒодатки


ƒодаток ј


“екст глобального файлу конф—÷гурац—÷—„

<DryadLinqConfig>

<ClusterName>hnode</ClusterName>

<Cluster name="hnode"

schedulertype="Hpc"

partitionuncdir=" XC\output "

dryadoutputdir="file: // \\hnode\Userdata\tmaliarchuk\output" />

</DryadLinqConfig>

ƒодаток Ѕ


“екст локального файлу конф—÷гурац—÷—„

DryadLinqConfig>

<DryadLinqRoot>

C: \Program Files\Microsoft Research DryadLINQ

</DryadLinqRoot>

</DryadLinqConfig>

ƒодаток B


“екст файлу метаданих (у випадку чотирьох обчислювальних вузл—÷в)

\DryadData\tmaliarchuk\mc

4

0,0,NODE05

1,0,NODE06

2,0,NODE10

3,0,NODE14

ƒодаток √


“екст програми обрахунку —÷нтегралу методом ћонте- арло

using System;

using System. IO;

using System. Collections. Generic;

using System. Text;

using System. Linq;

using LinqToDryad;

using System. Diagnostics;

public class MatchString2

{

public static double fun (string s)

{

int i, j = 1;

double ds = 0;

bool b = false;

for (i = 0; (i! = (s. Length)); i++)

{

if (s [i]! = ',')

if (! b) ds = ds*10 + ( (int) s [i] - 48);

else

{

j *= 10;

ds = ds + (1. 0000 * ( (int) s [i] - 48) / j);

}

else b = true;

}

return ds;

}

public static void create (int lenght, int x1, int x2, int y1, int y2, string source,string destination)

{

Console. WriteLine (source);

Random rnd = new Random ();

using (StreamWriter sw = new StreamWriter (source))

{

for (int i = 0; i < lenght / 2; i++)

{

sw. Write (Convert. ToString (x1 + (x2 - x1) * rnd. NextDouble ()));

sw. Write (' ');

sw. WriteLine (Convert. ToString (y1 + (y2 - y1) * rnd. NextDouble ()));

}

}

Console. WriteLine ("copying");

System. IO. File. Copy (source, destination, true);

}

static void Main (string [] args)

{

int lenght = 1000000;

int x1 = 1;

int x2 = 10;

int y1 = 0;

int y2 = 1;

create (lenght/4, x1, x2, y1, y2, @"D: \temp\mc. 00000000", "\\\\node05\\DryadData\\tmaliarchuk\\mc. 00000000");

create (lenght/4, x1, x2, y1, y2, @"D: \temp\mc. 00000001", "\\\\node06\\DryadData\\tmaliarchuk\\mc. 00000001");

create (lenght/4, x1, x2, y1, y2, @"D: \temp\mc. 00000002", "\\\\node10\\DryadData\\tmaliarchuk\\mc. 00000002");

create (lenght/4, x1, x2, y1, y2, @"D: \temp\mc. 00000003", "\\\\node14\\DryadData\\tmaliarchuk\\mc. 00000003");

string uri = DataPath. FileUriPrefix + Path.combine ("\\\\hnode\\UserData\\tmaliarchuk", "montecarlo. pt");

PartitionedTable<LineRecord> table = PartitionedTable. Get<LineRecord> (uri);

Stopwatch t = new Stopwatch ();

t. Start ();

IQueryable<string> table1 = table. Select (s => s. line)

. Where (s => (1/ (fun (s. Split (' ') [0]))) > fun (s. Split (' ') [1]));

double result = (1. 000000 * table1. Count () * (x2-x1) * (y2-y1)) /lenght;

t. Stop ();

Console. WriteLine (t. Elapsed);

Console. WriteLine (result);

Console. ReadKey ();

}

}

–азмещено на Allbest.ru

—траницы: Ќазад 1 ¬перед