False sharing i array.length.

14 views
Skip to first unread message

Dawid Weiss

unread,
May 9, 2012, 4:21:42 AM5/9/12
to jug-p...@googlegroups.com
Jeszcze jedna notka, która mi wczoraj umknęła.

Wczoraj przy okazji omawiania false-sharing wspomniałem że problemem
jest również bounds-checking (o ile nie zostanie wyeliminowany -- co
ma miejsce w przypadku niektórych pętli). To co wspomniał Stachu
(length jest tylko czytane, więc nie powinno być problemu) jest
prawdą, natomiast jeśli odrobicie zadanie domowe to okaże się, że pole
length dla tablic leży bardzo blisko początkowych elementów... w
związku z tym zaś jeśli wartości w indeksach 0, 1, 2... i inne
początkowe są zapisywane przez jakiś wątek, to inne wątki które
czytają indeksy (nawet te odległe) i robią bounds check będą musiały
zrobić refetch tej linii cache'a na której znajduje się length (bo w
niej siedzą zapisane indeksy 0, 1, 2, ...).

Dla tych, którzy pytali -- projekt disruptor --
http://code.google.com/p/disruptor/

Thread affinity można ustawić przez JNI, np. tutaj jest implementacja:
https://github.com/peter-lawrey/Java-Thread-Affinity

Dawid
Reply all
Reply to author
Forward
0 new messages