Matematikai algoritmusok

Fórumok

Sziasztok!

Megint egy érdekes választás elé kerültünk. Ebben szeretném a SZAKMAI segítségetek kérni.

Eddig a következő környezetekben fejlesztettünk:
- szimulációk -> Linux-RT C++
- felőletek (szerk: felületek) -> MacOSX Objective-C

Jelenleg több számítás igényes (matematikai) analízist kellene elkövetnünk. Oprendszernek (fejlesztés + release) MacOSX-et favorizáljuk.

Ti melyik programnyelvet választanátok a problémához? Miért? Esetleg másik Oprendszer?

Hozzászólások

irj egy alap algoritmust mindkettoben, szt teszteld a futasidoket mindket lehetosegen. persze nem kell tulzasba vinni.

De ne feledd: a rossz programozo minden nyelven rossz programot ir. ha valamelyik eredmeny igen szar, akkor elobb elemezz, s csak utana jelentsd ki, hogy xyz nyelv abc os-en szar.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

HA tényleg teljesítményigényes C/C++.
De sokszor nem nagy veszteség scriptnyelvet használni, hiszen azoknak a matematikai moduljai is C-ben íródtak általában - ilyenkor célszerű olyat választani amit az ember ismer (NumPy, SciPy, R, Octave, Matlab stb...)

Szerintem az optimális megoldás ilyenkor (vagyis inkább: én így szoktam, és nekem beválik): egy referencia/prototype implementáció magasabb szintű nyelven, majd a lassú részek vagy az egész kicserélése C/C++ kódra
Ennek két előnye van:
- Van egy átlátható implementáció, aminek az eredményeihez lehet később mindig viszonyítani (referencia)
- Van rá esély, hogy nem kell megírni a gyorsabb kódot alacsonyabb szinten, mert egyszerűbb mondjuk futtatni pár napig ezt, mint szintén pár napig gányolni a különféle alacsonyabb szintű c/c++ könyvtárakkal, hogy aztán 1-2 óra alatt fusson le...

szerk.: ha kimondottan objc és c++ közötti különbség érdekel, akkor arra mondjuk nem tudok mit mondani...

http://hu.wikipedia.org/wiki/Objective-C
"Az Objective-C egy teljesen objektum-orientált kibővített változata a C programozási nyelvnek. A tervezők a C nyelvhez társították a Smalltalk stílusú üzenetközvetítést az objektumok között. A nyelv leginkább a Mac OS X platform fő programozási nyelve, azon belül is a Cocoa API használja. Olyan Objective-C programokat, amelyek nem használják a Cocoa könyvtárakat, GCC-vel is lefordíthatók gépi kódra."

1. Performancia:
http://cocoamusings.blogspot.com/2008/02/objective-c-performance.html
http://www.vellios.com/2010/08/22/why-game-devs-dont-use-objective-c/
http://www.zedkep.com/blog/index.php?/archives/207-Objective-C-performa…

2. C++ vs ObjC:
http://blog.rootshell.ir/2010/01/comparing-objective-c-versus-c/
http://www.mactech.com/articles/mactech/Vol.13/13.03/CandObjectiveCComp…
http://stackoverflow.com/questions/926728/objective-c-vs-c

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Matematikai dolgok C es/vagy C++, esetleg ha meg teljesitmeny kell es jol parhuzamosithato a feladat CUDA/OpenCL (igaz, ehhez olyan VGA is kell a gepbe) vizualizaciora meg ami jol esik. ObjC ugyanugy jo. Objective-C++ -ban jol ossze lehet mixelni mind3 nyelvet.

ObjC-ben ami lassu az az ObjC-s metodushivas.

(Egyebkent Objective-C a neve)

----------------
Lvl86 Troll

c++

Mert elég magas szintű, hogy ne kelljen biteket faragnod, de elég alacsony szintű, hogy mégis megtehesd, ha nagy ritkán mégis arra van szükség.

A C nyelvnek kb csupán a kernel / firmware / driver fejlesztésnél van létjogosultsága, ott is főként történelmi okok miatt.

A c++ iszonyúan megkönnyíti az életedet a c-hez képest
- class-okkal (objektum orientált szemlélet: egyben kezeljük az összetartozó adatokat, elrejtjük az implementációs részleteket)
- konstruktorokkal (RAII)
- nagyszerű template-s konténer osztályokkal (STL)
- automatikus memória menedzsmenttel (smart_ptr)

Ezek hatalmas előnyök a C-hez képest, ahol struct + függvények infrastruktúrát kapsz csupán.
Minden triviálisnál nagyobb méretű kód esetén ezek igencsak sokat számítanak, mert segítenek modularizálni a kódot, ami a lényeg.

Amire vigyázz: ne ess át a ló túlsó oldalára, az iszonyúan elbonyolított, egzotikus c++ szolgáltatásokat felejtsd el (operator overloading, type traits, functorok stb), amit pl a boost képvisel.

Én is hasonló területen mozgok. Nekem nagyon bejött az opencv, mint segédkönyvtár. Mátrixműveletekhez nagyon jó. C-vel együtt jobban szeretem használni (lévén a C-t sokkal jobban kedvelem), de C++-al is mint osztály használható (cv::). A legújabb opecv, pedig tartalmaz cuda...) támofatást. Openmp-vel, is (ha jól tudom), és pthreaddel is (ezzel én is használtam) jól párhozamosítható átlátható kód írható vele, feltéve ha a probléma is párhuzamosítható.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Köszönöm a válaszokat!

Valószínű elkezdem Objective-C-ben aztán ezt optimalizálom. Ha meg egyáltalán nem megy, akkor majd átírom C++-ba. Jelenleg úgy is maga az algoritmus megtervezése a fontosabb.

--
A lehetetlen csak a lusta ember kifogása!