Knowledge Team





Prvotno je http://coopsoft.com/ar/ConquerArticle.html.

Java ™ Vidličku-Pripojiť dobyvateľ

Vidličku-Pripojte sa vývoj v Jave ™ dnes prichádza v dvoch verziách:

  1. Trápne-Parallel Vidličku-join techniku, ktorá funguje dobre pre každodenné, multi-core aplikácie
  2. Rozdeľ a panuj Vidličku-Zaregistrujte sa techniky pre rozdelenie záťaže na viac úloh pre paralelné spracovanie

Tento článok vysvetľuje Dobyvateľ metódu (1700 slov)

Čo je to Vidličku-zapojiť?

Myslite na rázcestí, kde každá cesta nakoniec príde zase dohromady – sa pripojí.

Vidličku-Pripojte sa prestávky aplikácie do niekoľkých častí pre paralelné spracovanie a pripojí výsledky na konci.

Obrázok 1: Vidličku-Pripojte sa štruktúra

Povedzme, že máme rad tisíc čísel. Musíme urobiť postup na každej z týchto čísel a pridajte celkom.

Výpis 1: Array Processing

for (int i = 0; i < 1000; i++) {
total += doProcedure(array[i]);
}

V prípade, že proces trvá jednu sekundu (čas wall-hodiny) dokončiť, potom to bude trvať 1000sekunda (viac ako 16½ minút), na dokončenie tejto úlohy.

Vidličku-Pripojte sa mohol

  • samostatná (vidlice), veľké pole do desiatich polí sto prvkov každý,
  • spracováva každé pole na samostatné CPU, a
  • Po dokončení pripojiť výsledkov.

To by trvať sto sekunda (len niečo málo cez 1 ½ minúty), desatina pôvodného času. K dispozícii, tým rýchlejšie Výsledkom je, že viac CPU je.

Táto abstrakcia silne podobá štandardný vedecký model rozdeľuj a panuj.

Rozdeľ a panuj je prírodný paradigma pre paralelné algoritmy. Po rozdelení problém do dvoch alebo viacerých čiastkových problémov, spôsob rieši čiastkové problémy paralelne. Typicky, čiastkové problémy sú riešené rekurzívne a teda ďalší krok delenia sa získa ešte čiastkové problémy riešenia paralelne.

Obrázok 2: Rozdeľ a panuj

To je to, čo vysoko výkonné výpočtové je predovšetkým o – súčasne spracovanie humongous množstvo dát, ako budú k dispozícii toľko CPU. Mapa / Reduce, triedenie a vybavovanie žiadostí nespočet poľa všetky možno použiť rozdeľ a panuj riešiť ich problémy.

Vidličku-Pripojte sa v jazyku Java ™

K dispozícii sú štyri podnikovej triedy Vidličku-Zaregistrujte sa rámcov sú dnes k dispozícii:

  1. TymeacSE / ME / A – Jedná sa o trápne-Paralelné Vidličku-Vytvoriť rámca, ktorý rozdelil prácu na komponenty pre nezávislé vykonávanie na viacerých vlákien.
  2. TymeacDSE – To je Rozdeľ a panuj Vidličku-Vstúpte rámec (niekedy nazývaný “bodový zhromaždiť”), ktorá dynamicky rozkladá prácu do rovnakých úloh pre vykonávanie na viacerých vlákien.

Dobyvateľ je predmetom tohto článku. Projekt vznikol z dôvodu ich nedostatočnej kvality Vidličku / Pripojiť sa vedecký balíček zavedená v Java ™ 7.

Dobyvateľ atribúty

Ako to funguje

Klient volá server so žiadosťou:

  • Vykonajte tento postup (Užívateľské meno Class)
  • Pomocou tohto voliteľného vstupného objektu
  • Pre synchrónny požiadavky
    Počkajte na dokončenie nie viac, než tento interval
    Vrátenie stav hovoru a voliteľný objekt z triedy užívateľa
  • Pre asynchrónnych požiadaviek
    Okamžite vracia so štatútom volanie (úspešne plánovanej)

