Portál AbcLinuxu, 5. května 2025 15:10

Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích

20. 8. 2012 | Luboš Doležel
Články - Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích  

Aktuální verze jádra: 3.5. Citáty týdne: Dave Jones, Paul McKenney, Linus Torvalds. Sbohem Andremu Hedrickovi. Začleňovací okno verze 3.6, část druhá. ACCESS_ONCE().

Obsah

Aktuální verze jádra: 3.5

link

Začleňovací okno řady 3.6 je nadále otevřené, proto zatím nevyšla žádná vývojová verze. Do hlavní řady se mezitím valí novinky, více se dozvíte dále.

Stabilní aktualizace: verze 3.2.24 vyšla 26. července, verze 3.4.7 30. července a 3.0.39 1. srpna. Kromě obvyklých oprav obsahuje 3.0.39 také velké množství backportovaných patchů pro zvýšení výkonu správy paměti.

Verze 3.2.25 se aktuálně reviduje.

Citáty týdne: Dave Jones, Paul McKenney, Linus Torvalds

link

Pokud někdo musí číst kód, aby zjistil, k čemu ten ovladač vlastně je, tak asi stojí tvůj popis za houby.

-- Dave Jones

Počet podtržítek před původní lokální proměnnou v rcu_dereference() byl výsledkem dohadování, jak hodně by název proměnné měl být komplikovaný, aby nehrozily kolize s názvy v nadřazeném scope. Devět počátečních podtržítek může vypadat přehnaně, nebo, jak jsi sám řekl, šíleně, ale na druhou stranu se ke mně nikdy nedostala žádná zmínka o kolizi.

-- Paul McKenney

V těchto případech udělám merge sám, ale po pravdě kontroluji svůj merge oproti mergi správce. A už se párkrát přihodilo, že se můj merge lišil a právě ten můj byl ten správný. Správce možná zná svůj kód lépe, ale já se zase vyznám ve slučování. Dělám jich spousty.

-- Linus Torvalds

Sbohem Andremu Hedrickovi

link

Na The Register vyšel článek o životě a smrti Andreho Hedricka, bývalého správce IDE v jádře, který zemřel dne 13. července. V dnešní době miliony lidí používají systémy DRM, které uzamykají knížky, písničky a hudbu – jako příklad poslouží Amazon Kindle, BBC iPlayer a Spotify – ale spotřebitelé se do tohoto smluvního vztahu dostávají vědomě. Nejde o výchozí tovární nastavení, jak tomu mohlo být. PC zůstává otevřené a nestalo se z něj jednoúčelové zařízení. Andre si nikdy nechtěl přiznat své zásluhy v této věci. Vzpomínky jsou také shromažďovány na tomto blogu.

Začleňovací okno verze 3.6, část druhá

link

V době psaní tohoto textu bylo do jádra přetaženo už 8200 neslučovacích změn; to jsou od předchozího týdne téměř 4000. Vypadá to, že přání, aby tento cyklus byl drobnější, se nenaplní. Přesto jdou věci relativně plynule, jen s nepatrným množstvím problémů.

Mezi změny viditelné uživatelům za poslední týden patří:

Změny viditelné jaderným vývojářům zahrnují:

ACCESS_ONCE()

link

Dokonce i příležitostný čtenář jaderného kódu nakonec narazí na použití makra ACCESS_ONCE(), aktuálně se jich v jádře nachází přes 200. Mnoho čtenářů se nebude zabývat tím, co to vlastně znamená, nedávná debata v mailing listu navíc ukázala, že to neví ani spousta hlavních vývojářů.

Funkčnost tohoto makra je popravdě dobře popsaná už jeho názvem; smyslem je zajistit, že hodnota předaná jako parametr je ve vygenerovaném kódu přečtena právě jednou. Člověk by se mohl divit, proč na tom záleží. Ve výsledku jde o to, že kompilátor C bude, pokud nic nebude naznačovat jinak, předpokládat, že se v daném paměťovém prostoru vyskytuje pouze jedno vlákno. Concurrency není věcí vestavěnou přímo do jazyka C, takže nástroje pro souběžný přístup musejí být postaveny nad tímto jazykem; ACCESS_ONCE() takovým mechanismem je.

