 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70801.66
|
Objavljeno: Tor Maj 30, 2006 8:56 am Naslov sporočila: C kviz |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Maj 30, 2006 9:47 am Naslov sporočila: |
|
|
Pri velikih vrednostih *p pride do preliva. |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70801.66
|
Objavljeno: Tor Jun 06, 2006 7:44 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Jun 06, 2006 10:35 am Naslov sporočila: |
|
|
Ali ni bolj enostavno, če je na začetku p določen kot int *p namesto volatile *p?
Jur |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Jun 06, 2006 1:30 pm Naslov sporočila: |
|
|
Tip long je koliko bitov?
jur, to je samo za demo primere. Lokalna kopija potem ni potrebna (je pa definitino odvisno od arhitekture procesorja in prevajalnika). |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Tor Jun 06, 2006 4:19 pm Naslov sporočila: |
|
|
Eh, enak problem je z vsemi tipi spremenljivk, katerih velikost se razlikuje od arhitekture do arhitekture. |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70801.66
|
Objavljeno: Tor Jun 06, 2006 9:34 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Jun 07, 2006 2:15 pm Naslov sporočila: |
|
|
Arhitektura procesorja ima lahko negativne vplive. Enkrat sem popravljal program, ki je lepo deloval čez 10 let. Po tem pa so prešli na nov sistem. Program so prevedli in je lepo deloval. Vsakih nekaj dni pa je fatalno crknil.
Pokazalo se je, da je program napisala ena ženska, ki ni obvladala programiranja. Ko je bilo potrebno ugotoviti ali je ima kakšen podatek od osmih vrednost nič, je vse skupaj zmnožila in pogledala, ali je produkt nič, namesto da bi uporabljala logični test za posamezne vrednosti (if a=0 then ...). Problem je bil v tem, da je program 10 let tekel na 36 bitni machini. Po tem pa so prešli na 32 bitno arhitekturo. Pri nekaj milijonih množenj na dan se je na nekaj dni slučajno pojavil produkt, ki je presegel zmogljivost nove arhitekture in compilerja.
Jur |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Sre Jun 07, 2006 2:35 pm Naslov sporočila: |
|
|
jur je napisal/a: |
....Pokazalo se je, da je program napisala ena ženska, ki ni obvladala programiranja. Ko je bilo potrebno ugotoviti ali je ima kakšen podatek od osmih vrednost nič, je vse skupaj zmnožila in pogledala, ali je produkt nič, namesto da bi uporabljala logični test za posamezne vrednosti (if a=0 then ...).... |
Zakaj praviš da ni obvladala programiranja? Če je program dobro tekel 10 let, na tisti arhitekturi kot je bilo predvideno, potem je verjetno vedela kaj je delala.
Sicer se mi pa zdi ta rešitev z množenjem kar fajna/elegantna. |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Sre Jun 07, 2006 2:45 pm Naslov sporočila: |
|
|
Mare, arhitektura ima lahko zelo neposreden vpliv, pa se tega sploh ne zavedaš.
Določene arhitekture omogočajo izvajanje različnih operacij med pomnilniškimi lokacijami kar neposredno. To pomeni, da bi lahko atomična operacija, kot je množenje, za argumente vzela tisti dve vrednosti kamor kaže kazalec, ju zmnožila in vrnila rezultat brez problemov.
No, v tem primeru smo v forumu, ki je namenjen ARM arhitekturi, in to kar si napisal kot rešitev drzi oz. volatile ne sodi zraven. Torej, kdaj lahko pričakujemo novo vprašanje (preden zadidemo mimo s temi posti)?
Moj point je samo v tem, da čeprav nekdo piše v Cju, še ne pomeni da na arhitekturo lahko malce pozabimo (sizeof in pa big/little-endian anyone?). |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Jun 07, 2006 2:53 pm Naslov sporočila: |
|
|
mujo je napisal/a: |
Zakaj praviš da ni obvladala programiranja? Če je program dobro tekel 10 let, na tisti arhitekturi kot je bilo predvideno, potem je verjetno vedela kaj je delala.
Sicer se mi pa zdi ta rešitev z množenjem kar fajna/elegantna. |
Za ugotavljanje ničle je množenje slaba metoda. Porabi bistveno preveč procesorja, še posebej če so ničle med podatki redke. Ker je bil prej omenjeni 36 bitni sistem večuporabniški, je množenje zaviralo vse uporabnike. V programu je bilo tudi cel kup drugih hudih napak, tako da se ga je napisalo na novo. Dal sem ga samo za primer, kako lahko arhitektura nategne človeka.
Videl sem tudi en program (baza podatkov), ki je iskal lastnosti objekta po bazi, ki je imela okoli 250000 objektov. Ko je programer pri iskanju v bazi našel iskano stvar, jo je iskal še naprej do konca. In to za vsak slučaj ponovil še 250000 krat. Iskanje je tako trajalo okoli 24 ur. Ko smo na hitro popravili program je naredilo obdelavo prej kot v 10 minutah. To sicer z arhitekturo nima zveze, je pa lep primer do it yourself programiranja.
Jur
Nazadnje urejal/a jur Sre Jun 07, 2006 3:10 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70801.66
|
Objavljeno: Sre Jun 07, 2006 3:02 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Sre Jun 07, 2006 3:15 pm Naslov sporočila: |
|
|
mujo je napisal/a: |
Zakaj praviš da ni obvladala programiranja? Če je program dobro tekel 10 let, na tisti arhitekturi kot je bilo predvideno, potem je verjetno vedela kaj je delala.
Sicer se mi pa zdi ta rešitev z množenjem kar fajna/elegantna. |
Najbrz zato, ker - tako kot omenjena zenska - nisi nikoli od blizu videl primerjave casa izvajanja sedmih mnozenj (upam si trditi, da doticno racunalo ni imelo vektorskega procesorja, pa tudi ce bi ga imel, bi se lazje in hitreje izvedel primerjavo dveh vektorjev [ena operacija], kot pa mnozil v nekaj iteracijah [log2 stevila argumentov operacij]) v primerjavi z osmimi logicnimi operacijami. Tudi ce odmislis bounds checking, kar vcasih res ni bilo "popularno" (danes te pa posledica tovrstne brezbriznosti se vedno tepe vsakic, ko se kaksen inovativen spyware/malware vgnezdi v tvoj racunalnik), ga ni komercialnega racunalnika na svetu, ki bi izvedel omenjeno mnozenje hitreje/ucinkoviteje, kot edino pravilno operacijo v opisanem primeru.
Ce je sadila take umotvore po programu, je sploh nenavadno, da ni se kje drugje naletela na tezave (recimo ze kar pri sestevanju/odstevanju, kjer se hitro pojavi problem, ce se zanasas na velikost in obliko stevilskih tipov, potem pa program prestavis na drugo arhitekturo). |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Jun 07, 2006 3:22 pm Naslov sporočila: |
|
|
@MarE69: Verjetno je to to:
Although the return value of 'malloc(0)' is a valid pointer, once you cast it to a 'char *', you cannot dereference it because it does not point to a character.
@Sokrat: Ženska je sama priznala, da nima dosti pojma o programiranju. Zato je klicala naokoli na pomoč. Da je bistvo problema v bitnosti računalnika pa je spregledalo kar nekaj ljudi.
Jur |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Sre Jun 07, 2006 3:39 pm Naslov sporočila: |
|
|
jur je napisal/a: |
Za ugotavljanje ničle je množenje slaba metoda. Porabi bistveno preveč procesorja, še posebej če so ničle med podatki redke. Ker je bil prej omenjeni 36 bitni sistem večuporabniški, je množenje zaviralo vse uporabnike. V programu je bilo tudi cel kup drugih hudih napak, tako da se ga je napisalo na novo. Dal sem ga samo za primer, kako lahko arhitektura nategne človeka.
|
To da množenje 8mih števil porabi več procesorja, kot preverjanje vsakega števila posebej, nisem vedel. Se bo treba malo poglobit v procesorske arhihekture... |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|