Для древовидного макета, использующего предварительную выборку строки кэша (reading _next_ cacheline
дешево), мне нужно решить вычисление адреса очень быстрым способом. Я смог свести проблему к следующему:
newIndex = nowIndex + 1 + (localChildIndex*X)
x будет, например: X = 45 + 44 + 43 + 42 +4< суп>0.
Примечание: 4 — это коэффициент ветвления. На самом деле это будет 16, так что степень 2. Это должно быть полезно для использования побитового материала?
Было бы очень плохо, если бы потребовался цикл для вычисления X (performancewise
) и таких вещей, как деление/умножение. Это кажется интересной задачей, которую я не смог придумать как-то красиво.
Поскольку это часть обхода дерева, возможны 2 режима: абсолютный расчет, независимый от предыдущих вычислений, И инкрементальный расчет, который начинается с того, что в переменной хранится высокий X, а затем с каждым более глубоким уровнем дерева выполняются некоторые минимальные действия. .
Надеюсь, я смог прояснить, что должна делать математика. Не уверен, что есть способ сделать это быстро и без цикла, но, возможно, кто-то сможет придумать действительно умное решение. Я хотел бы поблагодарить всех за их помощь — StackOverflow был для меня отличным учителем в прошлом, и я надеюсь, что смогу дать больше в будущем, когда мои знания увеличатся.
^
это мощность или xor? - person Mysticial   schedule 03.01.2014X^n + X^(n-1) + ... + X^1 + X^0 = {X^(n + 1) - 1} / {X - 1}
- person Brett Hale   schedule 03.01.2014x
? В противном случае это было бы тривиально. - person   schedule 03.01.2014x
фиксировано, просто рассчитайте один раз и сохраните его. - person Chowlett   schedule 03.01.2014x
является степенью числа 2, то иx^n
тоже. Это просто вопрос установки соответствующего бита в1
... - person Oliver Charlesworth   schedule 03.01.2014