Zvažme například tento kus kódu z kernel/mutex.c:

    for (;;) {
	struct task_struct *owner;

	owner = ACCESS_ONCE(lock->owner);
	if (owner && !mutex_spin_on_owner(lock, owner))
	    break;
 	/* ... */

Toto je drobný kód, který doufá, že se mu podaří rychle bez uspávání získat mutex, jakmile jej aktuální vlastník uvolní. V tomto for cyklu je toho ještě mnohem víc, ale toto nám pro ukázku stačí.

Představme si, že použitý kompilátor pochází od fanatických vývojářů, kteří se budou snažit vše optimalizovat, jak to jen půjde. To není jen naprostá iluze, jak Paul McKenney nedávno dosvědčil: Viděl jsem tu jiskru v jejich očích, když diskutovali o optimalizacích, o kterých byste nechtěli, aby vůbec věděly vaše děti! Takoví vývojáři mohou stvořit kompilátor, který vyvodí, že protože tento kód neupravuje lock->owner, není nutné hodnotu číst při každém průchodu cyklem. Kompilátor pak může kód takto přeorganizovat:


    owner = ACCESS_ONCE(lock->owner);
    for (;;) {
	if (owner && !mutex_spin_on_owner(lock, owner))
	    break;

Kompilátoru ale uniká to, že lock->owner je mezitím měněno jiným vláknem. Výsledkem je pak něco, co si nepovšimne změn, což má neblahé následky. ACCESS_ONCE() této optimalizaci brání, a tak by měl kód fungovat dle očekávání.

Jak už se to stává, přístupy zrušené optimalizací nejsou jediným nebezpečím. Některé architektury procesorů (např. x86) nejsou obdařeny velkým množstvím registrů; na takových systémech se kompilátor musí opatrně rozhodovat, které hodnoty si uchová v registrech, aby měl kód co nejvyšší výkon. Některé hodnoty mohou být z registru vytlačeny a pak opětovně načteny. Pokud by se to stalo ve výše uvedeném kódu, výsledkem by mohlo být více přístupů k lock->owner. A to by mohl být problém; pokud by se hodnota lock->owner změnila uprostřed cyklu, kód, který by očekával, že se tak nestane, by mohl být závažně zmaten. ACCESS_ONCE() říká kompilátoru, aby to nedělal.

Implementace ACCESS_ONCE()linux/compiler.h je docela přímočará:

#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))

Funguje to tak, že to dočasně převede danou proměnnou na typ volatile.

Vzhledem k rizikům, jaká optimalizující kompilátory představují, byste se mohli divit, proč se s něčím takovým nesetkáváme častěji. Odpovědí je, že souběžný přístup k datům by měl být chráněn zámky. Spinlocky a mutexy oba fungují jako optimalizační bariéry, což znamená, že brání vlivu optimalizací z jednoho vlákna na druhé. Věci jako ACCESS_ONCE() jsou nutné jen tam, kde se ke sdíleným datům přistupuje bez zámku (nebo explicitních bariér). Požadavky na škálovatelnost mají vliv na vytváření více takového kódu, ale většina jaderných vývojářů toto nepotřebuje řešit.

Odkazy a zdroje

Kernel coverage at LWN.net: August 2, 2012

Další články z této rubriky

Jaderné noviny – přehled za březen 2025
Jaderné noviny – přehled za únor 2025
Jaderné noviny – přehled za leden 2025
Jaderné noviny – přehled za prosinec 2024
Jaderné noviny – přehled za listopad 2024

Diskuse k tomuto článku

20.8.2012 01:52 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Odpovědět | Sbalit | Link | Blokovat | Admin
Achjo, tyhle volatile prasarny fakt stoji za to. To makro ma fungovat presne obracene. Volatile ma byt default a pokud z nejake promenne nepotrebuju cist z vice vlaken tak si ji poznacim jako ne-volatile.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 07:54 dumblob | skóre: 10 | blog: dumblog
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
+1
20.8.2012 08:07 Michal2
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Já jsem člověk, který ten kód musí psát, takže by mě SRALO kdybych v 99.99 (spíše ještě více) % pripadu musel předepisovat nonvolatile. Tudíž ti dávám -1
D.A.Tiger avatar 20.8.2012 08:23 D.A.Tiger | skóre: 8 | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
+1
Radost z toho, že někdo objeví něco nového, je omyl starý 6000 let... (Jean Paul) | anthill inside
20.8.2012 09:05 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
A vy běžně v kódu běžně píšete třeba takové auto?
When your hammer is C++, everything begins to look like a thumb.
20.8.2012 12:26 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
auto označuje automatický typ, ne automatickou dedukci kompilátoru za pomoci binární křišťálové koule, jestli něco má být volatile nebo ne.
20.8.2012 16:02 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
S tím souhlasím, ale jak to souvisí s tématem vlákna?
When your hammer is C++, everything begins to look like a thumb.
20.8.2012 19:09 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
To, že nonvolatile by se muselo předepisovat i u všech prototypů funkcí a definicí struktur.
20.8.2012 20:03 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
No ono by hypotetické --std=little.owl bylo asi dost nekompatibilní s jakýmkoli jiným C, takže asi ne :)
When your hammer is C++, everything begins to look like a thumb.
little.owl avatar 20.8.2012 20:27 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
ono by hypotetické --std=little.owl bylo asi dost nekompatibilní s jakýmkoli jiným C
Ja se rad pobavim na svuj ucet, ale tady mi nejak nedochazi. Proc --std=little.owl ?
A former Red Hat freeloader.
20.8.2012 21:48 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
No už jenom změna typu proměnné na volatile a zavedení nového klíčového nonvolatile slova je přeci na nový standard ;-) A jiné jméno, než --std=little.owl mě prostě nenapadlo. Nic ve zlém.
When your hammer is C++, everything begins to look like a thumb.
little.owl avatar 20.8.2012 21:51 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Spojovat muj nick s takovou, od zacatku, peachovinou me temer urazi! ;-)

