Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: leon 22. 03. 2015, 22:31:33

Název: Multicore program v gcc na holém železe
Přispěvatel: 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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: RDa 22. 03. 2015, 22:50:30
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 ?
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: Kolemjdoucí 22. 03. 2015, 22:51:22
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 22. 03. 2015, 23:20:55
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: e3k 22. 03. 2015, 23:36:18
dal som do googlu: c++ parallel computing a prve dva linky boli microsoft!
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: mt 22. 03. 2015, 23:40:16
dobrej zdroj k tomuhle muze bejt osdev wiki: http://wiki.osdev.org/Multitasking_Systems
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: Kolemjdoucí 23. 03. 2015, 08:24:28
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 ;)
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: TiB 23. 03. 2015, 13:47:33
Proc tak slozite?

http://en.wikipedia.org/wiki/RTLinux
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: VB 23. 03. 2015, 14:02:13
Zkus openMP
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: Pan Jan 23. 03. 2015, 16:15:23
Tak on napíše "BEZ OS!" a vy mu tu doporučujete různé OS.  :)
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 18:31:06
my ho chcem presvedcit, ze to je blbost bez zisku.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: uCSimply 23. 03. 2015, 18:43:29
http://www.arm.com/products/processors/cortex-a/arm-mpcore-sample-code.php
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: kyklopecek 23. 03. 2015, 20:16:55
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 21:05:29
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: RDa 23. 03. 2015, 21:47:02
V linux kernelu FPU ani pouzivat nejde.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 21:48:58
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?
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 21:51:42
float v kernelu:

http://stackoverflow.com/questions/13886338/use-of-floating-point-in-the-linux-kernel
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 21:57:04
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: RDa 23. 03. 2015, 22:16:20
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..
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: fvesfesrgzdsf 23. 03. 2015, 23:05:12
ja s RDa souhlasim, ale nemam takove znalosti o detailech, takze to byl vlastne dotaz.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: Kolemjdoucí 23. 03. 2015, 23:55:00
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.
Název: Re:Multicore program v gcc na holém železe
Přispěvatel: Mirek Prýmek 24. 03. 2015, 00:52:45
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ě :)