Битовые операции на большом количестве байтов - PullRequest
4 голосов
/ 10 июля 2011

Выполняю некоторые упражнения с простым шифрованием / дешифрованием файлов, и в настоящее время я просто читаю несколько байтов и выполняю соответствующие битовые операции с каждым байтом по одному, а затем записываю их в выходной файл.

Этот метод кажется довольно медленным.Например, если я хочу XOR для каждого байта по 0xFF, я бы зацикливался на каждом байте и XOR по 0xFF, а не совершал какую-то магию, и каждый байт быстро выполнялся бы XOR.

Существуют ли лучшие способы выполнениябитовые операции, а не байт за раз?

Ответы [ 2 ]

7 голосов
/ 10 июля 2011

Использование операций побитового массива из numpy может быть тем, что вы ищете.

3 голосов
/ 10 июля 2011

Несмотря ни на что, кажется, что каждый байт должен быть

  • считан из памяти,
  • изменен каким-то образом и
  • записан обратно впамять.

Вы можете сэкономить бит (без каламбура) времени с помощью , работая с несколькими байтами за раз , например, выполнив операцию XOR для 4 или даже8-байтовые целые числа, следовательно, деление служебной информации, связанной с управлением циклом, на примерно , с коэффициентом 4 или 8, но это улучшение, скорее всего, не приведет к значительному увеличению общего алгоритма.

Дополнительные улучшения можно найти, заменив «родные» битовые операции (XOR, Shift, Rotations и т. П.) Процессора / языка, читая предварительно вычисленные значения в таблице.Однако помните, что эти нативные операции обычно довольно оптимизированы, и что вы должны быть очень прилежны при разработке эквивалентных операций извне и точно измерять относительную производительность этих операций.

Редактировать: К сожалению, я только что отметил тег [Python], а также ссылку на numpy в другом ответе.
Осторожно ... хотя предложение по битовому массиву Numpy правдоподобно, все зависит от фактических параметров рассматриваемой проблемы.Например, значительное количество времени может быть потеряно при выравнивании базовых массивов, подразумеваемых побитовой функцией numpy.См. Этот вопрос переполнения стека , который представляется весьма актуальным.Сосредоточив внимание на операции XOR, этот вопрос предоставляет довольно много полезных советов как для улучшения циклов и т. Д., Так и для профилирования в целом.

...