Zdravim,
nevim jestli je tento dotaz uplne vhodny do teto kategorie, ale nevedel jsem kam ho jinam umistit.
Mam otazku ohledne programovani pro vice jadrove systemy. Pokud mam napriklad vice jadrovy procesor, OS bere kazde jadro jako jeden procesor (zjednodusene receno), spravne ? A z C++ vim, ze lze v ramci aplikace vytvorit vice vlaken. Temto OS automaticky prirazuje procesorovy cas, a pokud to OS podporuje, sam i priradi ve kterem jadre vlakno nebo program spusti. Takze ja jako programator se nemuzu postarat, ve kterem jadre aplikace pobezi. Chapu to spravne ?
Ve skole nam ucitel tvrdil, dnesni aplikace nedokazi vyuzit kapacitu vicejadrovych procesoru. Myslel to v tom duchu, ze ja jako programator aplikace se musim postarat sam, aby aplikace bezeli na vice jadrech.
Pripada mi to cele zmatene, tak jestli mi to muze nekdo jednoduse vysvetlit bude velice vdecny :-), Diky
Fórum › C / C++
Multiprocesorove programovani
Nejsem přes tuto oblast odborník, ale "problém" vidím v tom, že programátor udělá aplikaci jednovláknovou - tzn. že OS nemůže rozdělit běh aplikace mezi 2 jádra.
Pro ověření této teorie jsme si zkusil vytvořit jednoduchý program, který jenom provádí 2 nesmyslné výpočty (tak aby co nejvíce vytěžoval procesor). První program jsme udělal jednovláknový, druhý jsme rozdělil do 2 vláken (v každém vláknu sólo výpočet). Poté jsme ve správci úloh sledoval vytížení procesoru. První program vytěžoval procesor na 50 % (jedno jádro), druhý na 78 % (2 jádra počítají).
Důležité je také řešit takový problém, který lze paralelizovat. Pokud se jedná o nějaký z principu sekvenční problém, tak nepomůže ani stojádrový procesor. Pokud se jedná o drobné neparalelizovatelné úlohy, kterých je větší množství, je obvykle jednodušší nechat dílčí úlohy jednovláknové a spouštět jich více najednou. Prostě něco na způsob
make -j 4
. Takže pokud například překódovávám 20 WAVů do MP3 a mám dvoujádrový procesor, je dobré spouštět aspoň dvě úlohy paraleleně. U překladu větších projektů se někde doporučovalo překládání v N+1 paralelních větvích, kde N je počet procesorů/jader. To +1 bylo z důvodu, že při čtení z disku může běžet i jiná aplikace a není nutné, aby ta čtoucí zablokovala celý procesor (ano, jsou OS, kde to takto skutečně funguje).
Pokud je zpracovávána nějaká úloha skutečně vícevláknově, je třeba si dát velký pozor na správnou synchronizaci a zároveň tu synchronizaci udělat tak, aby zůstal čas i na vlastní výpočet (aby se prostě jenom nesychronizovalo). Napsat a odladit takovou aplikaci je mnohem komplikovanější než napsat jednovláknovou. Chybu dost často není možné najít jinak, než čtením a analyzováním kódu. Chce to dost kázně.
Jinak si myslím, že v dnešní době už přibývá aplikací, které umějí více procesorů využít - např. střižny videa, různé překódovávače (tam se to vyloženě nabízí), programy na řešení velkých soustav rovnic apod.
Problém je také v tom, že naplánovat rozvržení běžících procesů (v OS) na jednotlivé procesory je značně komplikovaná úloha, která by sama o sobě dokázala jeden z nich plně vytížit :-). Co se týká matematických výpočtů, tak tam asi problém není. V "normálních" programech se ovšem něco sdílí, takže občas musí někdo na někoho čekat atd. Což jsou potencionální zdroje problémů. Vůbec to není tak snadné, jak by se mohlo na první pohled zdát. A pokud vím, tak to nikdo neumí optimálně pro obecnou sadu úloh. Možná to měl váš učitel na mysli.
Problém je také v tom, že naplánovat rozvržení běžících procesů (v OS) na jednotlivé procesory je značně komplikovaná úloha, která by sama o sobě dokázala jeden z nich plně vytížit :-). Co se týká matematických výpočtů, tak tam asi problém není. V "normálních" programech se ovšem něco sdílí, takže občas musí někdo na někoho čekat atd. Což jsou potencionální zdroje problémů. Vůbec to není tak snadné, jak by se mohlo na první pohled zdát. A pokud vím, tak to nikdo neumí optimálně pro obecnou sadu úloh. Možná to měl váš učitel na mysli.
Jo diky moc. Jeste se zeptam, pokud bych mel, ale spustene pouze jednovlaknove aplikace, OS kazdou priradi do jineho jadra, takze porad dojde k nejakemu celkovemu zrychleni, nez pokud bych mel pouze jednojadrovy procesor, spravne ?
To _Radek_ : Ano, tak by to mělo fungovat.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Síťové programování pod Windows a programování internet — založil Hanzis
Programovani C — založil XxX
C# - programovani — založil Siembra
Programovani C++ — založil jonny
Programovani za FO — založil abcdefg
Moderátoři diskuze