Jednoduché použitie

Samotný server – má rôzne možnosti pre realizáciu ako v embedded režime, ako aj pomocou RMI (Standard / aktivovateľné, IIOP, atď), protokolovanie, štatistiky stretnutia, detekcia chýb / obnovu a mnoho ďalších aspektov profesionálne, podnikovej triedy servera , Profesionálne dokumentácia (80 str html štýl manuálny) je krivka učenia jednoduchšie.
Trieda Užívateľ, ktorý robí prácu – je jednoduché. Myslite na to, ako uložené procedúry v RDBMS. Buď ste v práci, teraz alebo vyklopiť nové úlohy.

Klient, ktorý volá server spustiť triedu užívateľov – je jednoduchá a ľahká. Buď počkať na odpoveď (synchrónne vyžiadanie) A alebo sa dočkať (asynchrónne požiadavka.)

Nezávislosť

Server je úplne oddelená od klienta volajúci a triedy užívateľa. Server je schopný fungovať ako vložený subjekt v akejkoľvek triede alebo ako vzdialený objekt (RMI).

Trieda Užívateľ môže lokálne zdržiavať do triedy cestu servera alebo môže byť prístup na URL triedy Loader.

Volajúci Klient sa môže nachádzať kdekoľvek, aj v rámci triedy užívateľa (pri použití rekurzia).

Nezávislosť Code znamená jednoduchosť dizajnu, vylepšenia a ladenie; no špagety kód tu.

Štruktúra Dizajn / pracovné kradnutie vs. deľbe práce

Práca-Krádež využívaných.Pretaktovanie vlastníci prevziať iniciatívu; majú tendenciu kradnúť práce z iných procesorov.
Úlohy sú do a pracovných vlákien načítať úlohy z, v dolnej časti deque (double ended frontu.) Pri pracovných vlákien nemajú prácu vo svojom vlastnom deque, oni načítať Úlohy z vrcholu iného vlákna deque. Keď Úlohy musia čiastkové úloha práce, to dáva všetky nové úlohy do rovnakého deque, z ktorého pochádzajú.

Tento návrh môže obmedziť medzipamäte situácie a závit tvrdenie, pretože kradne nite načítať iba z hornej časti deque. Aspoň, že je to tak, ako to má byť. Work-Krádež práca krásne v operačných systémoch a uzavreté prostredie (Cilka.), Ale predpoklady držať malú váhu Java ™.

Aplikácie Java ™ beží pod virtuálny stroj. Niekedy sa za dva virtuálne stroje (sálové počítače spustiť Linux pod VM a Linux beží JVM.) Preto, Java ™ aplikácie môžete robiť žiadne predpoklady o všetkých cache.

Vzhľadom k tomu, všetky nové úlohy idú do rovnakého deque, pracie kradnúť závity majú veľmi vysoký potenciál pre konflikt medzi sebou, keď sa načítať úlohy z hornej časti tohto deque. Picture 32 nití / deques a 8 požiadavky klientov. Všetky úlohy pre 8 žiadostí ísť len do 8 deques. Teraz 8 závity načítať úlohy z vlastného deque, zatiaľ čo ostatné 24 závitmi musí bojovať medzi sebou do práce.

Pracovné Krádež závity sa treba prebudiť pravidelne a ísť hľadať prácu. K dispozícii je slabá korelácia medzi načasovaním v Java ™ a načasovanie na hardvér. N-ns spánok Java ™ nemusí vždy preložiť presne na základný systém. Úlohy môžu čakať v nezmenenom stave, kým vlákno konečne beží.

