Nejnovější:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
Podle data:
- listopad 2021
- leden 2019
- prosinec 2017
- prosinec 2016
- květen 2014
- duben 2014
- listopad 2013
- duben 2013
- duben 2011
- únor 2011
- leden 2011
- srpen 2010
- květen 2010
- březen 2010
- leden 2010
- říjen 2009
- duben 2009
- únor 2009
- říjen 2008
- září 2008
- srpen 2008
- duben 2008
- březen 2008
- únor 2008
Téma:
Jak uvařit procesor
V předmětu Problémy a algoritmy jsme dostali za úkol vymyslet a implementovat algoritmus řešící problém batohu.
Vcelku odpočinková záležitost, implementaci hladovým algoritmem jsem měl hotovou již během cvičení. Na koleji jsem pak dopsal řešení hrubou silou (pomocí rekurze). Při přemýšlení jak to udělat co nejrychleji mě napadlo napsat rekurzi způsobem aby každá iterace běžela ve vlastním vlákně (každé vlákno s vlastní kopií dat). První implementaci jsem napsal bez omezení počtu spouštěných vláken, do baťohu naházel něco kolem 20 věcí a program spustil.
Trochu jsem to nedomyslel do důsledků, při dané konfiguraci to znamená spuštění něco přes milión vláken (pokud nejsou odbavována hodně rychle). Systém začal mít po pár vteřinách nesnesitelné latence, po dalších asi deseti vteřinách na mě vyskočila černá konzole s nápisem „halt“… Ani jsem si nestihl přečíst předcházející logovací hlášky a notebook se vypnul (to nebylo jádro, ale hw).
Chvíli jsem na to koukal s otevřenou pusou, po bootu jsem okamžitě hledal příčinu pádu. Soubor /var/log/kern.log končil následujícím:
Sep 28 12:53:52 myKubuntu kernel: [38901.142829] ath5k phy0: noise floor calibration timeout (2437MHz) Sep 28 12:59:05 myKubuntu kernel: [39213.659596] ACPI: EC: missing confirmations, switch off interrupt mode. Sep 28 12:59:34 myKubuntu kernel: [39243.031927] Critical temperature reached (144 C), shutting down. Sep 28 12:59:50 myKubuntu kernel: [39258.732920] ACPI Exception: AE_TIME, Returned by Handler for [EmbeddedControl] 20090521 evregion-424
Po přečtení těchto zpráv jsem nechápal ještě víc… Něco podobném jsem na standardně nakonfigurovaném hardwaru ještě neviděl. Vždy jsem žil v domnění že s fungujícím chlazením se tohle nikdy nemůže stát… Až příště budu programovat rekurzi, pokusím se být na svůj procesor hodnější.
Program jsem přepsal aby byl počet spuštěných vláken limitovaný. Zkuste si jej ale stáhnout a nastavit proměnnou THREAD_LIMIT na false :)