Kezdőoldal » Számítástechnika » Programozás » Értelmes elgondolás egy...

Értelmes elgondolás egy programot úgy felépíteni, hogy a számítás igényes részeket kiszervezem unmanaged C++ project-be és dll-eken keresztül használom őket C# alól?

Figyelt kérdés
Unmanaged kódnak jobb a futási ideje, C#-ban meg könnyebb/gyorsabb grafikus felületet fejleszteni, meg kismillió .NET támogató eszköz van amik könnyítik a fejlesztést. Ezek az indokok elégségesek lehetnek egy hibrid rendszer létrehozására?

2014. máj. 27. 12:22
1 2
 1/17 anonim ***** válasza:
Igen, sőt ezt így is szokás.
2014. máj. 27. 12:51
Hasznos számodra ez a válasz?
 2/17 anonim ***** válasza:
Igen, de nem minden esetben éri meg. Ha komoly számítási feladatról, van szó ahol ez komolyan befolyásolja a szoftver futási idejét, akkor megéri. Különben felesleges bonyolítás.
2014. máj. 27. 17:04
Hasznos számodra ez a válasz?
 3/17 anonim ***** válasza:
Az esetek többségében ez felesleges. Ha nem egy szűkös hardverre kell egy nagyon teljesítmény igényes dolgot optimalizálni, akkor az algoritmus teljesítménye számít, nem pedig az, hogy az adott nyelv mennyire állít elő optimális kódot. Akár Python nyelven is írható, pedig az százszor is lassabb a C++ nyelvnél. Sőt, van olyan eset is, amikor egy gyenge teljesítményű nyelvben optimálisabb programot lehet írni. Big data rendszerek esetén néha dinamikus nyelveket használnak, de az adat szerkezetek kódját például LLVM el oldják meg. Így, sokkal optimálisabb lesz a futásidő, mint bármilyen statikus nyelven, hiszen a statikus nyelv csak fordítás időben állít elő optimális kódot, a dinamikus pedig az adat alapján is tud optimalizalni. Persze, nyilván C++ nyelven is lehet dinamikusan programozni, csak az nem erre van kitalálva.
2014. júl. 3. 18:29
Hasznos számodra ez a válasz?
 4/17 A kérdező kommentje:
Egy végeselemes programrendszeren dolgozom ... gyakran előfordul, hogy síkidomokat és testeket kell százával elmetszeni egymással, vagy tízezer ismeretlenes egyenletrendszereket kell megoldani ... nemtudom ezeket mennyire lenne értelmes dolog C#-ban leprogramozni.
2014. júl. 3. 18:53
 5/17 anonim ***** válasza:
Teljesen értelmes. Miért ne lenne az? Van teljesítmény problémád? Ha igen, akkor valószínűleg vagy a programod rossz, vagy egyszerűen nem lehet tovább optimalizálni. A C++ és a C# teljesítmény különbsége akkor lesz jelentős, ha például folyamatosan futtatni kell a programot több gépen is. Mert ilyen esetben esetleg kevesebb gép is elég lehet. De amíg csak alkalmanként futtatod a programot, és az megfelelő időn belül lefut, ezen nem kell aggódni.
2014. júl. 4. 18:23
Hasznos számodra ez a válasz?
 6/17 anonim ***** válasza:

"Ha igen, akkor valószínűleg vagy a programod rossz, vagy egyszerűen nem lehet tovább optimalizálni."

Persze, vagy csak a garbage collector meg a tömbök objektumként kezelése lehúzza a teljesítményt. Minden egyes tömbelem elérése C#-ban boundary checket okoz, megérheti a C++-ban megvalósítás.

2014. júl. 4. 18:57
Hasznos számodra ez a válasz?
 7/17 anonim ***** válasza:

"Minden egyes tömbelem elérése C#-ban boundary checket okoz, megérheti a C++-ban megvalósítás."


hűűűha!


De szerintem nem érted, hogy mit magyaráztam.


A boundary check nem változtatja az algoritmus komplexitását.


Itt pedig ami fontos, az az algoritmus komplexitása.


