Auf High-Word eines signed long long int zugreifen

Gast #3928985
Lesenswert?

So etwas zu "optimieren" ist bei aktuellen Compilern meist 
Zeitverschwendung ;-)
1
const char *f1(long long foo)
2
{
3
    return foo < 0x1234000000000000ll ? "low" : "high";
4
}
5
const char *f2(long long foo)
6
{
7
    return (long)(foo >> 32) < 0x12340000 ? "low" : "high";
8
}

Gcc (x86/32) erzeugt für f1 und f2 exakt den gleichen Code (mit -O; ohne 
Optimizer ist f1 besser).  Was der Realview daraus macht, musst du 
selbst testen...
#3930283
Lesenswert?

Schwimmbadpinkler schrieb:
> Da will ich hinkommen, das er das schafft. Um jeden Taktzyklus
> kämpfen...

Ich sehe da vier Möglichkeiten (in genau dieser Reihenfolge):
1. Den Verwendeten Algorithmus optimieren (nein, nicht den Vergleich, 
sondern die Dinge die eine oder mehrere Ebenen darüber liegen).
2. Einen Controller mit mehr Bumms verwenden.
3. Die zeitkritischen Dinge von Hand in Assembler programmieren.
4. Stunden damit verbringen Mikrooptimierungen auf C-Ebene 
durchzuführen, die mit der nächsten Compilerversion vermutlich alle über 
den Haufen geworfen werden.
#3947730
Lesenswert?

Schwimmbadpinkler schrieb:
> foobar schrieb:
>> const char *f2(long long foo)
>> {
>>     return (long)(foo >> 32) < 0x12340000 ? "low" : "high";
>> }
>
> Was macht das "low" bzw. "high"?

Für das Ergebnis des Vergleichs. Irgendwas muss ja passieren, wenn die 
Zahl kleiner bzw. größer/gleich ist. foobar hat halt einfach was 
erfunden.

Das du das nicht erkennst, lässt deine Aussage, dass du um jeden 
Taktzyklus kämpfst in einem ganz neuen Licht dastehen. Wieder einer der 
denkt, man könne mit derartigen Mikrooptimierungen (die für die meisten 
Compiler nicht mehr als eine Fingerübung darstellen) ein zu lahmes 
Programm retten.
#3949039
Lesenswert?

Schwimmbadpinkler schrieb:
> Matthias Lipinsky schrieb:
>> Macht er die wirklich, oder schafft er die rechnerisch?
>
> Da will ich hinkommen, das er das schafft. Um jeden Taktzyklus
> kämpfen...

Aber hoffentlich erst, nachdem Du ein vollständiges Programm entwickelt 
hast, welches für all Deine Anwendungsfälle korrekte Ergebnisse liefert. 
Wenn ein solches Programm schnell genug läuft, dann vergiss das "um 
jeden Taktzyklus kämpfen" lieber. Für nicht genutzte Rechenzeit gibt es 
kein Geld zurück.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren