Битовая операция и строгий ализинг
Я пытаюсь написать несколько высокопроизводительных функций для операций на основе битов, использующих преимущества новейших аппаратных средств. Проблема, с которой я сталкиваюсь:
Я хочу включить операцию побитового подсчета, в этом случае я использовал Intel SSE4.2
«s popcnt
которые принимают только целочисленные значения.
Хотя, если мне нужно выполнить другие побитовые логические операции, то AVX
поддержка побитовых логических операций шириной 256 бит VORPD
(вместо SSE2
128-битные логические операции шириной в бит), но только для плавающих данных.
В сочетании с фактом побитовой настройки / сброса, char является самым быстрым, поэтому мне могут понадобиться как минимум три типа указателей, указывающих на одни и те же области памяти: тип символа, длинный длинный (64-разрядное целое число для оптимального побитового подсчета) и плавающий тип указатели, однако сосуществование указателей типа Integer и плавающего типа нарушает правила строгого наложения имен.
Любое предложение обойти это? Благодарю.
Ты используешь gcc
или же clang
или что-то подобное ведет себя? У них есть __attribute__((__may_alias__))
обойти эти проблемы.
Других решений пока нет …