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

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

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

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

Сообщества

Настроить S2

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



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


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

How efficient is ECS?

Well, we all know that doing

  struct agent_t {
    int guid;
    int type;
    bool is_ally;
    bool is_herbivore;
    ...
  }

Is a really bad idea, since the bools will waste a lot of memory and to do
analytical operations (i.e. listing all matching objects) you have to go through
every object. So even if the struct is heavily packed into a bit stream, and
your CPU has bit unpacking support, it is still super memory intensive.

Now storing separate columns allows packing bools as actual bits.
Therefore ECS reduces the memory requirement to store the same data.

There is of course the question of mapping from, the agent_t.guid to
the bit, when only part of the agents have these field.
That mapping is probably the hardest part about ECS or columnar DBs generally.
But it is solvable with a page table and allocating guids for specific types
in blocks.  Then the lookup comes down to something like:

  uint64_t index = guid - min;
  return index < size ? data[index] : NIL;

Yet since allocation happens in blocks, we can pack adjanced bits with
1d version of a sparse voxel tree. Voila! We have less than 1 bit per field!
It is also possible to iterate over all these items without going through
a huge bit array. I.e. if you allocated 1024 carnivores in a row, you've just
compressed 1024 bits into 1!

Although implementing such trees efficiently is non-trivial and requires
unrolling the recursion. Yet that is probably the most efficient way to
implement set theoretic structures in your program, and games are all about
set theoretic relationships. So it is a core data structure, you have to
implement in the best way possible. And ECS opens a way to do that.


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


[info]ololo
2024-07-23 16:22 (ссылка)
А нахуя весь пост ебашить моноспейсом? Чтобы что?

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


(Анонимно)
2024-07-23 17:27 (ссылка)
Красиво же

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


[info]nancygold
2024-07-23 17:46 (ссылка)
Misha's style

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


(Анонимно)
2024-07-23 21:16 (ссылка)
Stupid... You can't even replicate Misha's style.
Misha ebashit like monospace but without monospace, that's a style.

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


[info]nancygold
2024-07-23 23:28 (ссылка)
compared to Misha I'm not gay

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


(Анонимно)
2024-07-24 00:09 (ссылка)
Are you a homophobe?

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


(Анонимно)
2024-07-24 01:11 (ссылка)
weren't you a lesbian not long ago? changed your mind?

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


[info]nancygold
2024-07-24 11:15 (ссылка)
I like other ts, but they are all poor.
So I'm not rich enough to be a lesbian.

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


(Анонимно)
2024-07-24 03:41 (ссылка)
Чтоб мобильным юзерам с плохим зрением было тяжело.

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