Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: leon 22. 03. 2015, 22:31:33
-
Ahoj,
nasměrujte mne prosím:
Je možné (a jak) vytvářet programy v C/C++, které by na holém multicore CPU dokázaly využít více jader?
Myslím BEZ OS!
Příklad: chci napsat program pro vývojový kit s Cortexem a čtyřjádrem, přeložit gcc a nahrát přes SWD do holého CPU.
Nemám namysli make -j4 apod. - kompilace mne nezajímá. Jde mi o to, jak napsat holý SW, kde bych třeba výpočet lineární separabilní transformace urychlil využitím více jader.
Situace s OS a plánovačem a knihovnou pthread je samozřejmě elementární, ale na to se neptám.
-
Podivej se jak se inicializuje vice jader v linuxovem kernelu. V zdrojacich najdes kod ktery aktivuje dodatecne jadra a ty pak take zacnou vykonavat instrukce, vzdy totiz boot probiha na jednom jadru. Ostatne, nejaky technical reference by te k tomu mel navest.
Muzu se zeptat jaky to je presne hw/cpu ?
-
Ahoj,
nasměrujte mne prosím:
Je možné (a jak) vytvářet programy v C/C++, které by na holém multicore CPU dokázaly využít více jader?
Myslím BEZ OS!
Příklad: chci napsat program pro vývojový kit s Cortexem a čtyřjádrem, přeložit gcc a nahrát přes SWD do holého CPU.
Nemám namysli make -j4 apod. - kompilace mne nezajímá. Jde mi o to, jak napsat holý SW, kde bych třeba výpočet lineární separabilní transformace urychlil využitím více jader.
Situace s OS a plánovačem a knihovnou pthread je samozřejmě elementární, ale na to se neptám.
Takže si chcete naprogramovat vlastní OS a plánovač? V tom vám samozřejmě nikdo nemůže bránit, ale dnes se k tomuto účelu obvykle používá Linux, právě proto aby to každý nemusel programovat znovu. A pro ty zarputile neodraditelné je Linux open source, takže je možné si zdrojáky nastudovat a předělat k obrazu svému.
-
bud chce tazatel psat kernel a pak najde mnoho informaci na webu a ve zdrojakach linuxu.
nebo chce psat paralelni vypocty, pak at to dela nad operacnim systemem.
michat tyhle dve urovne by totiz byl docela velky a zbytecny boj.
-
dal som do googlu: c++ parallel computing a prve dva linky boli microsoft!
-
dobrej zdroj k tomuhle muze bejt osdev wiki: http://wiki.osdev.org/Multitasking_Systems
-
Je možné (a jak) vytvářet programy v C/C++, které by na holém multicore CPU dokázaly využít více jader?
Je to možné, ovšem musíte si nastudovat mnoho dokumentace k CPU a udělat mnoho věcí, aby se tak stalo.
Zjednodušeně se to dělá tak, že druhé a další jádro si musíte spustit ručně.
Takže si chcete naprogramovat vlastní OS a plánovač? V tom vám samozřejmě nikdo nemůže bránit, ale dnes se k tomuto účelu obvykle používá Linux, právě proto aby to každý nemusel programovat znovu.
Nepotřebuje celé dopravní letadlo, stačí mu papírová vlaštovka ;)
-
Proc tak slozite?
http://en.wikipedia.org/wiki/RTLinux
-
Zkus openMP
-
Tak on napíše "BEZ OS!" a vy mu tu doporučujete různé OS. :)
-
my ho chcem presvedcit, ze to je blbost bez zisku.
-
http://www.arm.com/products/processors/cortex-a/arm-mpcore-sample-code.php
-
Tak to si musis proste stahnout nejakej manual k te dane procesorove architekture. Treba pro x86 je to ten intel system architecture manual nebo tak nejak. Tam musis nastudovat, jestli jsou nejake specializovane instrukce apod. Jak ale rikaji ostatni, proste se pokousis vytvorit cast operacniho systemu. Jenom tak napsat nejaky program, ktery si to bude sam resit a bude bezet treba na linuxu se ti asi nepodari, protoze z user space programu se ti to tezko podari.
-
mozna ze nejjednodussi metoda je kouknout se na tasky, ktere se provadi uvnitr linuxoveho jadra a vyrobit si vlastni task.
ze by to nebezelo v user-space, ale v kernelu, ale pro nejake vypocty to nema smyslu, zas je problem s float a knihovnama pro vypocty,
ktere jsou psane pro user-space.
-
V linux kernelu FPU ani pouzivat nejde.
-
V linux kernelu FPU ani pouzivat nejde.
kdyby mel vlastni kernel task, sam si v assembleru napsal vlastni funkce s pouzitim floatu, to by neslo?
tam je nejake omezeni?
-
float v kernelu:
http://stackoverflow.com/questions/13886338/use-of-floating-point-in-the-linux-kernel
-
jestli by neslo udelat kernelovy task, ktery by si vybral nejaka jadra kde by bezel, sam by byl neprerusitelny (uninterruptible) takze by klidne furt jel s floatama,
protoze by nepotreboval pri prerusenich ukladat float registry.
-
Jakou vyhodu ma to reseni? Kdyz vezmeme ze stroj ma 2 nebo 4 jadra, tak vzdy 1 jadro musite nechat na beh OS, zbyle pak muzou byt uninterruptible. Stoji to za -50 nebo -25% vykonu? Nez to radeji nechat pocitat na 4 jadrech v userspace s opravdu obcasnym prerusenim kvuli OS? Je evidentni, ze ideal bude tam rozjet linux.
PS. Taky bych rad pouzival x86 cpu v cache-as-ram rezimu, na nektere ukoly bych klidne zadratoval PCIe ale pameti se me resit nechce... v podstate takovy lepsi mikrokontroler... ale proste bez te pameti tam nic jednoduse nespustite. Zda to puvodnimu tazateli stoji za namahu, se ucit specifika procesoru nez aby se venoval vyvoji vlastni app..
-
ja s RDa souhlasim, ale nemam takove znalosti o detailech, takze to byl vlastne dotaz.
-
Takže si chcete naprogramovat vlastní OS a plánovač? V tom vám samozřejmě nikdo nemůže bránit, ale dnes se k tomuto účelu obvykle používá Linux, právě proto aby to každý nemusel programovat znovu.
Nepotřebuje celé dopravní letadlo, stačí mu papírová vlaštovka ;)
Bylo by ovšem vhodné zvážit zda vytvoření papírové vlaštovky nebude náročnější než zkopírování již hotového dopravního letadla.
-
Je možné (a jak) vytvářet programy v C/C++, které by na holém multicore CPU dokázaly využít více jader?
Myslím BEZ OS!
Není náhodou to, co hledáš, tohle?
http://www.returninfinity.com/baremetal.html
https://github.com/ReturnInfinity/BareMetal-OS
https://www.youtube.com/watch?v=uEMwSsra1EU
Můžu se zeptat, co plánuješ? Ten požadavek zní rajcovně :)