Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет nancygold ([info]nancygold)
@ 2024-07-25 23:40:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: amused
Entry tags:computing

Packing bits harder

In previous posts ChatGPT recommended me the hashmap approach.
But it came out to be slow.
The issue boiled down to the https://nothings.org/stb_ds/
Which I use, since it is public domain and good enough.
It is open hashing, but isn't template.
And it also maintains a separate search index.
Such search makes the use easier.
I.e. no need for nil keys and no gaps between elements.
But it is it is not optimal.
So I quickly put together my own hashmap.
And it came to be 2/3 faster.
Apparently one can also dynamically pick a hash function,
depending on bit patterns.
We can change hash function on every growth event.
And as long as keys are below 32bit, we don't need 64bits

In addition to ranges, one can use an actual bitmap.
Then the speed becomes passable.
Hashmap use appears to be mandatory to handle overly sparse cases.
Alternative to hash map would be page table + 1st page offset.
But can grow too large for the 64bit address space.
Hashmap doesn't have such vulnerability.

There is another issue.
Bitmaps fail at moderately sparse data.
Consider 256 bit pages, where bits 0 and 255 are set.
In that case we have to allocate all the bits between them.
Just to store these bits!
People solve that by storing the first 32 bits as bytes.
And more that 32 bits as a bitmap.
Binary search is used to find a byte among these 32.

3rd issue are the degenerate pages, where just a range of bits is set.
These we can store as range or as a special smart bitmap.
For very small bitmaps we can use immediate value.
Instead of allocating memory.

There is no general silver bullet algorithm.
Implementing bitmaps is about doing case analysis.
And then handling each case separately.


Also, while researching a faster way to search for a byte index
among 32bytes, I found that one can do SIMD without SSE,
with a 64bit CPU:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>

uint64_t clear_byte(uint64_t value, uint8_t target) {
  // Step 1: Broadcast the target byte to all byte positions
  uint64_t broadcast = target * 0x0101010101010101ULL;

  // Step 2: XOR the broadcasted value with the original value
  uint64_t xored = value ^ broadcast;

  // Step 3: Create a mask to clear the matching bytes
  uint64_t mask = (xored - 0x0101010101010101ULL)
                & ~xored
                & 0x8080808080808080ULL;

  // Step 4: Isolate each byte
  mask = (mask >> 7) * 0xFF;

  // Step 5: Clear the matching bytes
  return value & ~mask;
}

bool has_byte(uint64_t value, uint8_t target) {
  // Step 1: Broadcast the target byte to all byte positions
  uint64_t broadcast = target * 0x0101010101010101ULL;

  // Step 2: XOR the broadcasted value with the original value
  uint64_t xored = value ^ broadcast;

  // Step 3: Check if any byte is zero
  uint64_t result = (xored - 0x0101010101010101ULL)
                  & ~xored
                  & 0x8080808080808080ULL;
  return result != 0;
}

int main() {
    uint64_t value = 0x1234567890abcdefULL;
    for (int i = 0; i < 256; i++)
      if (has_byte(value, i)) printf("has byte 0x%02x\n", i);

    printf("cleared 0x90: %llx\n", clear_byte(value, 0x90));
    return 0;
}


(Добавить комментарий)

typos
(Анонимно)
2024-07-26 00:27 (ссылка)
"Therefore it is not optimal slow." "a hash functions" "a actual bitmap."

(Ответить) (Ветвь дискуссии)

Re: typos
[info]nancygold
2024-07-26 00:41 (ссылка)
dank u wel

(Ответить) (Уровень выше)

Re: typos
[info]necax
2024-07-26 06:17 (ссылка)
an hero

(Ответить) (Уровень выше)


(Анонимно)
2024-07-26 00:53 (ссылка)
По субжу: Толк то от этого упражнения есть в плане производительности vs byte addressed loops?

(Ответить) (Ветвь дискуссии)


[info]nancygold
2024-07-26 11:26 (ссылка)
Well, using a hashtable to map uint64_t ids to pages of 64 bits (i.e. uint64_t) is 3 slower than using a larger bitmap, but faster than the 16bit binary tree the roaring bitmaps use. I think 64bits gets processed really fast, relatively to the cost of loading a new part of hashtable into cache.

And roaring bitmaps were made handle multi gigabyte datasets efficiently with a limited memory amount, so not optimal for smaller real-time usage, like in video games.

(Ответить) (Уровень выше)


(Анонимно)
2024-07-26 03:05 (ссылка)
Математикам пришла пизда btw:

https://deepmind.google/discover/blog/ai-solves-imo-problems-at-silver-medal-level/

(Ответить) (Ветвь дискуссии)


(Анонимно)
2024-07-26 07:16 (ссылка)
не математикам, а "олимпиадникам"
две разные вещи вообще

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2024-07-26 08:59 (ссылка)
калоедин пидарас

(Ответить) (Уровень выше)


(Анонимно)
2024-07-26 09:18 (ссылка)
это cope. Когнитивно разницы между золотомедальными олимпиадниками и выдающимися математиками особо не должно быть, ибо большое кол-во условных Терресов Тао было золотыми медалистами. Станет ли золотой медалист также изобретателем красивых Гротендик-стайл теорий, трансформирует ли он себя в это состояние, это вопрос импринтинга и озабоченности, т.е. файнтюнинга, если перенести на язык AI моделей. Важна problem solving capability per unit of time.

Потом тут есть другой аспект -- гига-AI может просто высрать пруф размером в 10 мегабайт логики первого порядка (уже сейчас это не так, и он срет достаточно короткими пруфами на lean), что будет проверенно чекером, но никто нихуя не поймет что там внутри. Надежда Вербита на то, что именно так и будет, и останется роль математиков придумывать красивые доказательства для людей, большие идеи (или по крайней мере вычленять их из AI) останется за людьми. Но это ложная надежда, ибо модель можно тренировать специально на understandability by humans, succinctness, elegance, "mathematical beauty". Точно так же как модели примерно знают что такое красивая женщина с большими сиськами, так же они будут знать что люди понимают под математической красотой.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2024-07-26 11:05 (ссылка)
А что если пруф будет с размером, не способный вместить даже вселенная. Тогда никакие вербицкие не спасут.

Даже на всякую ерунду пруфы иногда разрастаются почти до размеров целых книг.

(Ответить) (Уровень выше)


(Анонимно)
2024-07-26 11:07 (ссылка)
Сратькоф, ты такие задачи соннету скармливал? Пока что лучший ИИ в таком роде по мнению юзеров.

(Ответить)


(Анонимно)
2024-07-26 12:38 (ссылка)
How did you do the colored text here? That's an amazing piece of work!

(Ответить) (Ветвь дискуссии)


[info]nancygold
2024-07-26 13:04 (ссылка)
1. The site supports a limited set of HTML tags
2. Thanks!

(Ответить) (Уровень выше)