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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.