170 похожих чатов

Есть идеи, как соптимизировать? void transform_linear(uint64_t block[8]) {

uint64_t res[8];
fill_with(res, 0); // заполняет нулями
for (int bit = 0; bit < 64; ++bit) {
for (int i = 0; i < 8; ++i) {
res[i] ^= ((block[i] >> (64 - bit - 1)) & 1) * l_matrix[bit];
}
}
copy_block(block, res); // копирует res в block
}
l_matrix[i] почти случайное

14 ответов

24 просмотра

1. Поставь оптимизацию О2. Посмотри на ассемблер. Потом замени bit и int на unsigned, потому что они очевидно unsigned. std::move блок вместо копирования(не знаю уж как на стеке, но че нить такое), Переверни цикл наизнанку, то есть для каждого i сразу проводи 64 операции умножения не пересчитывая и не перетаскивая из другой возможно части памяти инфу по 64 раза

лубая возня с битами, это либо готовые (заранее) таблицы смотри любой CRC либо работа с целыми интами\байтами за раз, чтоб убрать итерацию хотябы по битам в байте

Dmitriy [Отпуск]
move для 8 интов?

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

Pablo-K Автор вопроса
Kelbon
псевдомув какой то чтобы не было копирования вообщ...

Скалярное произведение строчки матрицы на двоичный вектор

Kelbon
псевдомув какой то чтобы не было копирования вообщ...

Здесь копирование - вообще последнее, что подлежит оптимизации. Солидарен с @KoynovStas

Надеюсь, в copy_block находится memcpy?

Pablo-K Автор вопроса
Stas Koynov
лубая возня с битами, это либо готовые (заранее) т...

Где можно почитать, как таблички эти делают?

Pablo-K Автор вопроса
Pablo K
Где можно почитать, как таблички эти делают?

берёшь все возможные варианты своей ебанины прогоняешь по твоему алгоритму записывая результат и делаешь самую большую и бесполезную таблицу в истории хДД

Pablo-K Автор вопроса
Pablo K
Где можно почитать, как таблички эти делают?

эмм, ну смотри если у тебя есть, итерация по байту(битам байта)! значит ты можешь где-то один раз сделать результат для x байта. их всего 256 штук будет. дальше зная байт, ты знаешь рузультат. говорю попробуй разобрать самый простой табличный црц 8 битный который. а так если возня с битами, то есть книжка: Алгоритмические трюки для программистов 2014 Генри С. Уоррен

Pablo-K Автор вопроса
Stas Koynov
эмм, ну смотри если у тебя есть, итерация по байту...

Да, действительно, протупил. Попробую сделать, спасибо.

Kelbon
псевдомув какой то чтобы не было копирования вообщ...

Кажется, стоит разобраться в мув семантике, а потом давать такие советы

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта