Zapobiegaj ustawianiu wartości początkowej przez std::vector

1

std::vector(10) nie tylko inicjuje, ale także ustawia wartość domyślną. (Nie mogę znaleźć zbyt wiele dokumentacji na ten fakt btw. Link do cppreference czy coś takiego?)

Nie jest to mądry ruch w programowaniu wielowątkowym na maszynie wielogniazdowej, ponieważ wiąże całą pamięć z pierwszym gniazdem. W przypadku tablic w stylu C, osobno malloc i ustawiam wartości domyślne dla wątków, dzięki czemu pamięć jest ładnie powiązana z gniazdami wątków. To znacznie zmniejsza opóźnienia wynikające z koherencji NUMA.

Jaki jest najprostszy sposób na posiadanie std::vector, który tylko alokuje? Czy muszę napisać kompletny alokator? Wydaje się zniechęcające.

5

Można wiedzieć jak to jest, że jednocześnie chcesz

  1. nie powiązać pamięci z jakimś jednym rdzeniem
  2. mimo wszystko trzymać jeden wielki vector?

A nie możesz mieć zwyczajnie thread_local vectorów, z których każdy jest używany w tym wątku co trzeba?

Tak czy inaczej, bez dodatkowego backgroundu, nie obejdzie się.

3

Z tego co zrozumiałem z tej łamanej polśzczyzny to autor tematu chce mieć wektor i operować na nim bez synchronizacji.
Jest to jak najbardziej możliwe z tym że trzeba zapewnić aby każdy wątek działał na własnym fragmęcie tegoż wektora.

0

ie tylko inicjuje, ale także ustawia wartość domyślną. (Nie mogę znaleźć zbyt wiele dokumentacji na ten fakt btw. Link do cppreference czy coś takiego?)

Nie jest to mądry ruch w programowaniu wielowątkowym na maszynie wielogniazdowej, ponieważ wiąże całą pamięć z pierwszym g appvalley niazdem. W przypadku tablic w stylu C, osobno malloc i ustawiam wartości domyślne dla wątków, dzięki czemu pamięć jest ładnie powiązana z gniazdami wątków. To znacznie zmniejsza opóźnienia wynikające z koherencji NUMA.

Jaki jest najprostszy sposób na posiadanie std::vector, który tylko alokuje? Czy muszę napisać kompletny alokator? Wydaje się zniechęcające.
issue got solved

1 użytkowników online, w tym zalogowanych: 0, gości: 1