Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 5. květen 2009, 12:34:33 Předmět: O pověrách ohledně rychlosti C/C++ |
|
|
Narazil jsem na zajímavý článek, který tak trochu boří mýty o tom, že C/C++ jsou nejrychlejší jazyky pro libovolnou úlohu:
http://scienceblogs.com/goodmath/2006/11/the_c_is_efficient_language_fa.php
V kostce jde o to, že v dnešní době má velký význam optimalizace prováděná překladačem a že programy napsané v C nebo C++ není tak snadné optimalizovat jako jiné jazyky (například Fortran nebo OCaml). _________________ Mám strach |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 5. květen 2009, 16:47:41 Předmět: |
|
|
To sice pravda je, ale vem si, kolik dnesnich prekladacu vyssich jazyku neoptimalizuje tak, jak by mohlo (napr. specificke instrukce a jejich razeni pro danou rodinu procesoru, pouziti vektorovych instrukci, ...). Proto bych se zdrzel obecne formulace, ze dnes majoritne pouzivane vyssi jazyky produkuji optimalizovanejsi kod nez C/C++. (Odkazovany clanek si nemuzu prohlednout, zkousim to 5 minut a furt pise "Spojení se serverem bylo v průběhu načítání stránky ukončeno".) _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 5. květen 2009, 16:58:06 Předmět: |
|
|
Zajimavy clanek. Tohle je dobre vedet, az prijde potreba mit neco ultra optimalizovane..
A je tam i zajimava diskuze (cet jsem ale jen par prvnich prispevku) a mimojine je tam prispevek, ktery to cele zpochybnuje. Asi v tom smyslu, ze kdyz nektery jazyk a kompilator spickove ovladas, ale s ostatnima jazykama jses na tom hur, pak udelas nejaky podobny test, tak je velmi pravdepodobne, ze to vyhraje ten tvuj oblibeny jazyk. Muze na tom byt spousta pravdy.
Co myslite, vyuzil autor moznosti jazyka C/C++ a prislusneho kompilatoru naplno? (na Intelu a v MS VS by to znamenalo treba pouziti Intrinsic instrukci, OpenMP a buhvi jakych dalsich hacku) nebo to nasolichal jen tak obycejne?  _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 5. květen 2009, 17:26:11 Předmět: |
|
|
Diskusi právě teď čtu. Autor tvrdí, že C/C++ ovládá dobře a že ten C kód má opravdu vyladěný. Paralelismus (OpenMP) bych sem asi zatím netahal, tohle je spíš ze sekvenčního světa.
Autor dál v diskusi píše, že ty optimalizace by si mohl taky udělat ručně, zhruba po týdnu intenzivní práce. Ale výsledný kód by byl velmi nepřehledný a tudíž překladač, který to dokáže udělat, určitě přijde vhod. Já osobně s ním souhlasím, jeho myšlenky mi dávají smysl, přestože moc vlastních zkušeností s highlevel kódem nemám.
Dál si myslím, že je opravdu lepší mít (highlevel) jazyk, kterým se dá opravdu vyjádřit to, co chci udělat a ne konkrétní implementační detaily a k němu vychytralý překladač, který to dokáže dobře zoptimalizovat. To, že taková kombinace jazyků pravděpodobně zatím neexistuje je smutné, ale snad se to do budoucna zlepší. C opravdu moc expresivní pro takový úkol není, ale například C++ a Haskell by podle mě na tom už mohly být lépe. _________________ Mám strach |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 5. květen 2009, 19:36:22 Předmět: Re: O pověrách ohledně rychlosti C/C++ |
|
|
Quiark napsal: |
V kostce jde o to, že v dnešní době má velký význam optimalizace prováděná překladačem a že programy napsané v C nebo C++ není tak snadné optimalizovat jako jiné jazyky (například Fortran nebo OCaml). |
To je velmi osidna proklamace. Napr. si autor clanku vystaci s oznacenim "modern architecture" jako platformy na ktere uvazuje rozdily. To je malo! Kompilatory optimalizuji vuci hw a ne vuci nejakemu abstraktnimu pocitaci.
Quiark napsal: |
Dál si myslím, že je opravdu lepší mít (highlevel) jazyk, kterým se dá opravdu vyjádřit to, co chci udělat a ne konkrétní implementační detaily a k němu vychytralý překladač, který to dokáže dobře zoptimalizovat. To, že taková kombinace jazyků pravděpodobně zatím neexistuje je smutné, ale snad se to do budoucna zlepší. C opravdu moc expresivní pro takový úkol není, ale například C++ a Haskell by podle mě na tom už mohly být lépe. |
Co treba llvm [llvm.org] ? Rozdil mezi gcc a clang llvm frontendu je uz ted docela slusny. Krome pypy (ktery zatim kulha) se o jine frontendy nezajimam, ale ocekavam ze se nejake vyviji. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 7. květen 2009, 13:06:09 Předmět: |
|
|
Tak to asi máš nějaké novější benchmarky LLVM ne? Kdybys nějaké měl, pošli link. Podle tohoto je na tom GCC líp.
Nepochybuju o tom, že na kompilaci shaderů a GPU kernelů vyjde LLVM o dost líp. Ale co x86_64 aplikace? _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 7. květen 2009, 21:18:01 Předmět: |
|
|
Eosie napsal: |
Tak to asi máš nějaké novější benchmarky LLVM ne? Kdybys nějaké měl, pošli link. Podle tohoto je na tom GCC líp.
Nepochybuju o tom, že na kompilaci shaderů a GPU kernelů vyjde LLVM o dost líp. Ale co x86_64 aplikace? |
Psal jsem clang a ne llvm-gcc. Schvalne jsem si stahl par testovacich c-ek z http://shootout.alioth.debian.org a pres:
kód: |
#!/bin/bash -e
libs="-lm -lgmp -lpthread"
opts="-I. -O3 -s -fomit-frame-pointer -msse3"
timeit () { /usr/bin/time -f "%e" ./$1 2>&1 > /dev/null; sleep 1;}
for i in *.c; do
gcc $opts $libs $i -o $i.gcc
clang -pipe $opts $libs $i -o $i.clang
#clang-cc $i -O3 -emit-llvm -o - | llvm-as | opt -O3 -std-compile-opts > a
#llvm-ld -native -strip-all $libs -o $i.clang a
echo $i "gcc:" $(timeit $i.gcc) "clang:" $(timeit $i.clang)
done
|
vypadly tyto cisla:
kód: |
bintrees.c gcc: 0.63 clang: 0.73
fannkuck.c gcc: 3.88 clang: 3.48
fasta.c gcc: 1.96 clang: 1.97
mandelbrot_sse3.c gcc: 1.61 clang: 1.68
meteor_contest_c.c gcc: 0.10 clang: 0.15
nbody.c gcc: 2.30 clang: 3.31
nsieve_bits.c gcc: 3.63 clang: 3.71
nsieve.c gcc: 3.67 clang: 3.72
partial_sums_sse3.c gcc: 1.82 clang: 2.39
pidigits.c gcc: 6.27 clang: 6.38
puzzle.c gcc: 7.30 clang: 7.47
recursive.c gcc: 0.01 clang: 0.03
spectral_norm.c gcc: 4.64 clang: 2.87
|
mereno na dell xps m1530, 64bit debian squeeze, llvm i clang aktualni vuci svn a gcc 4.3.3.
a musim rict ze se clang na techto benchmarcich moc neukazal. Na realnych aplikacich mam vuci gcc bezne rozdily kolem 20%. |
|
Návrat nahoru |
|
 |
