Wozu braucht man Integerberechnungen?

Felixxz21

Lt. Commander
Registriert
Sep. 2007
Beiträge
1.532
Hallo,

ich hab mir mal wieder ne Frage über den Aufbau von CPUs gestellt.
Intel CPUs sind ja u.a. aufgrund der 4. Integer Pipeline schneller als ein Phenom II und das in den verschiedensten Anwendungen.

Aber wozu braucht man eigentlich Integerberechnungen in wirklich leistungsfähigen Anwendung, wie sie in Benchmarks vorkommen? Ich mein man kann ja nur ganze Zahlen darstellen, das ist doch viel zu ungenau.

Gerade bei Spielen oder auch MPEG kann man doch mit Integer nicht viel anfangen oder seh ich das falsch?

mfg
 
Als Programmierer kann ich dir sagen, dass sich Ganzzahlige berechnungen mit Gleitkomma (Double oder Float) ziemlich die Waage halten. Einfach schon deshalb weil der Computer oft verschiedene Befehle x mal ausführt und dies ist immer eine Ganze Zahl.
 
Ok, das ist ne Erklärung. Aber der FPU wurde doch in den letzten Jahren eher wenig Beachtung geschenkt, die Int Einheiten wurden/werden aber aufgebohrt. Gibts da ne Tendenz?

Wie kann eigentlich ein Phenom II z.B. 108 GFLOP/s (laut PCGH) haben, wenn er nur 4 FPUs bei 3,2 GHz hat?
 
Felixxz21 schrieb:
Ich mein man kann ja nur ganze Zahlen darstellen, das ist doch viel zu ungenau.

Ich schreibe viel Wissenschaftliche-Software und Finanz-Software. Da brauche ich eigentlich immer Integer berechnungen, da diese genau sind. Gleitkomma-Berechnungen sind viel zu ungenau :-)

Ich wandle Gleitkommazahlen in Integer um und baue mir nach der Berechnung wider eine Gleitkommazahl.

Ich weis nun nicht genau wie das bei Multimedia-Anwendungen ist, aber ich kann mir vorstellen, das aufgrund der Performance und genauigkeit auch dort, wenn möglich auf Integer zurückgegriffen wird.

Siehe auch :
http://de.wikipedia.org/wiki/Gleitkommazahl#Eigenschaften_einer_Gleitkommaarithmetik
 
Sämtliche speicheroperationen beruhen auf Integer Berechnungen
also wenn du zum Bsp. in einen Array auf das 10 Element zugreifst, nimmst du die Startadresse und addierst 10 x größe der Elemente dazu
-> voila Lauter Integer Berechnungen......

D.h. die werden viel mehr verwendet als es im code offensichtlich ist weil vieles davon der Compiler für dich erledigt.
 
Im Prinzip ist doch alles in der CPU auf Ganzzahlen ausgelegt. Geht schon beim Binärsystem los.

Früher wurden sogar nur Ganzzahlen verwendet bis schließlich der Co-Prozessor kam. Dieser konnte dann Kommazahlen schneller verarbeiten weil er genau darauf ausgelegt war.

In Benchmarkt für CPUs werden auch oft Berechungen angestellt die auf Ganzzahlen basieren. Zum Beispiel die Primfaktorberechnungen. Kommazahlen sind IMHO erst bei grafischen Darstellungen wichtig, und da setzt ja schon die GPU ein. Das ist auch mit ein Grund warum Videoencoder auf GPUs viel schneller laufen als auf CPUs. Natürlich auch wegen der Parallelisierung.
 
Ich gehe mal davon aus du redest von Intel Quadcore CPUs.

Teilen sich die 4 Kerne die Pipelines oder hat jeder Kern eigene?
 
Naja aber nehmen wir z.B. mal Crysis. Wenn ich dort ein Haus zerschieße und z.B. eine Wasserflsche wegfliegt (das wär so ne typische Spiele Anwendung also Physik) und ich die Formel mit Int berechne weicht doch die Flugbahn sehr deutlich von einer echten Flugbahn ab, bei so einem kleinen Objekt könnte das sichtbar sein.
Oder auch in Crysis bei der Rauchberechnung. Oder wird das tatsächlich alles mit Int Zahlen gemacht und die sehr geringe Genauigkeit fällt nicht auf. Das wär so ein Beispiel wo ich mich das frage.

