Как я понимаю вещи, для perfromance на системах NUMA, есть два случая, чтобы избежать:NUMA система, виртуальные страницы и ложный обмен
- нити в том же сокете запись на одной и ту же строку кэша (обычно 64 байт)
- нити из разных гнезд, пишущих на одной и той же виртуальной страницы (обычно 4096 байт)
простой пример поможет. Предположим, что у меня есть две системы сокетов, и каждый сокет имеет процессор с двумя физическими ядрами (и двумя логическими ядрами, то есть без гиперпотока Intel или двух ядер AMD на модуль). Позвольте мне одолжить биграмма на OpenMP: for schedule
| socket 0 | core 0 | thread 0 |
| | core 1 | thread 1 |
| socket 1 | core 2 | thread 2 |
| | core 3 | thread 3 |
Так на основе случая 1, лучше избегать, например, нить 0 и поток 1, записывающие в одну и ту же строку кэша, и на основании случая 2 лучше избегать, например. thread 0 writing to the same virtual page as thread 2.
Однако мне сообщили, что на современных процессорах второй вопрос больше не вызывает беспокойства. Нити между сокетами могут эффективно записываться на одну и ту же виртуальную страницу (если они не записываются в одну и ту же строку кэша).
Действительно ли дело два больше не проблема? И если все еще проблема, для чего это правильная терминология? Правильно ли назвать оба случая своего рода ложным обменом?
Ваш источник для «Я был проинформирован»? – timday
@timday, это в комментариях здесь. У меня нет системы NUMA. Я знаю только то, что я читаю, и из того, что я прочитал, случай 2 все еще применяется, но теперь я не знаю. –
opps ... Я имею в виду в комментариях здесь http: // stackoverflow.ком/вопросы/21741802/почему-бы-распараллеливание-понижени производительности так резко/21748825 # 21748825 –