Size: a a a

pro.graphon (and gamedev)

2020 April 10

AT

Anatoly Tomilov in pro.graphon (and gamedev)
На некоторых процах x86 вроде бы такое было, что инструкции с 8-битными и 32-битными операндами быстрее, чем с 16-битными. Вроде бы даже в boost::variant когда-то видел в коде выбор типа для селектора. Если альтернатив болше 256, то выбирался 32-битный беззнаковый целый. Выбор как раз был продиктован скоростью, кажется.
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
да, было такое :) люди часто брали половинки полных регистров и с ними операции делали
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Вот какие-то бенчмарки у чувака как раз подтверждают https://stackoverflow.com/a/12158486/1430927
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Вообще short типы как-то не встречаются в коде
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Igor Lynn
ну а в чем суть, что это даёт
Меньше лишних обрубаний/растягиваний (хотя, на x86, наверно, не важно, но на PowerPC, вроде, достаточно важно), но при этом и память впустую не расходуется
источник

IL

Igor Lynn in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Меньше лишних обрубаний/растягиваний (хотя, на x86, наверно, не важно, но на PowerPC, вроде, достаточно важно), но при этом и память впустую не расходуется
просто в структрах я обычно предпочитаю чтобы её поля были предсказуемого размера
источник

IL

Igor Lynn in pro.graphon (and gamedev)
Anatoly Tomilov
На некоторых процах x86 вроде бы такое было, что инструкции с 8-битными и 32-битными операндами быстрее, чем с 16-битными. Вроде бы даже в boost::variant когда-то видел в коде выбор типа для селектора. Если альтернатив болше 256, то выбирался 32-битный беззнаковый целый. Выбор как раз был продиктован скоростью, кажется.
вроде и сейчас это есть, только с 64-битными, тип они быстрее
источник

IL

Igor Lynn in pro.graphon (and gamedev)
еще где-то слышал, что декремент бытрее инкремента, или когда-то был
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
это что-то очень платформо-специфическое, если не байка
источник

IL

Igor Lynn in pro.graphon (and gamedev)
та я вот не помню то ли сам декремент, то ли его использование в циклах, например, когда производят сравнение с 0 типа, for (i = N; i != 0; i--)
источник

IL

Igor Lynn in pro.graphon (and gamedev)
мол цпу проще делать сравнение с 0
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
ну тут уже поле для оптимизирующих компиляторов себя показать с циклами :) Duff's device всякие проворачивать
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
я думал, ты про сами инструкции, мол, sub быстрее add :) неправильно понял
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
Igor Lynn
просто в структрах я обычно предпочитаю чтобы её поля были предсказуемого размера
иногда случаются всякие забавные штуки с высокооптимизированным по плюсовым стандартам кодом, например, в ассемблере происходит register spill в неудобном месте (заканчиваются регистры, чтобы выполнить сходу какое-то действие, и ими уже надо жонглировать), или внутренний кеш какой-то переполняется, потому что выбран странный размер шага (stride) по данным... это два разных мира и их лучше не смешивать %)
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
... это я к тому, что, например, ожидаемый размер данных в структуре не будет автоматически приводить к быстрому ассемблерному коду -- если такие задачи, то надо их решать, и не все решения будут красивыми в плюсах
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
Anatoly Tomilov
На некоторых процах x86 вроде бы такое было, что инструкции с 8-битными и 32-битными операндами быстрее, чем с 16-битными. Вроде бы даже в boost::variant когда-то видел в коде выбор типа для селектора. Если альтернатив болше 256, то выбирался 32-битный беззнаковый целый. Выбор как раз был продиктован скоростью, кажется.
Из битового вектора, кстати, вытаскивание меньше операций требует, если его как u32[] или u64[] хранить
источник

VK

Vitaliy ◀️TriΔng3l▶️ Kuzmin in pro.graphon (and gamedev)
16 не смотрел, с 8 больше
источник

IL

Igor Lynn in pro.graphon (and gamedev)
Pavel Kazakov
иногда случаются всякие забавные штуки с высокооптимизированным по плюсовым стандартам кодом, например, в ассемблере происходит register spill в неудобном месте (заканчиваются регистры, чтобы выполнить сходу какое-то действие, и ими уже надо жонглировать), или внутренний кеш какой-то переполняется, потому что выбран странный размер шага (stride) по данным... это два разных мира и их лучше не смешивать %)
так шаг по данным же вроде всегда один, word / double word, не?
источник

IL

Igor Lynn in pro.graphon (and gamedev)
или это что-то другое
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
забыл название кеша, который переполняется -- это важное слово >_< и нет, не в этом дело
источник