Frage

Ich habe mich gefragt, welche Integer oder Float-Typen sind die schnellsten ..
Ich dachte Byte schneller als ganze Zahl ist, weil es einen kleineren Bereich hat.
Einige Leute haben mir gesagt .. dass in einigen Fällen ganze Zahl ist schneller als ein Byte.

zweite Frage:
Die GPU ist auf dem Weg zur Weltherrschaft ..
so fragte ich mich: Kann ein Double „schneller“ als ein Integer .. wegen der FPU
also wo sind die Experten? :)

War es hilfreich?

Lösung

Sie haben über mehr als die Taktzyklen denken Arithmetik durchzuführen. Man könnte sagen, dass zwei Ints Zugabe so viele Zyklen dauert, das Hinzufügen von zwei Doppel nimmt so viele Zyklen etc. aber das ist nicht relevant sein können. Wenn alle Daten zur gleichen Zeit in der Cache passen, dann einzelne Operationen Timing macht Sinn. Aber wenn nicht, die erforderliche zusätzliche Zeit aufgrund eines Cache-Fehl den Unterschied in einzelnen Operationen dominiert. Manchmal mit kleineren Datentypen arbeiten, ist schneller, weil es den Unterschied zwischen Haben macht etwas aus dem Cache zu ziehen oder nicht, oder auf der Festplatte zu gehen oder nicht.

In diesen Tagen Computer verbringen die meiste Zeit um Daten zu bewegen, nicht Arithmetik zu tun, auch in Zahlknirschens Anwendungen. Und das Verhältnis des ersteren zum letzteren steigt. Sie können nicht einfach vergleichen zum Beispiel die benötigte Zeit Shorts gegen verdoppelt sich vermehren. Sie könnten, dass bei zwei Versionen des Programms finden, eine Version läuft schneller auf ein kleines Problem und die andere Version läuft schneller auf einem größeren Programm, die alle wegen der relativen Effizienz der Arten von Speicher.

Andere Tipps

  

Ich dachte Byte ist schneller als ganze Zahl, weil sie einen kleineren Bereich hat.

Etwas, was ich erlebt habe: eine short mit gab mir einen Leistungseinbruch während nur gut war, einen int verwenden. Dies liegt daran, kurze Hosen der Regel nicht auf die Architektur existieren. Sie sind Convenience-Typen. Der Prozessor arbeitet tatsächlich mit seiner Wort-Größe. In meinem Fall war das Wort Größe des einen int. Also, wenn ein kurzen Zugriff, hatte es zunächst den Wert in einem int zu packen, mit ihnen arbeitet und dann auspacken und mir das Ergebnis in kurzem erhalten. All dies zu einem Leistungseinbruch geführt. Also, kürzer ist nicht unbedingt besser.

Es hängt von nicht von databits in der Architektur. Der Gleitkomma-Prozessor wird float behandeln und gleich verdoppeln, wenn Berechnungen zu tun. Sie sind beide mit 80-Bit-Genauigkeit ausgewertet und werden daher die gleiche Menge an Zeit in Anspruch nehmen. Laden und die Werte in die FPU Register Speichern könnte einen Unterschied machen. Doppel nimmt doppelt so viel Platz im RAM und könnte daher langsamer Cache-Misses fällig. Auffällige, wenn Sie große Arrays, die Sie indizieren neigen zufällig.

Auf der CPU-Ebene gibt es kein Bytes, nur Worte, die sind 32-Bit oder 64-Bit-heutzutage. Recheneinheiten sind in der Regel fest verdrahtet mit Wort-sized Zahlen (oder größer ist, im Fall von Gleitkomma) zu behandeln.

So kann der Einsatz von Typen kleiner als ein Wort in Bezug keinen Geschwindigkeitsvorteil ist Operationen Arithmetik, und es kann eine Geschwindigkeit Strafe, weil Sie, um zusätzliche Arbeit tun müssen, um Typen zu simulieren, die die CPU nicht nativ haben, z.B. ein einziges Byte in den Speicher zu schreiben erfordert, dass Sie zuerst das Wort lesen es Teil, ändern sie ist, und sie dann wieder schreiben. Um dies zu vermeiden, die meisten Compiler tatsächlich ein vollständiges Speicherwort für alle kleineren Variablen verwenden, so dass selbst eine boolean Variable nimmt 32 oder 64 Bit.

Wenn Sie jedoch eine große Menge an Daten, wie zum Beispiel ein großes Array, dann kleinere Typen verwendet, wird in der Regel eine bessere Leistung liefern, weil Sie weniger Cache-Misses haben werden.

Die Byte-Länge von numerischen Typen hängt von der Sprache und manchmal auch die Plattform, die Sie verwenden. Zum Beispiel in Java sowohl int und float Einsatz 4 Bytes, so sollte die Verarbeitungszeit gleich sein. Es würde mich überraschen, aber, dass mehr Arten verarbeitet schneller. Wenn es Beweise dafür ist, würde Ich mag über ihn lesen.

über die man schneller ist, integer oder Byte, solange sie beide in das Register passen arbeiten sie die gleichen oder zumindest ohne messbaren Unterschied.

über integer vs.double: Kann sein GPU tut schnelle Arithmetik mit Doppel dann regelmäßig cpu, aber ich bezweifle es tut doppelte Rechen schneller als integer, da Integer-Arithmetik nur arithmetics registriert ist

.

Die größte Optimierung Übergang von geschleift Skalare Berechnungen verwenden, Vektor-Berechnungen zu verwenden. Dann nutzen Sie GPU oder CPU SSE.

Nun, solange Sie Vektor-Optimierungen nicht tun können Sie ganze Zahlen so groß wie Ihre Register (32/64 Bit) ohne tatsächliche Leistungseinbußen verwendet werden.

Gleitkommazahlen sind ein bisschen anders: Während CPUs für Doppel optimiert sind, GPUs in der Regel mit Schwimmern arbeiten

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top