Bei professionellen Sachen ists natürlich klar, da FP immer nur eine Näherung ist.
 
Die Genauigkeit kommt im wesentlichen auf die Speicher-Größe an, 128bit-Int sind aufgrund ihres größeren Bereiches genauer als z.B. 32bit-float.
 
Felixxz21 schrieb:
Naja aber nehmen wir z.B. mal Crysis. Wenn ich dort ein Haus zerschieße und z.B. eine Wasserflsche wegfliegt (das wär so ne typische Spiele Anwendung also Physik) und ich die Formel mit Int berechne weicht doch die Flugbahn sehr deutlich von einer echten Flugbahn ab, bei so einem kleinen Objekt könnte das sichtbar sein.
Oder auch in Crysis bei der Rauchberechnung. Oder wird das tatsächlich alles mit Int Zahlen gemacht und die sehr geringe Genauigkeit fällt nicht auf. Das wär so ein Beispiel wo ich mich das frage.

Bei professionellen Sachen ists natürlich klar, da FP immer nur eine Näherung ist.



wieso?

ob du jetzt 1,1111111112 hast oder 11.111.111.112 ändert ja nichts an der genauigkeit
 
Felixxz21 schrieb:
Wie kann eigentlich ein Phenom II z.B. 108 GFLOP/s (laut PCGH) haben, wenn er nur 4 FPUs bei 3,2 GHz hat?
Die FPUs können mehrere Operationen gleichzeitig ausführen, Stichwort SIMD.
Hab jetzt auf der schnelle keine genauen Infos bezüglich der Phenom Architektur gefunden, aber oft sind für Addition und Multiplikation getrennte Einheiten vorhanden.
 
im digitalen Bereich (Video etc.) hat man öfter "nur" ganze Zahlen, man hat ja bei nem MP3 384kbit und nicht 383.234. Auflösungen usw. es gibt schließlich auch nur ganze Pixel und keine 1.394 Pixel.
Beim programmieren mit Schleifen greift man eigentlich immer auf ganze Zahlen zurück, da man sonst Probleme mit Abbruchkriterien bekommen kann.

Also sie haben durchaus ihren Sinn & Zweck
 
Knuddelbearli schrieb:
wieso?

ob du jetzt 1,1111111112 hast oder 11.111.111.112 ändert ja nichts an der genauigkeit

Rechne mal 0,1 in Dual um.
Komma oder nicht Komma ist ein Riesenunterschied.
 
Der Unterschied zwischen ganzen und reellen Zahlen liegt nicht in der Genauigkeit. Mathematisch betrachtet sind reelle Zahlen natürlich schon genauer, aber darauf kommt es beim PC nicht an, da er keine unendlich langen Zahlen berechnen kann. Daher ist ein 32bit float ungenauer als ein 128bit float, die Zahl ist einfach um einiges kürzer. Die Zahlen (32 bzw. 128) stehen ja für Stellen im Binärsystem.

Jede ganze Zahl ist auch reelle Zahl. Pi und 3,00000000 sind beides reelle Zahlen.
Der Unterschied ist lediglich die Stellung des Kommas, dieses kann man bei jeder endlichen reellen Zahl solange verschieben, bis alle Nachkommastellen "0" sind. Also bei 0,0000251 würde man dann 251,0 schreiben.