Rozdelenie práce plánovač sa snažia šíriť dielo medzi vlastníkmi v nádeji, že rozdeľovanie práce využívaných procesory
Conqueror využíva zdieľanie práce. Alebo presnejšie, bodový zhromaždiť. Plánovač miesta každú úlohu, do spodnej časti prvého prázdneho FIFO fronty nájde; nite načítať z vrcholu. Keď sú všetky fronty majú prácu, plánovač vyrovnáva umiestnenie úloha rovnomerne v celom systéme. Conqueror nezávisí na závity pravidelne prebúdza hľadať prácu, plánovač fyzicky prebudí každé vlákno pri pridávaní za úlohu, že je to front. Pre Conqueror, kedy aplikácia založí úlohy, je to pre všetky ruky na palube – nie sme platiť k odpočinku – každý vlákno pomáha dokončiť prácu tak rýchlo, ako je to možné.

Keď front sa vyprázdni, majiteľ niť ide hľadať prácu v iných frontoch. Vzhľadom k tomu, že fronty obsahujú vyvážené zaťaženie, potenciál pre tvrdenie je svetlo. Tiež, ak fronta udiveným vlákne naraz má prácu, vlákno sa zastaví svoj snooping a hneď siaha až do jeho vlastnej fronty.

Maximálna efektivita. Maximálna rýchlosť. Maximálna priepustnosť.

Mierka

U veľmi veľkých procesorových prostredie (stovky / tisíce CPU / jadier), Conqueror poskytuje možnosť použiť segmentáciu alebo indexy nad nití / frontu, aby urýchlili plánovanie a získavanie úlohy. To je škálovateľnosť funkcie dôležité pre skutočne paralelných aplikácií.

Užívateľ triedy Obmedzenie

Žiadne.

Na rozdiel od niektorých iných programov, ktoré výrazne obmedzuje prístup k vonkajším zdrojom (RDBMS, systémov hromadnej obsluhy, apod) a nemôže umožniť inter-úlohy komunikácie (prchavé pole), dobyvateľ má silné a odhaľovanie chýb stánok, takže akýkoľvek algoritmus je dobrý algoritmus.

Detekcia chýb / využitie, detekcia Stall / využitie

Výnimky User triedy reštartovať vlákien, chyby zakázať vlákna. Dobyvateľ tlačí / prihlási výnimku v podrobnej správe a upozorní správca tohto problému. Užívateľské Triedy môžu byť znovu načítaný pri výkone, bez toho aby zvrhnúť servera. Po neúspechu Conqueror sa snaží vycúvať akejkoľvek úlohy už naplánované. Vzhľadom k tomu, požiadavka je porucha, zastavenie prebiehajúce práce, alebo pred tým, než začne, listy závity voľné pokračovať užitočnú prácu.

Conqueror krát sedem udalosti v živote závitu. Týmto spôsobom run-a-cesta alebo čakanie, večne problém je zistiteľná Monitor Daemon. Keď Asynchrónne požiadavka prekročí obozretné časový limit, Conqueror pridá položku do “možná zastavil” zoznamu a upozorní správcu. Zoznam je možné vidieť a meniteľné administrátorov. Skutočne stratil vlákna (User triedy čaká na prostriedok, ktorý sa nikdy zadarmo), môžu byť vymazané a nahradené novú kópiu.

Štatistika stretnutie / repository

Conqueror podrobne sleduje štatistiky využitia pre závity, fronty, zastavil žiadosti, a užívateľských tried. Conqueror poskytuje zápis do úložiska ako na vyžiadanie a vypnúť.

Zabezpečenie

SSL bol postavený do dobyvateľ od samého počiatku. Nebolo potrebné využiť natívne rozhranie a hlavne nie je potrebné používať Nebezpečný triedu, aby obchádza všetky spravované bezpečnostné záruky behové a bezpečnostných funkcií. Dobyvateľ bol postavený ako 100% čistej žiadosti vývojári aplikácií s ostatnými vývojármi aplikácií v mysli.

Ladenie

100% čistý tiež znamená 100% laditeľné. Aplikácia beží na každom svete rovnaká JVM. Bez háčikov do VM (Unsafe trieda), nie sú tam žiadne prekvapenie, keď portování na iné operačné systémy a poskytovateľmi VM. Funguje to rovnako, len rýchlejšie alebo pomalšie.

Dobyvateľ ponúka sedem štatistiky užitočné pre analýzu výkonnosti vlákno, štyri štatistiky užitočné pre analýzu výkonnosti frontu a štyri štatistiky užitočné pre analýzu výkonu voliteľných indexov. (A samozrejme, kapitola v užívateľskej príručke pre ladenie.)

Správa

To nie je moc dobré, keď nikto nevie, čo to robí. A ak viete, čo to robí, určite chcete zmeniť.

Dobyvateľ je dodávaný s štrnástich GUI (a prístupu non-GUI), na zobrazenie a zmeniť vykonávajúci servera a tri GUI pre správu nastavení a prevádzkové premenné.

Obrázok 3: Ponuka

DSEMenu

Conqueror poskytuje dynamickú reakciu na neustále sa meniacom prostredí.

Vstavaných funkcií

Dobyvateľ ponúka šesť (6), vstavaných funkcií pre spracovanie pole; A tri (3), vstavaných funkcií pre spracovanie matrice.

pole:

Triedenie, sumácia, Map / Reduce, Filter, Scan (Parallel Prefix Sum), Search (paralelné sekvenčné Search)

Matrice (na pároch matrice)

Násobenie, sčítanie, odčítanie

Záver

Pomocou rámca Vidličku-Pripojiť k rozvoju výpočtovo náročných aplikácií je naporúdzi.

Našťastie, tam je general-purpose, Vidličku-Pripojiť rámec podporujúce vlastnosti vyššie uvedené pre viacjadrové aplikácie v jazyku Java ™ SE sú dnes k dispozícii. A pretože rámec môže spustiť ako RMI server (štandardne / aktivovatelného, IIOP a POA), je k dispozícii pre aplikácie Java ™ EE.

Tymeac ™ Rozdeľ a panuj pre Java ™ Standard Edition je projekt Open Source Software udržiavané na a môžete si stiahnuť najnovšiu verziu tu. , SourceForge.net

Referencie

Stiahnite si najnovšiu DSE vydanie Tymeac tu. Verzia popísaný v tomto článku.

Stiahnite si najnovšiu SE vydanie Tymeac tu. Trápne paralelný Vidličku-Zaregistrujte sa výrobok pre životné prostredie Java ™ SE.

Stiahnite si najnovšiu ME vydanie Tymeac tu. Trápne paralelný Vidličku-Zaregistrujte sa výrobok pre životné prostredie Java ™ ME.

Stiahnite si najnovšiu a vydanie Tymeac tu. Trápne paralelný Vidličku-Zaregistrujte sa výrobok pre životné prostredie Android ™.

Prečo ™ 7 kolekcie Java je učený balíček.

Site Cilka-Plus – http://software.intel.com/en-us/articles/intel-cilk-plus/

Ostatné Vidličku-Zaregistrujte sa články v tejto sérii:

“Trápne paralelný” Vidličku-Pripojiť modelu – Vidličku-Pripojte sa vývoj v Java SE

Použitie Počkajte, zoznamy pre účinnosť – Vysoký výkon prioritné fronty v Java SE

Java ™ SE Thread Container – Riadenie témy v Java SE

O autorovi

Edward Harned je softvérový vývojár so skúsenosťami cez tridsať rokov priemyslu. Najprv viedol projekty ako zamestnanec vo veľkých priemyselných odvetviach a potom pracoval ako nezávislý konzultant. Dnes, Ed je senior developer na družstevné Software Systems, Inc., kde za posledných dvanásť rokov sa použité programovanie Java ™, aby fork-join riešenie pre širokú škálu úloh.

 

 

 

Popular article: