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