Az ilyen jellegű optimalizálásra, mint a boundary check megszüntetése, akkor van szükség, amikor sok számítógépen kell futtatni a programot, vagy pedig egy gyenge számítógépen kell mindenképp jó teljesítményt elérni. Az előbbi jellemzően szerverek, video renderelés, osztott rendszerek esetén jelentkezik, az utóbbi meg játékok, grafikai alkalmazások, stb. esetén. Ha van egy programod, aminél nem kulcselem a realtime interakció, és nem futtatod folyamatosan, hanem csak alkalmanként, akkor az ég egy adta világon semmi jelentősége nincs annak, hogy mennyire optimális futásidő szempontjából az adott nyelv.


pl. sok tudományos számításhoz is Python nyelvet használnak, pedig az vagy 100-szor lassabb, mint a C++. Így a program lehet, hogy 3 nap helyett 7 nap alatt fut le. De, ha a programot megírni 100 nap helyett csak 90 nap volt, akkor máris nagyon-nagyon megérte a Python-t használni, hiszen az eredményt ígyis, úgyis hamarabb kapod meg. A különbség pedig általában nem 100 nap vs. 90 nap, hanem inkább 100 nap vs 60 nap

2014. júl. 4. 19:58
Hasznos számodra ez a válasz?
 8/17 anonim ***** válasza:

"Itt pedig ami fontos, az az algoritmus komplexitása."

Sajnálom, de a gyakorlatban számít a lineáris gyorsítás, ha egy-egy műveletet megspórolsz a tömb eleminek elérésénél (ami nagyságrendileg legalább milliószor megtörténik). Ez nem arról szól, hogy mennyi idő alatt írod meg a programot, hanem ugyanannál az algoritmusnál a kényelmi funkciók hatással vannak a teljesítményre.

2014. júl. 4. 20:12
Hasznos számodra ez a válasz?
 9/17 anonim ***** válasza:

""Itt pedig ami fontos, az az algoritmus komplexitása."

Sajnálom, de a gyakorlatban számít a lineáris gyorsítás, ha egy-egy műveletet megspórolsz a tömb eleminek elérésénél (ami nagyságrendileg legalább milliószor megtörténik). Ez nem arról szól, hogy mennyi idő alatt írod meg a programot, hanem ugyanannál az algoritmusnál a kényelmi funkciók hatással vannak a teljesítményre."


hmm. És ennek én hol írtam az ellenkezőjét? Én pontosan ugyanezt írtam, és gondolom. Csakhogy, ez nem érv arra, hogy a futásidőre optimalizálj. Miért is lenne? Az, hogy vannak olyan nyelvek, amelyekkel a futásidőre lehet optimalizálni, nem implikálja azt, hogy ez az egyetlen lehetséges megközelítés. Mint ahogy írtam, van amikor ez fontos, van amikor meg más. Ha csak egy eredményre van szükséged, akkor nem az számít, hogy a nyelv milyen fontos, hanem az, hogy a szoftver elkészítése, és futtatása együttesen mennyi időt tesz ki. Sőt, képzeld gazdasági indokok is léteznek, meg kódfenntarthatóság.


Igen, ha mindenképpen futásidőre kell optimalizálnod, akkor inkább C++-t válassz, mint C#-ot. Ez evidens. Ugyanakkor az is evidens, hogy ezzel önmagában semmit nem érsz el, mert nem ettől fog optimális lenne a programod. Ha írsz lineáris helyett egy exponenciális algoritmust, akkor nem sokra mész azzal, hogy C++-t választottál C# helyett. Ezért írtam azt, hogy az algoritmus többet számít, mint a nyelv.

2014. júl. 4. 20:17
Hasznos számodra ez a válasz?
 10/17 anonim ***** válasza:
Ez egy számításigényes feladat, amit többször is le szeretne futtatni. Te a gyors prototípus készítést magyarázod, de annak semmi köze a kód karbantarthatósághoz, a prototípus ezután kidobjuk és megírjuk rendesen - tanulva a tapasztalatainkból. Ha egyszer kell van más szempont is igen. De egy ilyen feladatot még jó, hogy futásidőre optimalizálok. Mindenki arra optimalizálna.
2014. júl. 4. 20:37
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!