A former Red Hat freeloader.
20.8.2012 13:53 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Jasne. 99.99% promennych sdilenych mezi vlakny nepotrebuji byt volatile. To je fakt dobry blabol.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 19:55 tom
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
* Zjevne jste nepochopil, jak to Michal2 myslel.

* Promenne chranene mutexy/semafory/syscallem opravdu volatile byt nepotrebuji a takovych promennych je v userspace programech vetsina.
21.8.2012 10:48 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ale na ty snad tohle makro (o kterem se tady bavime) pouzivat nebudu, ne?
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 08:59 R
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Bud by si mal vsade volatile, alebo by bol vykon vies kde...
20.8.2012 13:48 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ano protoze je mnohem lepsi mit v pripade chyby podivne chovani kodu a nahodne hodnoty v promennych nez mit v pripade chyby nizsi vykon :-/
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 12:24 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Takže kód by vlastně vůbec neměl používat registry? (To je totiž význam volatile) Měl by taky za každou operací, která modifikuje paměť, provést memory barrier, aby se změna skutečně projevila na všech jádrech, protože jinak na to bude potřeba nějaká „další prasárna“? Tipuji, že jste nikdy nic takhle nízkoúrovňově nedělal, proto nemáte tušení, jak pomalá by taková aplikace byla.
20.8.2012 13:51 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Mam pocit ze neumis cist. Protoze to co pises se absolutne nevztahuje k tomu co jsem napsal ja. Cely vyznam toho makra je totiz v tom ze se volatile nepouziva a jenom tam kde je to potreba se pouzije tohle makro. Coz je prasarna.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 16:03 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
To ale může způsobovat výkonostní problémy v zamčených místech, kde je vhodné, aby se zámek držel co nejkratší dobu.
21.8.2012 10:47 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
No a prave proto by to makro melo fungovat obracene. Kdyz mas vykonnostni problem (coz je vec, ktera se hleda mnohem lepe, nez vznik nahodne hodnoty) tak si tu promennou poznacis jako ne-volatile.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 21:17 Kvakor
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Normální SMTP procesory memory barrier nepotřebují, mají speciální obvody, co zajíšťují koherenci cache a paměti mezi jádry (tj. tu "prasárnu" dělá hardware :-) ). Memory barrier je třeba až když se přistupuje k MMIO, ale jen pokud procesor neumí vypnou cachování jinak, např. u x86 jsou na to MTRR a u x86_64 atributy stránek.
20.8.2012 21:20 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Normální SMTP procesory
SMP nebo link! :-O
20.8.2012 23:05 Kvakor
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Jasně že tam mělo být SMP, tohle byla jen IT varianta freudovského přeřeknutí :-)
20.8.2012 23:21 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
A já se tak těšil na novou architekturu :-(.
21.8.2012 10:45 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Já se teda na SMTP procesory netěším. Toho spamu je už teď hodně :-)
little.owl avatar 20.8.2012 21:43 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Svet je pestrejsi a na jinych platformach to neplati, tohle jsou implementacne a platforme zavisle veci.
A former Red Hat freeloader.
20.8.2012 12:48 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
To mi prijde jako nesmysl, mnozstvi sdilenych promennych by melo byt co nejmensi, aby v tom byl poradek. S tvou logikou by se dalo tvrdit, ze vsechny promenne by mely byt z podstaty globalni a kdyz ji chci lokalni, tak si ji tak mam deklarovat.
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
20.8.2012 13:52 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Co ma pocet sdilenych promennych spolecneho s tim ze ty ktere jsou sdilene maji byt volatile?
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 16:30 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
ze ve slusnem kodu mas male mnozstvi sdilenych promennych (nejlepe) na jednom miste a mas je oznacene jako volatile a ostatni promenne to nepotrebuji, ergo implicitni volatile je nesmysl.
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
21.8.2012 10:46 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ale o nesdilenych promennych se tady vubec nevime. Bavime se tady o tomhle makru, ktere umoznuje mit sdilene promenne implicitne ne-volatile.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
20.8.2012 13:07 pc2005
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Všechny proměnný ne, ale všechny proměnný definující zámky ano. Zajímalo by mě kolik se na tom ACCESS_ONCE ušetří času.

