ПрограммированиеФорумОбщее

Применение битовых масок (2 стр)

Страницы: 1 2 3 Следующая »
#15
17:24, 31 июля 2025

Zab
> Загрузка в регистр стоит значительно дороже, чем арифметические операции.
Из иммедиата? Аналогично самым быстрым арифметическим операциям.
Вот если грузить по адресу — могут быть варианты.

#16
18:53, 31 июля 2025

Zab
> Маски это дорого, на самом деле. Процессоры так устроены, что с константами на них работать дорого, а в масках как раз константы.
что за ерунду ты несёшь? В масках данные, которые проверяются на "константы". Где эти константы спокойно подменяются на обычное число, в случае необходимости.

#17
18:59, 31 июля 2025

Zab
> Маски это дорого, на самом деле. Процессоры так устроены, что с константами на них работать дорого, а в масках как раз константы.
Под константами подразумеваеется то что мы объявляем под "const"?
Ну тогда, получается, я правильно делаю что константами не пользуюсь в принципе. :)

#18
19:59, 31 июля 2025

Вы ни на ассемблере, ни в кодах никогда не программировали, что ли? Константы про которые я говорил, это не константы языка высокого уровня, это значения, прописанные в коде программы. Большинство простых операций в регистрах осуществляются за один тик, заполнение регистра из оперативной памяти - минимум 6 тиков. Многие вещи распараллеливаются, потому изъятие кода из памяти практически не в счет, оно предсказуемо в большинстве случаев изымается заранее, пока идет работа над предыдущими операциями, но с константами это не так.

#19
21:31, 31 июля 2025

Zab
> потому изъятие кода из памяти практически не в счет
Большинство битовых констант — это, внезапно, код.

На самом деле, если арифметики много и данные в L1, то даже чтение из памяти — практически бесплатно, ибо занимает другие порты и выполняется параллельно с арифметикой.

#20
22:35, 31 июля 2025

Zab
> заполнение регистра из оперативной памяти - минимум 6 тиков.
в корне не верное заявление. Вот если бы ты написал что "может занимать до 6 тиков" - это совершенно другой разговор.

#21
22:48, 31 июля 2025

MikeNew
> Ну тогда, получается, я правильно делаю что константами не пользуюсь в принципе.
нет ни чего ни правильного, не ни правильного в том, что ты не используешь константы.

  Под константами понимается очень многое: обычные числа - которые ты вставляешь в код, перечисления - им автоматически значения присваиваются и другое.

  Если ты не используешь константы, то (как я думаю) тебе сложно будет подружиться с масками. Потому что именно с именованными константами пользуются зачастую в масках (реже - перечисления, но там тоже выставляют значения, чтоб понимать, к чему это относится).

#22
3:32, 1 авг 2025

Mirrel
> Потому что именно с именованными константами пользуются зачастую в масках (реже - перечисления, но там тоже выставляют значения, чтоб понимать, к чему это относится).
Я, наверное, как-то не так представляю себе работу с масками.
Можно пожалуйста какой-нибудь небольшой код, где видно что с масками надо использовать именно константы?

#23
5:11, 1 авг 2025

MikeNew
> Можно пожалуйста какой-нибудь небольшой код, где видно что с масками надо использовать именно константы?

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
commandList->ClearDepthStencilView(
    dsvHandle,
    D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL,
    1.0f, 0, 0
);
#24
7:11, 1 авг 2025

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

#25
7:20, 1 авг 2025

}:+()___ [Smile]
> Большинство битовых констант — это, внезапно, код.
Учитывай, что константы обычно хранятся не в том сегменте, где команды, и предварительная выборка для них не работает.
В некоторых системах команд ты можешь запихнуть константы в последовательность команд, но делать ты это будешь сам, в кодах или на ассемблере, компиляторы такой код не порождают. x86 - не из таких систем команд, там это сделать вряд ли выйдет.

#26
9:10, 1 авг 2025

Zab
> компиляторы такой код не порождают
:facepalm:

Открой для себя godbolt, там можно предметно посмотреть, что порождают, а что — нет.

#27
10:49, 1 авг 2025

skalogryz
> glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

К этому ещё можно добавить как они объявлены:

// AttribMask
  GL_CURRENT_BIT                    = $00000001;
  GL_POINT_BIT                      = $00000002;
  GL_LINE_BIT                       = $00000004;
  GL_POLYGON_BIT                    = $00000008;
  GL_POLYGON_STIPPLE_BIT            = $00000010;
  GL_PIXEL_MODE_BIT                 = $00000020;
  GL_LIGHTING_BIT                   = $00000040;
  GL_FOG_BIT                        = $00000080;
  GL_DEPTH_BUFFER_BIT               = $00000100;
  GL_ACCUM_BUFFER_BIT               = $00000200;
  GL_STENCIL_BUFFER_BIT             = $00000400;
  GL_VIEWPORT_BIT                   = $00000800;
  GL_TRANSFORM_BIT                  = $00001000;
  GL_ENABLE_BIT                     = $00002000;
  GL_COLOR_BUFFER_BIT               = $00004000;
  GL_HINT_BIT                       = $00008000;
  GL_EVAL_BIT                       = $00010000;
  GL_LIST_BIT                       = $00020000;
  GL_TEXTURE_BIT                    = $00040000;
  GL_SCISSOR_BIT                    = $00080000;
  GL_ALL_ATTRIB_BITS                = $000FFFFF;

из чего видим, что выборка идёт именно из битов.

#28
14:38, 1 авг 2025

MikeNew
> Под константами подразумеваеется то что мы объявляем под "const"?
То, что мы объявляем под "const" имеет значение только для твоего компилятора, чтобы он предупредил тебя, где ты сам себе противоречишь
На реальный сгенерирированный код это почти никогда не будет влиять, как минимум потому, что есть const_cast

MikeNew
> правильно делаю что константами не пользуюсь в принципе
Заявление в духе "правильно делаю, что не пользуюсь ремнями безопасности"... Ну, дело твоё - отладкой твоего кода потом ведь не мне заниматься придётся.

#29
22:29, 12 авг 2025

Битмаски в тайлмапах

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.