powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что быстрее? (битовый вектор либо массив)
20 сообщений из 20, страница 1 из 1
Что быстрее? (битовый вектор либо массив)
    #33701051
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что на ваш взгляд будет работать быстрее (получение значения 0 или 1)?
1) реализация в виде битового вектора int vector;
извлечение флага №5 будет такая
(1 << 5) & vector

2) реализация в виде массива byte[32] vector
извлечение флага № 5 будет такая:
vector[5]
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701066
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это так критично?

Скорее всего второй вариант будет быстрее, т.к. нет дополнительных операций. А битовые массивы - это для оптимизации использования памяти...
И неплохо бы прогнать тест для сравнения...
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701075
Nahel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На мой взгляд все будет зависиьт от компилятора
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701084
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я пишу на java, но это не столько критично сколько интересно :)
у меня возникли несколько предположений, например, если флаги хранить в битовом векторе какого то числа - то число в кеше - собственно операции быстрее, а если флаги хранить в массиве - то выборка из памяти..
(могу ошибаться)
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701096
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageя пишу на java, но это не столько критично сколько интересно :)
у меня возникли несколько предположений, например, если флаги хранить в битовом векторе какого то числа - то число в кеше - собственно операции быстрее, а если флаги хранить в массиве - то выборка из памяти..
(могу ошибаться)

Даже при 64K кэше данных 32-х-байтный массив может храниться там довольно долго :)
Хотя однозначно сказать трудно, вообще вопрос аппаратно-зависимый.
А в случае с Java - JVM ещё может вмешаться
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701135
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что, vector&32 - не судьба?

IMHO, если алгоритм таков, что стоит задумываться об оптимизации таких вещей, то лучше переписать на ASM под конкретный процессор - точно будет быстрее.
Иначе, операция 1<<5 будет незаметна на фоне всего кода.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701154
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saintIMHO, если алгоритм таков, что стоит задумываться об оптимизации таких вещей, то лучше переписать на ASM под конкретный процессор - точно будет быстрее.
Иначе, операция 1<<5 будет незаметна на фоне всего кода.

И я того же IMHO :)

Но ведь автор написал, что
unicornmirage это не столько критично сколько интересно
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701176
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saintа что, vector&32 - не судьба?


нет, потому что фактически используются все биты числа в качестве хранения флагов.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701191
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage saintа что, vector&32 - не судьба?


нет, потому что фактически используются все биты числа в качестве хранения флагов.

Дело в том, что vector&32 == (1 << 5) & vector :)
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701204
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>нет, потому что фактически используются все биты числа в качестве хранения флагов

и в чем проблема?
как по вашему? для (1<<5)&flags другие флаги не мешают, а 32&vector мешают?
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701231
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. unicornmirage saintа что, vector&32 - не судьба?


нет, потому что фактически используются все биты числа в качестве хранения флагов.

Дело в том, что vector&32 == (1 << 5) & vector :)

ну я уже понял что 32 - это 100000 :)
но ведь задача не ограничена выборкой только лишь флага №5! в качестве хранения флагов используются все 32 бита числа.. и интерес представляет именно что эффективнее с т.зрения производительности - хранить 32 флага в числе либо использовать массив.

в яве скорость критична - она чуть медленнее си. я понимаю что оптимизация - враг хорошего и нужно оптимизировать алгоритмы.. у меня алгоритм связан с большими вычислениями больших таблиц содержащих в столбцах - 32 флага а в строках - значения этих флагов.

так вот если флаги хранить в битовом векторе - таблицу можно представить в виде массива int[] vectors
чтобы извлечь значение флага из таблицы из строки 10 флаг №5 делаю операцию
Код: plaintext
1.
2.
3.
 int row =  9 ;
 int flagNumber =   5 ;
 int flagValue =  1  << flagNumber & (vectors[row]);

во втором случае реализация была бы другой
Код: plaintext
1.
2.
3.
 int row =  9 ;
 int flagNumber =   5 ;
 int flagValue = vectors[row][flagNumber];

я давно не програмировал на асме и на си - поэтому наверное отвык немного от таких нюансов - уверен они должны существовать. :)
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701259
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохо бы для сравнения прогнать пару тестов на больших объёмах данных...
Но если это только часть алгоритма, то такая оптимизация может быть и не очень заметной... В целях оптимизации нужно весь алгоритм пересматривать на предмет поиска "узких мест"
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701271
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый человек.
Во-первых JAVA значительно медленней C.
Во-вторых, в вашем конкретном случае
int flagValue = 1 << flagNumber & (vectors[row]);
будет давать в рамках всего процесса значительный прирост производительности даже с учетом битового сдвига.
Тк, в случае увеличения объема данных в 32! раза Вы увеличиваете число циклов обращения к основной памяти минимум в 32! а то и больше раз. А теперь сравните частоты своей системной шины и частоту процессора, на которой работает Ваш кеш.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701297
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saintДобрый человек.
Во-первых JAVA значительно медленней C.
Во-вторых, в вашем конкретном случае
int flagValue = 1 << flagNumber & (vectors[row]);
будет давать в рамках всего процесса значительный прирост производительности даже с учетом битового сдвига.
Тк, в случае увеличения объема данных в 32! раза Вы увеличиваете число циклов обращения к основной памяти минимум в 32! а то и больше раз. А теперь сравните частоты своей системной шины и частоту процессора, на которой работает Ваш кеш.

здОрово! именно это мне хотелось наверное и услышать.. спасибо.

что касается явы - это я переборщил конечно же :)
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33701354
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33702514
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageну я уже понял что 32 - это 100000 :)кто такой программист ? это человек, искренне верящий, что 32 это 100000 ! :)
unicornmirageв качестве хранения флагов используются все 32 бита
u> числа.. и интерес представляет именно что эффективнее с
u> т.зрения производительности - хранить 32 флага в числе
u> либо использовать массив.Мое маленькое ИМХО состоит в том, что процессор оперирует байтами, словами, двойными словами ... и ему всяко проще проводить операции именно с ними.
К тому же - это сейчас 32 флага - всё просто, а потом будет 33 и что тогда ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33702626
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Karabas:
ГЫ.. а еще он оперирует 32,64,80 битными float, может будем в них флаги хранить? а шо, это удобно, myflag=float_flags ; if(myflag>1) Do();
работать конечно будет медленней и памяти жрать, зато если вдруг все перейдут на аналоговые процессоры, будет проще код портировать.

насчет "с байтом проще" вы не правы.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33702714
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас
К тому же - это сейчас 32 флага - всё просто, а потом будет 33 и что тогда ?

согласен, я не против универсальности - но она нужнакогда неизвестные граничные условия задачи. если же граничные условия существуют - лучше реализовать задачу именно в рамках их. в моем случае врядли наберется больше чем 16 флагов - и в необозримом будущем может тоже. поэтому посчитал что 32 - вполне подойдет.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33702720
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saintto Karabas:
ГЫ.. а еще он оперирует 32,64,80 битными float, может будем в них флаги хранить? а шо, это удобно, myflag=float_flags ; if(myflag>1) Do();
.


я может не понял до конца Вашу мысль - но я под "флагом" имел ввиду просто какое то состояние объекта (к примеру в той же Java) а не как флаги процессора.
...
Рейтинг: 0 / 0
Что быстрее? (битовый вектор либо массив)
    #33702850
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>я может не понял до конца Вашу мысль - но я под "флагом" имел ввиду просто какое то состояние объекта (к примеру в той же Java) а не как флаги процессора.

я имел ввиду то же самое.

по теме, ориентируйтесь на мой пост на 12:02.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что быстрее? (битовый вектор либо массив)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]