Společnost Meta ve spolupráci se společností Oakley oznámila řadu chytrých brýlí Oakley. První Oakley Meta HSTN si lze předobjednat za 499 dolarů.
Ministerstvo průmyslu a obchodu (MPO) vyjádřilo podporu předložení projektu AI Gigafactory CZ, který do veřejné konzultace Evropské komise zaslala společnost České Radiokomunikace (CRA) v rámci iniciativy Project AIGF CZ. Jde o významný krok k rozvoji výpočetní infrastruktury pro umělou inteligenci (AI), která je prioritou resortu. Projekt je v souladu s cíli Národní strategie umělé inteligence ČR 2030 a je již součástí návrhu
… více »Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 154 (pdf). S podtitulem Automatizace domácnosti.
Americký prezident Donald Trump podepsal exekutivní příkaz, který prodlužuje lhůtu pro prodej amerických aktiv aplikace TikTok vlastněné čínskou společností ByteDance do amerických rukou o dalších 90 dnů. Americký Kongres loni v dubnu kvůli bezpečnostním obavám přijal zákon, podle kterého měl vstoupit v platnost zákaz sítě TikTok v USA v případě, že se prodej neuskuteční do 19. ledna. Trump však v lednu lhůtu pro prodej prodloužil o 75 dnů. V dubnu pak přikročil k prodloužení o dalších 75 dnů, lhůta tak měla vypršet dnešním dnem.
Microsoft hodlá zrušit další tisíce pracovních míst, a to především v obchodních odděleních. Předchozí kolo propouštění se uskutečnilo v květnu a dotklo se 6000 zaměstnanců. Vedení firmy již dříve upozornilo, že vzhledem k rozsáhlým investicím do umělé inteligence (AI) se bude snažit omezovat výdaje v jiných oblastech.
Společnost Murena ve spolupráci se společností Qwant představila vyhledávač Murena Find. Ve výchozím nastavení bude používán v mobilním operačním systému /e/OS a v Murena Workspace.
V mobilní aplikaci Facebooku se lze nově přihlašovat pomocí Passkeys.
Společnost Midjourney představila vlastní generátor videí pomocí umělé inteligence (AI) V1 Video Model.
Editor kódu Zed (Wikipedie) má nově v sobě integrovaný debugger. Podporuje Rust, C/C++, JavaScript, Go, Python a pomocí rozšíření i další programovací jazyky.
Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie). Servo mimo jiné nově zvládne animované GIFy.
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.
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.
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.
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.
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í:
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() v 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.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
auto
?
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.
nonvolatile
by se muselo předepisovat i u všech prototypů funkcí a definicí struktur.
--std=little.owl
bylo asi dost nekompatibilní s jakýmkoli jiným C, takže asi ne :)
ono by hypotetické --std=little.owl bylo asi dost nekompatibilní s jakýmkoli jiným CJa se rad pobavim na svuj ucet, ale tady mi nejak nedochazi. Proc
--std=little.owl
?
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.
Normální SMTP procesorySMP nebo link! :-O
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 volatileAni volatile vam moc nepomuze,to je jen hint pro kompilator aby to nezoptimalizoval, volatile nevklada memory barrier.
…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.