Dabei geht zwar die Stetigkeit von R flöten, aber digital bedeutet ohnehin "nicht stetig". Der PC arbeitet nur diskret. ("stetig bedeutet ohne "Sprünge", "diskret" bedeutet mit "Sprüngen") Das ganze kommt aus der Funktionenlehre.
http://de.wikipedia.org/wiki/Stetigkeit

Bei den meisten Zahlen, die man z.B. für Flugbahn- oder Wachstumsberechnung braucht, handelt es sich um "transzendente Zahlen", "Pi" oder "e" zB. haben unendlich viele Nachkommastellen, daher kann der Computer diese Zahlen nur annähern. Etwas sehr grob ausgedrückt denkt der PC Pi = 3+x, wobei x meist ein Bruch ist (zb. 1/7, oder 2/15).
Und dabei ist es egal, ob er diese Zahl als Integer mit verschobenem Komma (statt "3, 14"... "314,0"...) oder als float behandelt, denn beides können nur schlechte Annäherungen sein. Da ändert sich auch nichts dran, wenn man statt mit 314,0 mit 31415926,0 rechnet. Der Unterschied ist der gleiche wie zwischen 3,14(...) und 3,1415926(...).
Ein Computer kann ohnehin keinen Kreis im mathematischen Sinn generieren, er konstruiert nur "n-ecke", die einem Kreis nahekommen. Für einen Kreis mit Radius "r" müsste man JEDER reellen Lösung (a,b) von a^2+b^2=r^2 einen Punkt zuweisen, was prinzipiell nicht möglich ist, da diese Lösungsmenge unendlich ist.
Hier benutzt der PC nur eine Teilmenge von reellen Zahlen mit endlich vielen Nachkommastellen, d.h. er schneidet die Zahl nach bspw. 5 Nachkommastellen einfach ab, oder rundet Sie. Je weniger Nachkommastellen berücksichtigt werden, desto größer wird dabei der "Standardfehler", was uns dann an "irgendwie eckigen Rundungen" in einer Grafik auffällt, und bei Spielesoftware zu oft recht starken Nachbearbeitungen (AF, AA usw.) führt. Schau dir Crysis mal ganz ohne an. AF und AA sind unter anderem dafür zuständig, Ecken abzurunden.
 
Zuletzt bearbeitet:
Felixxz21 schrieb:
Naja aber nehmen wir z.B. mal Crysis. Wenn ich dort ein Haus zerschieße und z.B. eine Wasserflsche wegfliegt (das wär so ne typische Spiele Anwendung also Physik) und ich die Formel mit Int berechne weicht doch die Flugbahn sehr deutlich von einer echten Flugbahn ab, bei so einem kleinen Objekt könnte das sichtbar sein.
Oder auch in Crysis bei der Rauchberechnung. Oder wird das tatsächlich alles mit Int Zahlen gemacht und die sehr geringe Genauigkeit fällt nicht auf. Das wär so ein Beispiel wo ich mich das frage.

Bei professionellen Sachen ists natürlich klar, da FP immer nur eine Näherung ist.

Dann rate mal warum Physikberechnungen auf CPUs so träge sind. Die haben für sowas nicht genug Dampf. Vielleicht auch aus dem Grund dass solche Berechnungen mit Gleitkommazahlen stattfinden. Darum macht auch PhysX Sinn.
 
Somit könnte man als Fazit sagen, dass abseits der ganzen Formeln und Algorithmen (-> viel FP), vor allem im Code viel Integer vorkommt.
 
the_nobs schrieb:
Sämtliche speicheroperationen beruhen auf Integer Berechnungen
also wenn du zum Bsp. in einen Array auf das 10 Element zugreifst, nimmst du die Startadresse und addierst 10 x größe der Elemente dazu
-> voila Lauter Integer Berechnungen......

D.h. die werden viel mehr verwendet als es im code offensichtlich ist weil vieles davon der Compiler für dich erledigt.

MacGyver schrieb:
Im Prinzip ist doch alles in der CPU auf Ganzzahlen ausgelegt. Geht schon beim Binärsystem los.

korrekt, die ganze CPU baut auf Integer-Operationen auf.
Habe ich eine Schleife, If-Abfragen usw. das meiste wird auf Ganzzahlen abgebildet und dann für Sprungbefehle genutzt.


Die Software die auf der Basis nachher läuft, von mir aus auch das angesprochene Beispiel der Crysis Physik ist dagegen ein richtig kleiner Teil.
Denn auch die Physik hat noch mehr als genug Kontrollfluss-Operationen (Schleifen, Bedingungen, Sprünge usw)



Bauergiesen schrieb:
Wie genau der Prozessor die Berechnung vornimmt hat doch wohl nicht direkt mit der Programmierung zutun - nur weil man als Variable einen Integer oder einen Float benutzt, muss nicht zwangsläuft als Maschinencode eine Integer bzw Floatberechnung von der CPU geleistet werden...
doch ;)
Gleitkommaoperationen sind viel langsamer als Ganzzahloperationen, von daher wird schon dafür die richtige ALU (Arithmetic Logic Unit) genutzt.
 
Zurück
Oben