eMko
Založen: 12. 05. 2009 Příspěvky: 1
|
Zaslal: 12. květen 2009, 22:54:11 Předmět: |
|
|
Sorry za otevírání staré diskuse, na tento thread jsem narazil náhodou googlem. Část zdejší diskuse se týká i toho, zda-li optimalisovanější kód produkují kompilátory vyšších jazyků nebo C/C++.
To zní, jako byste v tomto ohledu házeli jazyky C a C++ do jednoho pytle, což není úplně správně. Jazyk C je jazykem poměrně jednoduchým, kdežto C++ již skýtá spoustu temných zákoutí. Důsledek toho je, že ačkoli kompilátory jazyka C dokáží kód docela slušně optimalizovat (až na MMX instrukce; ty umí použít opravdu málokterý), většina kompilátorů C++ jsou "rády", že dokáží z kódu v C++ správně zpracovat lexikální a sémantickou analýzu. Nějaká optimalizace jde již většinou trošku stranou. |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 12. květen 2009, 22:58:39 Předmět: |
|
|
eMko: No jenže právě o tom je ten článek. C je hrozně nízkoúrovňový jazyk, takže překladač to opravdu dokáže přeložit jen tak, jak to napsal programátor. Zato vyšší jazyky (případ C++ to ale asi nebude, spíš ten OCaml) dovolují popsat problém s více informacemi a tudíž kompilátor může optimalizovat chytřeji (například až na úroveň kódu, který by v ASM vyplodit optimalizační guru). _________________ Mám strach |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 12. květen 2009, 22:59:42 Předmět: |
|
|
Chcel si povedat lexikalnu a syntakticku analyzu. Okrem toho verim, ze uplne kazdy 'vacsi' C++ kompilator je optimalizujuci kompilator. Ale inak mas pravdu. Pre C (cize viac menej pseudo-asm) existuje strasne vela roznych prepracovanych optimalizacii (z ktorych su mnohe jednoduche). Niektore su isto pouzitelne aj pre C++. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. květen 2009, 06:20:26 Předmět: |
|
|
ja nevim - ale rozdil mezi C++ a C teda nevidim - resp. to co lze napsat v C++ lze napsat i v C - akorat je to otravnejsi
spousta featuru C++ je proste syntakticky cukr
nebo se mylim? |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 13. květen 2009, 07:51:35 Předmět: |
|
|
rezna: Tak samozřejmě že všechny jazyky jsou si Turing-ekvivalentní. O tom to ale není. _________________ Mám strach |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. květen 2009, 08:49:14 Předmět: |
|
|
Quiark napsal: |
rezna: Tak samozřejmě že všechny jazyky jsou si Turing-ekvivalentní. O tom to ale není. |
nn ja mel na mysli to ze tu nekdo zminil ze optimalizovat C je snazi jak optimalizovat C++ - a chtel jsem naznacit ze ikdyz pouzivam spoustu advanced featur z C++ daji se ekvivalentne vyjadrit v C (vetsinou jsou to jenom chytrejsi makra ze) a tudiz ze bych nevidel zas az takovy rozdil v te kompilaci - nebo aspon ne tak diametralni |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 13. květen 2009, 08:54:29 Předmět: |
|
|
Mam podobny nazor, C++ kompilator pak musi jeste resit akorat volani metod objektu a vyjimky apod., ale telo metod se da optimalizovat stejne jako v C (a i to volani metod objektu je hodne podobne volani obycejnych funkci). _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 13. květen 2009, 14:32:12 Předmět: |
|
|
prve C++ kompilatory neboli nic ine ako prekladace C++ => C a nasledne ako klasicky C prekladac. ved kazda metoda ma v skutocnosti ako nulty parameter this ako pointer na aktualny objekt. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
|