.[ ČeskéHry.cz ].
O pověrách ohledně rychlosti C/C++
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Novinky / Zprávičky
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

PříspěvekZaslal: 5. květen 2009, 12:34:33    Předmět: O pověrách ohledně rychlosti C/C++ Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 5. květen 2009, 16:47:41    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 5. květen 2009, 16:58:06    Předmět: Odpovědět s citátem

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? Wink
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 5. květen 2009, 17:26:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 5. květen 2009, 19:36:22    Předmět: Re: O pověrách ohledně rychlosti C/C++ Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. květen 2009, 13:06:09    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 7. květen 2009, 21:18:01    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
eMko



Založen: 12. 05. 2009
Příspěvky: 1

PříspěvekZaslal: 12. květen 2009, 22:54:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 12. květen 2009, 22:58:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 12. květen 2009, 22:59:42    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 13. květen 2009, 06:20:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 13. květen 2009, 07:51:35    Předmět: Odpovědět s citátem

rezna: Tak samozřejmě že všechny jazyky jsou si Turing-ekvivalentní. O tom to ale není.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 13. květen 2009, 08:49:14    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 13. květen 2009, 08:54:29    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 13. květen 2009, 14:32:12    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Novinky / Zprávičky Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna