Vícejádrové procesory jsou výzvou pro vývojáře

2. 8. 2009

Sdílet

S příchodem vícejádrových procesorů musejí vývojáři začít používat techniku zpracování více jádry, aby zajistili maximální výkon svého softwaru. To je však mnohem snazší říci než provést.

Vývojáři musejí vyřešit problémy se souběžným zpracováním a potenciálními hrozbami snížení výkonu kvůli různým úzkým místům. Podle nedávného průzkumu IDC sponzorovaného dodavatelem nástrojů Coverity v současné době již 71 % organizací vyvíjí vícevláknové aplikace pro vícejádrový hardware. Vícejádrové procesory se stávají významnými i díky tomu, že ty jednojádrové vyčerpaly své tepelné a výkonnostní možnosti. Vývoj vícejádrových čipů je také poháněn kvůli spotřebě elektrické energie.

Výrobci čipů jako Intel či AMD přidávají do svých procesorů další jádra. „Více než 20 let jsme skutečně mohli plout na vlně zvyšování výpočetního výkonu prostřednictvím zvyšování frekvence,“ uvádí Lynne Hillová, generální ředitelka pro paralelní výpočetní platformy v Microsoftu. Nyní jsme však narazili na zeď (spotřeba energie), a má-li se zvýšit výpočetní síla počítačů, musí se změnit podoba hardwaru, dodává.

Ten se však již ve skutečnosti mění, což přesouvá břemeno na vývojáře, aby tomu přizpůsobili své aplikace. Tvůrci softwaru se musejí naučit nové techniky a používat moderní nástroje pro maximalizaci výkonu, protože vícejádrové procesory pracují jinak než ty jednojádrové – zpracovávají více instrukcí současně.

Znamená to, že software musí rozdělit své instrukce, aby je bylo možné zpracovat paralelně. „Máte-li více jader, měl by váš program využít jejich výhody a spouštět instrukce na těchto jádrech současně,“ říká Ben Chelf, technologický ředitel ve společnosti Coverity, která nabízí nástroje pro vícejádrový vývoj programů. „Problém však spočívá v tom, že dosud nemusel být software navrhován k paralelnímu zpracování na více jádrech. Vždy pracoval jen na jednom,“ uvádí Ray DePaul, výkonný ředitel společnosti RapidMind, dalšího dodavatel nástrojů pro vícejádrový vývoj.

Cliff Click, inženýr společnosti Azul Systems, který poskytl veřejnosti technické prezentace problematiky ohledně rozsáhlých současně běžících programů, zdůrazňuje obtíže při psaní vícevláknových programů. „Je to velmi složité, i když to tak zpočátku nevypadá,“ varuje. Korporace jako Intel, Microsoft a Sun Microsystems poskytují podporu pro vícejádrové a paralelní programování.

Nabídka Intelu
„Vývoj softwaru pro více jader je opravdu velmi obtížný,“ vysvětluje James Reinders, ředitel marketingu divize vývojářských produktů ve firmě Intel. Zdůrazňuje, že souběžné zpracování zasluhuje ve vývoji největší pozornost. „Píšete-li paralelní program, je snadnější udělat jej nedeterministickou metodou, což znamená možnost různých výstupů a logických cest,“ pokračuje Reinders. Vývoj vícejádrových aplikací podle něho vyžaduje mnohem složitější proces při promýšlení návrhu softwaru, než si mnozí vývojáři představují. „Obecně vzato s tím většina programátorů nemá zkušenosti a potřebují nástroje i školení, které by jim pomohly získat potřebné znalosti.“

Intel se pokouší podporovat vývojáře, kteří nejsou schopni zvládnout změnu paradigmatu sami. Nabízí svou knihovnu šablon Threading Building Blocks, která programátorům v jazyce C++ pomáhá s paralelním programováním. Nástroj Intel Thread Checker jim zase dovoluje nalézt nedeterministické programátorské chyby, zatímco řešení Intel Thread Profiler pomáhá program vizualizovat a kontrolovat činnost jader. Intel má také projekt knihovny kódu s názvem Ct pro jazyk C for Throughput, který se zaměřuje na poskytování stavebních bloků pro běžné případy paralelizace práce s daty.

