<html><body>Dobry vecer,<br><br>mozem sa Vas spytat na jednu taku zaujimavost. Ako riesite rozne typy procesorov v sw, napr. celeron a i7. Mate nejake rutiny optimalizovane priamo na jadro, ktore by vyuzivalo tie ktore crty jednotlivych procesorov? Myslim si, ze minimalne v grafike by to mohol byt dost velky prinos.<br><br>A.<br><br><br>On Sun, 11 Sep 2011 22:18:13 +0200 (CEST)<br> Vojtěch Bubník <bubnikv@seznam.cz> wrote:<br>>> Obecně CAD je single task, ale výrobci se snaží (vesměs s mnohaletým<br>>> zpožděním) některé zdlouhavé operace (renderování, nověji třeba FEM<br>>> nebo u CAMu výpočet drah) upravit tak, aby uměly využít víc <br>>>procesorů<br>>> (nebo dokonce distribuované výpočty). Jde to ztuha, ale postupně se<br>>> situace zlepšuje :-) Za ty prachy aspoň něco :-)<br>> <br>> Ono s vícejádrovými procesory je to podobně jako s megapixely u <br>>digitálního foťáku. Teoreticky výkon zvýší, ale prakticky to tak <br>>
jednoznačné není. Situace je ještě relativně přehledná, pokud člověk <br>>"jenom" potřebuje spustit několik různých aplikací najednou. Je <br>>určitá pravděpodobnost, že se nebudou přetahovat o přístup k disku, o <br>>paměť atd.<br>> <br>> Programátoři jsou zvyklí myslet sekvenčně. Valná většina algorimů <br>>byla vymyšlena v době jednoprocesorových systémů. Mnoho algoritmů <br>>paralelizovat vůbec nejde, a nebo jde, ale dnešní architektura takové <br>>paralelizaci moc nepřeje. Synchronizace vláken je poměrně drahá <br>>záležitost, takže na dnešních počítačích je třeba psát tak, aby se <br>>zas tak moc nesynchronizovalo. Ideálně se dá paralelizovat například <br>>algoritmus: máš dvě množiny 3d bodů. Najdi pro každý bod z jedné <br>>množiny nejbližší bod v druhé množině. Sestaví se vyhledávací <br>>struktura pro první množinu, proti které se provede vyhledávání pro <br>>každý bod z druhé množiny. Vyhledávací struktura se vejde celá do
<br>>cache.<br>> <br>> V praxi to vypadá tak, že historicky je celá aplikace psaná <br>>jednovláknově a pak se podle potřeby paralelizuje to co aspoň trochu <br>>jde. Většinu času běží jedno či dvě vlákna, ale při déletrvající <br>>operaci je znát, pokud trvá třeba 1s na čtyřjádrovém procesoru místo <br>>4s na jednojádrovém. Prostě paralelizuje se to, co se nejvíc vyplatí <br>>a co jde. Z mé zkušenosti často jdou paralelizovat právě ty <br>>algoritmy, které dlouho trvají, neboť jsou implementovány nějakým <br>>naivním, či iterativním algoritmem.<br>> <br>> Spousta knihoven samy o sobě nejsou "thread safe", a nebo sice jsou, <br>>ale takovým způsobem, že paralelizaci zabijí. Například implementace <br>>std::stream v MS VC10 používá globální zámky tak blbě, že <br>>paralelizovaná aplikace běží výrazně pomaleji než jednovláknová.<br>> <br>> Často se mi podařilo zrychlit algorimus víc profilováním a postupným <br>>vylepšován
ím jednovláknové implementace, než paralelizací. I to je <br>>realita dnešních počítačů.<br>> <br>> Vojta Bubník<br>> _______________________________________________<br>> HW-list mailing list - sponsored by www.HW.cz<br>> Hw-list@list.hw.cz<br>> http://list.hw.cz/mailman/listinfo/hw-list<br></bubnikv@seznam.cz></body></html>