Kedves HUP-osok!
Terjednek a multicore procik és elszántam magam, hogy megtanulom
őket kihasználni.
Sok éves gyakorlatom van C-ben numerikus modellező progik írásában,
némi PVM, MPI ismeretem is van, úgyhogy nem 0-ról indulok.
A bajom az, hogy a keresőkkel egy vagon találatot kapok a témára és
nem tudom, melyiket válasszam.
Tehát: C programozási gyakorlattal és az alapfogalmak ismeretével
milyen doksi olvasását ajánljátok, amiből meg lehet tanulni, hogyan
lehet C-ben hatékony többszálú programokat írni?
Előre is köszi.
- 3445 megtekintés
Hozzászólások
Pthread man-nal es tutoriallal a neten.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Pthread-del az a baj, hogy két magnál még talán jó.
4+ magra már nem szivesen használnám.
Szerintem OpenMP környékén érdemes nézelődni.
(gcc 4.2 támogatja, minden más fordító régóta (intel, Ms...))
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
ezt most komolyan gondoltad?
majd a kernel szepen megoldja, hogy a sok szalad szaladgaljon
elosztva a sok procin, neked ezzel nem kell torodnod.
multi-core semmiben sem kulonbozik SMP -tol programozas
tekinteteben
[kernelben levo schedulernel is csak az osztott cache miatt
kezelik mashogy]
- A hozzászóláshoz be kell jelentkezni
"Terjednek a multicore procik és elszántam magam, hogy megtanulom
őket kihasználni."
Tehát multicore.
Újrafogalmazom, bár szerintem érthető volt.
Pthreaddel az a baj, (azon kívül, hogy munkásabb), hogy bizonyos szálszám felett (ami nálam mondjuk 4 :) ), már nem látod át a programot.
Illetve általában fix számú szálra programozol.
OpenMP-ben az a jó, hogy a program bizonyos keretek között skálázható marad. Mindez úgy, hogy nem került több programozói munkába.
Olvasnivaló:
http://www.intel.com/cd/ids/developer/asmo-na/eng/99708.htm
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
hat, az egyik szoftveremben /munkamenet szal van,
es ez altalaban minden pillanatban 130-200 kozott van :)
szerintem ha jol van megirva az egesz, tok mindegy hany szalad van.
marmint, ha tudod mit akarsz :)
(pl minden loginnal kap a juzer egy shellt egy interaktiv
programba, ami persze hogy egy szal.. de ezt csak egy pelda)
- A hozzászóláshoz be kell jelentkezni
A példád esetében eléggé triviális a "többszálasítás"...
Azért rengeteg olyan feladat van, aminek a párhuzamosítása messze nem az...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
"Pthread-del az a baj, hogy két magnál még talán jó.
4+ magra már nem szivesen használnám."
Megnéztem a pthread-et és az OpenMP-t is. Első benyomásom
az, hogy az OpenMP-ben elegánsabban lehet programozni, de
attól félek, a kód nem lesz annyira hatékony, mintha
pthread-del, jól megtervezve osztanám szét a feladatokat.
Nekem megéri többet programozni, ha a kód hatékonyabb lesz
tőle. Legalábbis a pthread nem tűnik ijesztően bonyolultnak.
Szóval: Az OpenMP-ben és a pthread-ben kódolt cucc
hatékonyságáról lehet sejteni valamit? Tehát amit írtál, az
a kódolás bonyolultsága vagy a lefordított progi hatékonysága
miatt van?
- A hozzászóláshoz be kell jelentkezni
Lehet, off, de én akkoris a Java-t ajánlom. :)
Esetleg a fortress-t, ami tán marketingként hat,de egy csábulást szerintem megér:
As a result, we are able to support features in Fortress such as transactions, specification of locality, and implicit parallel computation, as integral features built into the core of the language.
- A hozzászóláshoz be kell jelentkezni
Szimpatikus a Java, mint nyelv, de a kész kód hatékonysága
lényegében csak C-t, Fortrant enged meg.
A fortress-t megnézem.
- A hozzászóláshoz be kell jelentkezni
hali,
Imadom ezeket a "hatekonysag" szovegeket! Akkor nehany adalek:
1. 900Kbaud(!) sebesseggel mp-enekent 20-szor 64 byte lekerdezese egy mikroprocesszoros hw-tol, a kapott adatok fileba rogzitese.
(nem egyszer, ez egy templomi orgona, aminek az allapotait igy rogzitjuk, majd kesobb visszajatsszuk. Egy mu atlag 50-10 perces, de vannak nagyobb lelegzetu muvek is)
2. 19200 bauddal modbus protokollal egyszerre 4 eszkozrol adat iras/olvasas
(ebbol az egyik egy plc 110 regiszter irasa/olvasasa)
3. a 2. pont mellett meg egy halozati kommunikacio is egy 5. eszkozrol.
Termeszzetesen egy swinges feluleten a technologia megjelenitese.
a hw egy asus p5 alaplap 512 M ram, debian etch, atlagos load 0.4 korul.
Java 6.0 mustang
- A hozzászóláshoz be kell jelentkezni
az a baj, hogy nem erted mit ert hatekonysag alatt..
pl hogy ugyanaz az algoritmus itt gyorsabb, ott nem? :)
ne ilyen olvasgatasra gondolj, hanem mondjuk valami komolyabbra,
pl raytracing
- A hozzászóláshoz be kell jelentkezni
Szerinted egy ipari folyamat monitorozo program a lekerdezett adatokkal mit csinal (a 2. es 3. pont)? Egy kulon szalban fel is kell dolgozni a megszerzett adatokat.
Persze tudom, ez nem eleg... :)
- A hozzászóláshoz be kell jelentkezni
Hagyd... Nem érdemes.
--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..
- A hozzászóláshoz be kell jelentkezni
Miert nem ASM vagy microcode esetleg dedikalt ASIC ? :-)
- A hozzászóláshoz be kell jelentkezni
Szia!
Szerintem tetszőleges nyelven ha több szálat indítasz, azt az operációs rendszer több magra fogja elosztani (feltéve, hogy engedélyezed).
Öngólt azzal lehet lőni, ha túl sok szinkronizációra van szükség a szálak között. Tehát úgy kell szétvágni a problémát függetlenül futtatható darabokra (olyanokra, mint a Java Runnable objektumok), hogy azok között minél kevesebb szinkronizáció legyen. Aztán ezeket rá lehet bízni egy thread pool-ra, ami N darab szálon fogja futtatni őket.
Ezek eddig nyelvfüggetlen általános dolgok voltak.
OFF
A C-Fortran-Java kérdésre csak annyit mondanék, hogy azon poblémák esetén, amiket C-ben hatékonyabban lehet megoldani Javában is van két eszközünk:
- a C-style programozás. Ha Javában C stílusban (statikus metódusok, csak tömbök használata) írsz egy programot, az ugyanolyan gyors lesz, mint C-ben
- c library. Csak a sebességkritikus részeket írod meg C-ben, a többi(szinkronizáció!) maradhat Javában megírva. Ennek annyi előnye van, hogy a Java eleve multithread környezet, szépen meg van csinálva benne a multithread
ON
- A hozzászóláshoz be kell jelentkezni
Hatékonyság nehéz kérdés. Főleg mivel feladatfüggő.
Ha nagyon odafigyelsz, és mondjuk egy bizonyos hardware-re fejlesztesz (mondjuk 4 magra), akkor a pthread valószínűleg gyorsabb.
Ha csak megírod, kb gyorsra, és nem mész a dolgok mélyére, akkor szerintem nincs nagy különbség. (De OpenMp kényelmesebb.)
Ha meg fontos a skálázhatóság, tehát, hogy 2 év múlva 16 magon is kihasználja a vasat, akkor OpenMP. (Vagy valami még magasabb szintű lib.)
Egyébként az OpenMP jellegű, vagy még magasabb szintű, akár nyelvbe integrált módszereké a jövő. Lásd pl a c++ készülő szabványát...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Készül c++ szabvány? Kicsit késve, de sosem késő :-)
- A hozzászóláshoz be kell jelentkezni
Kb mióta az előző kijött... :)
A neve egyelőre C++0x (az előző volt a C++98), nevet nem akarnak változtatni, tehát elvileg 3 éven belül itt van. :)
gcc 4.3-ban már vannak kezdeti implementációk:
http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
Némi tavalyi áttekintés, ezek már tuti benne leszenek:
http://www.trolltechvideo.com/video/SJC/trolltech_bjarne_stroustrup_10-…
Egyébként meg google...
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Bevezetésként pl:
- A hozzászóláshoz be kell jelentkezni
Wow, ez piszok jo osszefoglalas. Kosz.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Talán nem teljesen ez az, amire gondoltál, de azért érdemes lehet megnézni (alig pár napja jelent meg):
Intel Threading Building Blocks
Az Intel megfelelő oldala:
- A hozzászóláshoz be kell jelentkezni