P.S. Nejvtipnější pak je, když se přetypovává proměnná, která už volatile je :-D. Např. tady.
little.owl avatar 20.8.2012 13:15 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Tam nejde o usporu casu, ale o to, ze promenna muze byt asynnchronne zmenena z jineho threadu a tudiz nektere predpoklady na zaklade nichz kompilator muze udelal optimalizaci proste neplati.
A former Red Hat freeloader.
20.8.2012 17:39 Ivan
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
JJ, tohle jsou ty nejnechutnejsi chyby. Takovy system muze bezet mesice a vsechno krasne funguje. A najednou se pri vetsi zatezi vyhrouti s nejakou obskurdni chybou. Lidi co umi tohle fixnout jsou fakt machri, vetsinou se ale takova chyba vyresi az kompletnim prepsanim kusu aplikace.
20.8.2012 18:49 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Jo a buď by měly být všechny takový proměnný, kde může zapisovat 2 a více vláken, definovaný jako volatile (pak je ACCESS_ONCE zbytečné a je to workaround špatně definovaného kódu) a nebo se ptám jak velký výkon získám variantou: nesdílené proměnné + zamykatelné proměnné + proměnná, kterou mám nadefinovanou jako neměnnou, ale občas ji použiju jako volatile.

(když se nějaká proměnná jmenuje "lock" tak bych čekal, že bude už jako volatilní definovaná a nebudu ji muset přetypovávat)

Taky by mě zajímalo zda je nějaké využití efektu, kde musí být proměnná v jednu chvíli aktuálně načtená a po zbytek programu už může zůstat v registru.
little.owl avatar 20.8.2012 20:22 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Jo a buď by měly být všechny takový proměnný, kde může zapisovat 2 a více vláken, definovaný jako volatile
Ani volatile vam moc nepomuze,to je jen hint pro kompilator aby to nezoptimalizoval, volatile nevklada memory barrier.
A former Red Hat freeloader.
20.8.2012 20:40 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ovšem ACCESS_ONCE je volatile taky, nebo nějak paměťovou bariéru řeší? Jinak je to offtopic.

Samozřejmě v případě potřeby paměťové bariéry by se tam nějaká hodila.
little.owl avatar 20.8.2012 21:09 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
ACCESS_ONCE je volatile a to resi jen to ze vam kompilator neudela nejake nepredlozenosti pri optimalizaci. To zdali to budete moci bezpecne pouzit z vice vlaken, bude zalezet na implementaci kompilatoru a kontextu v jakem je kod pouzit - jedno jadro, pres stejne cache a podobne, cele je to implementacne zavisle.
A former Red Hat freeloader.
20.8.2012 21:15 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Mě jde o to, proč a zda je výhodnější přetypovat proměnnou někde v kódu a ne rovnou v definici.
little.owl avatar 20.8.2012 21:44 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Protoze to nemusi nestacit. Vy muzete napriklad k promenne pristupovat neprimo pres pointer jako k mistu v pameti a tam snadno kompilator dostanete do uzkych. Navic tohle reseni vam umozni toto chovani lokalizovat tam kde je to potreba.
A former Red Hat freeloader.
little.owl avatar 20.8.2012 21:44 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ehm: Protoze to nemusi stacit.
A former Red Hat freeloader.
20.8.2012 22:21 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Aha, tedy vzhledem k tomu, že lze udělat volatile pointer i pointer na volatile i volatile pointer na volatile proměnnou a za předpokladu, že tohle kompilátor ustojí. Pokud ne, tak je dost slabej (což ale klidně může být).

Tedy některé programy používaj pointery, které občas ukazují na volatile proměnnou a občas na normální? To mě přijde ale dost hazardní.
21.8.2012 07:58 Sinuhet
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Ted byste mel jeste vysvetlit, jak vam pomuze, ze pri pristupovani k promenne z vice vlaken si ji oznacite jako volatile.
21.8.2012 17:59 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
[rejp] Kromě speciálních případů nebude potřeba používat žádné makro :-D [/rejp]
20.8.2012 09:03 Anonymous
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Odpovědět | Sbalit | Link | Blokovat | Admin
Náhodné generátory čísel, nebo generátory náhodných čísel?

P.S.: Děti věděly.
Luboš Doležel (Doli) avatar 20.8.2012 09:58 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Díky.
20.8.2012 12:17 Sten
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Náhodné generátory náhodných čísel :-D
20.8.2012 13:12 Marek
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Odpovědět | Sbalit | Link | Blokovat | Admin
…Concurrency není věcí vestavěnou přímo do jazyka C…
od dubna 2011 a C verze C11 to už umí. Je otázka jak to umějí kompilátory a jak se s tím popasují při kompilaci kernelu.
little.owl avatar 20.8.2012 16:10 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Vzhledem k tomu, ze kernel se nedostal plne ani k C99, je mluveni o C11 v tomto kontextu z rise snu.
A former Red Hat freeloader.
20.8.2012 16:49 JoHnY2
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Souhlas. Na druhou stranu, nikdo nerika, ze jadro musi pouzivat zrovna uplne vsechno z C99 nebo C11. Pokud se dobre ohlidaj konflikty, tak neni problem pouzivat casti C11 relativne brzo.
21.8.2012 14:39 zulu
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Odpovědět | Sbalit | Link | Blokovat | Admin
Já bych teda od "access once" čekal právě to, že první for se má chovat jako ten druhý.
21.8.2012 18:00 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 2. 8. 2012: Jak se kompilátorům brání v optimalizacích
Jo mě to taky mate: Access once = načti jednou a pak recykluj hodnotu.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.