Werbeanzeige
Jetzt hast du mich neugierig gemacht.
Bin noch nicht dahinter gekommen, was du mit dem Bit-Scan anstellst![]()
Wie denn? In dem Fall ist eine Zeile 16Bit, das könnte ich notfalls noch als Tabelle abbilden, auch wenn bei Tabellen jenseits der FirstLevelCache-Größe kaum Performance zu erwarten ist. Aber bei 32Bit wüsste ich nicht, wie das in O(1) machbar sein sollte.
Zitat
Übrigens, auch ohne Intrinsics kannst du das doch in O(1) machen, schließlich gibt es ja nur 32 bzw. 64 Bits.
![]() |
C-/C++-Quelltext |
1 2 3 4 |
int main(int _argc, char** _argv) noexcept { asm volatile("lock cmpxchg8b %eax"); return 0; } // ::main |
Hab jetzt mit 2h Zeitaufwand eine Lösung gebastelt, die erstmal eine plumpe Breadth First-Suche über alle Zugmöglichkeiten macht. Damit komme ich schonmal auf 17,5ms für die erste Map und auf 370ms für die dritte Map.
Nur leider ist auch da - prinzipiell bedingt - die Bestimmung des niedrigsten/höchsten Bits eine O(log n)-Operation.
![]() |
C-/C++-Quelltext |
1 2 3 4 5 6 |
int highestBit(uint32_t x) { int result = -1; for(int i = 0; i < 32; ++i) if(x & (1 << i)) result = i; return result; } |
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
[edit]Ok, sorry, BlueCobold hat ja Recht, das ist alles schon deutlich gesagt. Ich baue die Intrinsics aus.
Werbeanzeige