Size: a a a

2020 September 19

AT

Anatoly Tomilov in pro.cxx
в смысле компиляторы с этим нормально справляются
источник

m

magras in pro.cxx
Anatoly Tomilov
там нет циклов
В первом сэмпле был, для обработки 8 битного хвоста.
источник

AT

Anatoly Tomilov in pro.cxx
нет. Там был near jump forward — это почти бесплатно из-за спекулятивного исполнения
источник

m

magras in pro.cxx
magras
В первом сэмпле был, для обработки 8 битного хвоста.
Но в данном случае это не важно. Циклы можно заанроллить. Я про то, что это дополнительный кусок кода в конце основного цикла.
источник

AT

Anatoly Tomilov in pro.cxx
в общем обработка хвоста из (size % 32) бит стоит одного джампа
источник

m

magras in pro.cxx
Anatoly Tomilov
в общем обработка хвоста из (size % 32) бит стоит одного джампа
Это стоит лишнего кода на основном пути исполнения.
источник

AT

Anatoly Tomilov in pro.cxx
если я храню 5kk 20битных битовых масок, то мне уже важно, что там лишние байты тратятся
источник

m

magras in pro.cxx
Anatoly Tomilov
если я храню 5kk 20битных битовых масок, то мне уже важно, что там лишние байты тратятся
Даже если паковать по границе 8 бит, мы будем терять 4 из 24 бит.
источник

AT

Anatoly Tomilov in pro.cxx
magras
Даже если паковать по границе 8 бит, мы будем терять 4 из 24 бит.
это допустимо
источник

m

magras in pro.cxx
Anatoly Tomilov
это допустимо
А почему не допустимо терять 44 бита из 64?
источник

AT

Anatoly Tomilov in pro.cxx
magras
А почему не допустимо терять 44 бита из 64?
потому что 44 / 8 > 0
источник

m

magras in pro.cxx
Я просто к тому, что стандартная библиотека не обязана идеально решать специальные ситуации.
источник

AT

Anatoly Tomilov in pro.cxx
это так. Но казалось бы это не так сложно сделать такую оптимизацию. Просто пыльный уголок библиотеки
источник

AT

Anatoly Tomilov in pro.cxx
Всё-таки тоже начинает казаться, что этот код для обработки хвоста — это слишком много, ради такой оптимизации. Соглашусь с аргументами.
источник

m

magras in pro.cxx
С другой стороны если выбирать блок как размер степени двойки, чтобы блоки были целыми, я бы не протестовал. Что-то вроде:
if bits > 64: uint64_t
if bits > 32: uint32_t
if bits > 16: uint16_t
if bits > 8: uint8_t
источник

AT

Anatoly Tomilov in pro.cxx
да — вот это была бы золотая середина
источник

AT

Anatoly Tomilov in pro.cxx
if bits > 32: uint64_t
if bits > 16: uint32_t
if bits > 8: uint16_t
else uint8_t
источник

m

magras in pro.cxx
Anatoly Tomilov
if bits > 32: uint64_t
if bits > 16: uint32_t
if bits > 8: uint16_t
else uint8_t
Да, как всегда я все напутал. =)
источник

AT

Anatoly Tomilov in pro.cxx
off by power of two error
источник

m

magras in pro.cxx
=)
источник