Latest:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
By month:
- November 2021
- January 2019
- December 2017
- December 2016
- May 2014
- April 2014
- November 2013
- April 2013
- April 2011
- February 2011
- January 2011
- August 2010
- May 2010
- March 2010
- January 2010
- October 2009
- April 2009
- February 2009
- October 2008
- September 2008
- August 2008
- April 2008
- March 2008
- February 2008
Topic:
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 :)