Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C++ IF mitu tingimust märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 23.06.2011 09:27:27 C++ IF mitu tingimust vasta tsitaadiga

Tere

Kui on soov kokku hoida ressurssi, siis kas on vahet kas kood on
if ( a > 10 && b > 20 &&  c < 10 )

Või

if ( a > 10 )
{
if ( b > 20 )
{
if ( c < 10 )



Ehk kas kompilaator võtab neid tingimusi "järjest" või korraga?

Kui näiteks esimene teingimus (a > 10) hoiab kokku TOHUTULT ressurssi, siis kas on vahet, kas tal on veel tingimusi samas IF'is või peaks eraldi käsud panema?

Loodan, et saate aru. Kui mitte, siis küsige lisaks icon_smile.gif
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Andykas
HV veteran
Andykas

liitunud: 28.08.2004




sõnum 23.06.2011 09:53:54 vasta tsitaadiga

Pole päris 100% kindel aga kompilaatori jaoks pole vahet, ta peaks optimeerima nii-ehk-naa sellist koodi. Kui nüüd mõne disassembleriga seda koodi vaadata siis peaks näha olema, et seal on ikkagi kõik jumpid eraldi välja toodud, seega lõpptulemus on ikkagi see, et on mitu rida erinevaid konditsioone ja jumpe, lihtsalt programmeerijal on kiirem/lihtsam/mugavam defineerida neid ühte if-i.
Kommentaarid: 25 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 23.06.2011 10:02:37 vasta tsitaadiga

Selge. Seda arvasingi. Igaks juhuks vaatan disassembleriga üle, et kas ikka on nii.

Küsisin, sest tean, et interpreteerimismeetodiga ("tõlgendamismeetod" ehk scripting) töötab just niimoodi, et eraldi tingimused on parem/kiirem variant.

_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
t
HV vaatleja

liitunud: 28.06.2010




sõnum 23.06.2011 10:12:05 vasta tsitaadiga

Konkreetselt selles küsimuses on asi keele standardis fikseeritud.
Kui on jõudluse kysimus, siis üldjuhul on ainuõige korraldada katse (benchmark) ja teha mõõtmisi, mitte püüda oletuste pealt arutleda. Samas pädeva katsetuse tegemine ei ole triviaalne.


Avaldise arvutamisest:

When using the logical operators, C++ only evaluates what is necessary from left to right to come up with the combined relational result, ignoring the rest. Therefore, in this last example ((5==5)||(3>6)), C++ would evaluate first whether 5==5 is true, and if so, it would never check whether 3>6 is true or not.

http://www.cplusplus.com/doc/tutorial/operators/
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 23.06.2011 10:50:40 vasta tsitaadiga

Väga hästi. Eks pean debuggima, mis tingimus kõigepealt peaks tulema. Mingi loenduriga peaks see igaljuhul võimalik olema.

Suured tänud kiirete vastuste eest.

_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 23.06.2011 12:46:45 vasta tsitaadiga

&& puhul käiakse nkn kõik if'i elemendid läbi kuna sa ise nõuad seda, || puhul vaid niipalju kui vaja. See peaks igas kompileerijas/keeles kehtima optimeerimimse eesmärgil.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 23.06.2011 13:29:27 vasta tsitaadiga

&& puhul ei pea ju kõiki elemente läbi kontrollima, sest kui juba üks tingimus ei kehti, siis pole ju vaja ka edasi liikuda.
|| puhul samuti - kui juba üks tingimus kehtib, siis pole vaja järgmisi kontrollida.
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Ohohh
Kreisi kasutaja
Ohohh

liitunud: 13.09.2003




sõnum 23.06.2011 13:50:07 vasta tsitaadiga

Seda, kas tehted tehakse kõik ära või ainult niipalju kui vaja, on väga lihtne kontrollida. Selleks ei pea midagi asmis debugima hakkama
if (foo() && bar()) {
}
Kui foo tagastab false, siis vaatad, kas läheb bar'i sisse või mitte.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 23.06.2011 14:08:30 vasta tsitaadiga

Nja... loogiline... peaks ise selliste asjade peale tulema icon_razz.gif

Igal juhul. Kõigile suured tänud abistamise eest. Eks katsetan nüüd edasi iseseisvalt icon_smile.gif
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 23.06.2011 14:46:39 vasta tsitaadiga

lkits, pidasin silmas kõikide läbi kontrollimise all seda et senikaua kuni if'i läbimine võimalik on. Mitteläbiva tingimuse korral peatatakse edasine kontrollimine tõesti.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 25.06.2011 23:09:24 vasta tsitaadiga

Huvi pärast küsin mida see kood sul teeb et niivõrd oluline on tingimuslausete optimeerimine?

Kui nende puhul tahad maksimaalset jõudlust siis oleks kõige mõistlikum teha feedback'il põhinevat optimeerimist. Tean, et nii GCC kui ICC seda toetavad kuid hetkel paraku ei meenu mis parameetritega ning mis selle asja õige nimi oli icon_razz1.gif Igatahes ideeliselt nägi asi välja sedasi, et kompileerid oma programmi ära teatud võtmetega, lased sellel joosta näidisandmete peal ning tekitada koodi täitmise kohta logifailid mille kompilaatorile ette söödad teistkordseks kompileerimiseks. Sellise info järgi saab kompilaator näiteks otsustada millises järjekorras võiksid olla nood if lause tingimused et kõige vähem branch mispredictioneid tekiks lisaks ka posule muudele võimalikele optimeerimistele.

Aga loomulikult enne kui nii low-level asja juurde minna tasuks väga sügavalt järgi mõelda kas optimeerimisel üldse mingi mõte on ning kas asjale lähenetakse õigest suunast. Mina isiklikult pole senise poole elu jooksul progemisel veel kordagi kohanud kus peaks hakkama tingimuslauseid ümber kirjutama kiiruse taga ajamiseks ning ma ei saa väita nagu poleks mul vaja olnud üpriski performance-critical kraami kirjutada.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 26.06.2011 00:36:36 vasta tsitaadiga

No juhul, kui ühe tingimusega loetakse miljoneid mälu aadresse läbi, siis on vast ikka vaja neid filtreerida...
_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 26.06.2011 08:21:57 vasta tsitaadiga

lkits kirjutas:
No juhul, kui ühe tingimusega loetakse miljoneid mälu aadresse läbi, siis on vast ikka vaja neid filtreerida...
Sõltub. Räägi veidi täpsemalt mis on sisendid, mis soovitud väljundid ja mis algoritme kasutad. Raudselt annab asja kõvasti kiirendada enne tingimuslausete kallale minekut.
_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 26.06.2011 08:26:10 vasta tsitaadiga

Kindlasti annab, aga sain teada, mis soovisin icon_smile.gif Las ülejäänu olla nii nagu on.
_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 26.06.2011 08:27:30 vasta tsitaadiga

lkits kirjutas:
Las ülejäänu olla nii nagu on.
Kurb, just mõtlesin et täna miskit eriti tarka teha pole ja väike ajugümnastika halba ei teeks icon_smile.gif
_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 26.06.2011 12:17:13 vasta tsitaadiga

lkits kirjutas:
Kindlasti annab, aga sain teada, mis soovisin icon_smile.gif Las ülejäänu olla nii nagu on.
Aga tegelikult oleks ju äge, kui sa oma avastusi ka siin jagaksid. Huvi juba kütsid üles poistel ja jätsid nüüd kuivale. icon_razz.gif
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ohohh
Kreisi kasutaja
Ohohh

liitunud: 13.09.2003




sõnum 27.06.2011 03:04:07 vasta tsitaadiga

Te proovite mõelda olukorda keerulisemaks, kui see tegelikult on.

Kui ma õigesti aru saan, siis lkits'il on lihtsalt kaks kontrollitavat tingimust, kus üks on ressursinõudlik ja teine väga kiire. Tema küsimus seisnes selles, et kui ta paneb need ühte if'i järjest, et kas ta saab kindel olla, et keerulisemat ei hakta kontrollma, kui lihtsam annab juba negatiivse.

if (a>b && mingiKeerulineAsi()) {
}

Kus "mingiKeerulineAsi" võib olla näiteks päring andmebaasi poole, mida ei ole vaja hakata tegema, kui a<=b.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C++ IF mitu tingimust
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.