Synchronizace je při paralelním programování důležitá, aby se zabránilo tzv. soupeření, jak poznamenává Reinders. Při něm nejsou řádně synchronizovány souběžné okolnosti, takže pořadí dokončování ovlivňuje konečný výstup. Může také nastat zablokování programu – instrukce, které se zpracovávají paralelně, začnou čekat jedna na druhou, aby se mohly dokončit, takže k dokončení nikdy nedojde.

Pomůcky Microsoftu
Microsoft se také snaží podporovat paralelní zpracování. „Budeme integrovat paralelní zpracování do našich hlavních produktů pro vývoj aplikací,“ uvádí Hillová. Například modul Concurrency Runtime pro souběžné zpracování poskytuje vrstvu obecného plánování, která poskytuje aplikacím vynikající kontrolu nad alokovanými prostředky. Technologie bude součástí plánované platformy Visual Studio 2010 a je obsažena v její předběžné edici CTP (Community Technology Preview).

Na pořadu dne jsou také příslušná rozšíření pro jazyky, a to jak v nativním, tak i v řízeném kódu. Microsoft se bude zabývat knihovnami i službami pro vývojáře a navíc vyvinul řešení PLinq, které přidává paralelizaci do jeho technologie dotazů Linq (Language-integrated query). Společnost také nabízí odpovídající vylepšení pro jazyky prostřednictvím využití modulu Concurrency Runtime.

Nástroje Sunu
Sun Microsystems zvažuje vícejádrovou problematiku z hlediska potenciálních vylepšení JVM (virtuální stroj Java, Java Virtual Machine). „Ve stroji JVM lze provést celou řadu optimalizací,“ uvádí Danny Coward, šéfarchitekt pro klientské nasazení Javy ve společnosti Sun. „Některé z nich jsme již provedli. Podařilo se nám toho více, než jsme původně zamýšleli.

Aplikační vrstva Javy má podpůrné funkce vestavěné do programovacího modelu pro aplikace, aby bylo možné využít výhody více jader a více procesorů, jak uvádí Coward. Pro využití paralelních procesů použil Sun duální přístup: paralelizaci virtuálního stroje a podporu aplikací pomocí souběžného modelu. Ten je potřebný, když aplikace provádějí rozsáhle sériovou práci – například jde o programy pro zpracování rozsáhlých objemů dat, poznamenává Coward.

Vydání Java Platform Standard Edition (SE) 2004 obsahuje prostředí pro souběžné zpracování, které využívá API, aby umožnilo vývojářům pracovat s velkým množstvím dat. Toto prostředí také dovoluje tvůrcům softwaru rozdělit úlohu na menší části, které lze provést v různých vláknech paralelně, popisuje Coward.

U plánované sady Java Developer Kit 7, která je implementací Java SE 7, Sun zvažuje nový typ tzv. garbage kolektoru (určeného pro správu paměti), který by více využíval paralelního zpracování. Současný kolektor Javy nelze, jak uvádí Coward, na více jádrech vždy optimalizovat. Sada je naplánována na konec letošního roku. Pro JDK 7 jsou také plánována souběžná API,  například pro dělení/slučování.

Dostupnost roste
„Dnes korporátní vývojáři obvykle používají k vývoji vícejádrových a vícevláknových aplikací integrovaná vývojová prostředí a určitou úroveň automatizované garance kvality,“ tvrdí Melinda Ballouová ze společnosti IDC. „Pokoušejí se o častější vydávání inovací softwaru a vícejádrovou podporu do něj přidávají postupněse  získáváním zkušeností.“

Click z firmy Azul, který pracoval na vývoji JVM během své činnosti ve společnosti Sun, tvrdí, že existují jazyky, které se pokoušejí vícejádrové problémy řešit. Jedním z nich je Clojure, který poskytuje možnosti pro vícevláknové programování JVM. Dalším jazykem v této oblasti je Scala, který je s Javou interoperabilní, dodává Click a vývojářům doporučuje používat nástroje a knihovny Java i JDK pro souběžné zpracování a zároveň studovat dokumenty popisujících ty nejlepší postupy –  jako je třeba Java Concurrency in Practice od Briana Goetze.

Mezi specializované dodavatele vícejádrově orientovaných vývojových nástroje patří firmy Cilk Arts, Coverity, Fortify, RapidMind, a SureLogic.