Vajíčková mánie Vajíčková mánie
Od 15. do 21.4. slevy 20 až 80% v sekci C/C++. Když ne teď, tak kdy?
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde
Avatar
Kenvil
Člen
Avatar
Kenvil:4. ledna 22:34

Zdravím, mám otázku. Pokud bych chtěl aby Př: Funkce1 využívala pouze jedno jádro na CPU a Funkce2 druhé jádro co bych měl nastudovat nebo spíš jak bych se v C++ měl v tomto směru posunout dál ? Nebo mi stačí dávat funkce pouze do vláken ? Díky za odpověď

 
Odpovědět 4. ledna 22:34
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Kenvil
patrik.valkovic:4. ledna 23:35

Ahoj....operační systém nabízí pouze vlákna a procesy, v tomhle případě je lepší použít vlákna. Nastuduj si knihovnu std::threading.
Určitě jde nějak funkci donutit, aby běžela na jiném jádře, ale obecně se to nepoužívá a nechá se na operačním systému, aby běh naplánoval. OS pravděpodobně funkci na jiném jádře spustí, pokud není vytížený. POužití vláken by k tomu mělo stačit.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +3 4. ledna 23:35
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Kenvil
Martin Dráb:4. ledna 23:54

Pokud opravdu chceš nastavit, aby určité vlákno běželo pouze na určitém procesoru (nebo určité skupině procesorů), můžeš k tomu využít na Windows funkci SetThreadAffi­nityMask. Na jiných OS bude existovat funkce s podobným efektem.

Jak ale píše Patrik, spřažení vláken/procesů s určitými procesory se obvykle nepoužívá, protože operační systém (či framework) plánuje dostatečně dobře. Může se to hodit například v případě, že tvůj kód běží na NUMA stroji (mnoho procesů s různou vzdáleností mezi nimi a moduly paměti), takže opakovaný přesun vlákna z jednoho procesoru na jiný je extrémně drahý (a program může běžet dokonce pomaleji než třeba na běžném dvoujádře.

Nahoru Odpovědět  +1 4. ledna 23:54
2 + 2 = 5 for extremely large values of 2
Avatar
Kenvil
Člen
Avatar
Odpovídá na Martin Dráb
Kenvil:5. ledna 1:42

Jedná se o 2D hru "jen projekt do šuplíku" který obsahuje i 2D editor a idea tohoto všeho bylo aby funkce1 nebrzdila funkci2. Myslím si, že použití vláken bude nejlepším řešením.
Děkuji za odpovědi

 
Nahoru Odpovědět 5. ledna 1:42
Avatar
Jirka
Člen
Avatar
Odpovídá na Kenvil
Jirka:5. ledna 19:48

Ahoj,

chci říci, že je dobré, že máš vysoké cíle, hlavně s tím paralelismem v C. Dobrá knížka by možná mohla být například kniha Programování aplikací pro vícejádrové procesory, ale je asi dost náročná. Píše hlavně o využití C a částečně i Assembleru. Pokud s programováním jako takovým začínáš, možná by pro Tebe bylo lepší začít s vyššímy jazyky C# nebo Java, které jsou příznivější pro programátory a od počátku jsou vybaveny pro práci s vícejádrovými procesory a jejich využití. Při vývoji kritických aplikací se také dělá to, že se například napřed aplikace napíše ve vyšším jazyce (C#, Java) a po odladění se přepíše do výkonnějšího C nebo C++.

Přeji Ti úspěch. J.

Nahoru Odpovědět 5. ledna 19:48
Kdo nic nedělá, nic nezkazí.
Avatar
Kenvil
Člen
Avatar
Odpovídá na Jirka
Kenvil:6. ledna 9:37

Programuji už delší dobu čistě jen v C++, + k tomu používám grafickou knihovnu SFML,GL a sem tam WinApi. Ale přece jen sem se chtěl dostat trošku dále. Víc využívat vlákna, šablony a celkově se do toho více dostat, proto sem potřeboval poradit co přesně či jakou cestou se vydat. Každopádně už sem našel pár knih co odkazují na threading a problematiku s tím spojenou.

 
Nahoru Odpovědět  +1 6. ledna 9:37
Avatar
Jirka
Člen
Avatar
Odpovídá na Kenvil
Jirka:6. ledna 22:03

Ahoj,

to jsi dobrý, kolik toho umíš! Já jsem se zatím rozhodl vytvářet aplikace v Javě, někdy i s využitím paralelismu CPU jader.

Pole mě lepší volbou než Java a C# začínají být plně kompilované jazyky D a Rust. Oba jsou IMHO hodně moderní, rychlí a výborně využívající schopností hardware, jako CPU, GPU a ev. DSP jádra.

Ovšem C++ tu již je přeci jen déle a spoustu věcí můžeš prostě převzít a upravit. Dnes to již asi jinak nejde.

Přeji hodně štěstí.

Nahoru Odpovědět 6. ledna 22:03
Kdo nic nedělá, nic nezkazí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.