größe des standard-int auf 64bit plattformen



  • Kurze frage primär zu Performance und ggf. zu Stil
    Sollte der standard integer, den man für allgemeine Zwecke benutzt, immer der word-Breite der CPU entsprechen? Gewinne ich bei 64 bit performance mit 64 bit integern? Gibt es Siutationen wo die 4 bytes mehr pro integer detwas verlangsamen?
    Anders gefragt: ist sowas egal, oder gibt es ein paar Richtlinien?

    Disclaimer: ich erhoffe mir nichts von Mikrooptimierungen, es geht nur ums Prinzip.


  • Mod

    Probier es doch an deinem konkreten Problem aus. Kommt auf viele Faktoren an, das kann man nicht allgemein beantworten. Ich würde (ohne konkrete Messungen meinerseits, nur mit allgemeinen Erfahrungen bei ähnlichen Problemen) mal vermuten, dass die meisten Algorithmen mit 32 Bit ints schneller sind.



  • Bei 64bit Integern werden zwar die einzelnen Bits schneller verarbeitet als bei 32bit Integern, trotzdem dauern 64bit Operationen immer noch länger als 32bit.



  • Ethon schrieb:

    Bei 64bit Integern werden zwar die einzelnen Bits schneller verarbeitet als bei 32bit Integern, trotzdem dauern 64bit Operationen immer noch länger als 32bit.

    vermutlich wegen den zusätzlichen 4 byte, oder?



  • Kontrasubjekt schrieb:

    Kurze frage primär zu Performance und ggf. zu Stil
    Sollte der standard integer, den man für allgemeine Zwecke benutzt, immer der word-Breite der CPU entsprechen?

    Ja. Daß auf 64-Bit-Systemen der Standard-int nicht mitgewachsen ist, war einfach eine Fehlentscheidung.

    Kontrasubjekt schrieb:

    Gewinne ich bei 64 bit performance mit 64 bit integern?

    Nein. Die Prozessorbauer hauen genug Transitoren draf, daß das nicht passiert.

    Kontrasubjekt schrieb:

    Gibt es Siutationen wo die 4 bytes mehr pro integer detwas verlangsamen?

    Ja. Beim Dividieren.



  • Vielen Dank.
    Aber wer hat jetzt recht?



  • name



  • Die meisten Operationen sind mit 64 Bit gleich schnell wie mit 32.
    Ausnahme ist ziemlich sicher das Dividieren, und ggf. hat man beim Multiplizieren auch ne etwas höhere Latenz (Throughput sollte IMO gleich sein).

    Soweit nur um nochmal zu bestätigen was eh schon geschrieben wurde.

    Was dann noch nen Unterschied macht: ein 64 Bit Int ist doppelt so gross wie ein 32 Bit Int. D.h. es passen nur 1/2 so viele 64 Bit Ints in den Cache wie 32 Bit Ints. Das kann auch nen spürbaren Unterschied machen.

    Aus genau dem Grund kann es auch Sinn machen Daten als 16 oder sogar 8 Bit Ints abzulegen, selbst wenn das System auf dem das Programm läuft locker genug Speicher für 32 oder gar 64 Bit Ints hätte.


  • Mod

    Um nochmal nachzulegen: Hier gewinnen von der Performance her regelmäßig Siebe des Erastothenes die den berüchtigten vector<bool> benutzen (für nicht C++ler: Der vector<bool> packt die Bools speichersparend in ein Byte) gegen die nativen Datentypen wie vector<int>, obwohl da sehr viele Operationen auf jeden Zugriff kommen. Oder Siebe die so komische Tricks benutzen wie if (wert != 0) wert = 0; Der Algorithmus hat seinen Flaschenhals eben in der Speicherzugriffsgeschwindigkeit. Andere Algorithmen wiederum nicht. Kommt, wie schon gesagt, sehr stark auf den Einzelfall an.


Anmelden zum Antworten