Я работаю в среде с голым металлом и, таким образом, оцениваю производительность на низком уровне. Как я должен ожидать, что два потока на одном ядре будут работать при записи в разные разделы одной и той же строки кэша?
Я несколько новичок в многоядерных/многопоточных архитектурах. Я понимаю, что когда разные ядра выполняют запись в один и тот же кеш, требуются блокировки строк или атомарные операции, чтобы избежать условий гонки. В то же время совместное использование строки кэша между ядрами также создает проблемы с производительностью, такие как ложное совместное использование.
Однако нужно ли мне беспокоиться об аналогичных вещах, когда два потока находятся на одном ядре? Я не уверен, поскольку они используют один и тот же кеш и есть несколько единиц загрузки-хранилища. Например, предположим, что поток 1 записывает в раздел 1 строки кэша в то же время, когда поток 2 хочет записать в раздел 2 строки кэша. Изменяет ли каждый поток только свой собственный раздел строки кэша, или они читают полную строку, изменяют свой раздел и записывают полную строку обратно в кэш? Если последнее, нужно ли мне беспокоиться об условиях гонки или задержке производительности?