ExpertiDict

C++ · Avançado · Inglês · Técnico

false sharing

fɔːls ˈʃɛɚ.ɪŋsubstantivo

Perda de desempenho quando threads diferentes escrevem em variáveis independentes que ficam na mesma linha de cache. O hardware invalida a linha entre os núcleos, sem haver dados realmente compartilhados.

Onde usar

Aparece em contadores por thread guardados em um array, que não escalam com o número de núcleos. A correção é alinhar ou preencher cada item para ocupar a própria linha de cache, em geral de 64 bytes.

Em código

struct alignas(64) Contador {
  std::atomic<long> n{0};
};
Contador c[4];  // 1 linha de cache cada
// sem alignas, c[0] e c[1] dividem linha

Exemplos

The per-thread counters suffer from false sharing.

Os contadores por thread sofrem de false sharing.

Pad each counter to 64 bytes to avoid false sharing.

Preencha cada contador até 64 bytes para evitar false sharing.

Cuidado

Não é data race: o código está correto, apenas lento, e só medir mostra o problema.

Sinônimos

compartilhamento falso

Veja também

Todos os termos de C++