Tornar os armazenamentos de memória anteriores visíveis para as cargas de memória subsequentes

Quero armazenar dados em uma grande variedade com_mm256_stream_si256() chamado em um loop. Pelo que entendi, é necessária uma cerca de memória para tornar essas alterações visíveis para outros threads. A descrição de_mm_sfence() diz

Execute uma operação de serialização em todas as instruções de armazenamento em memória que foram emitidas antes desta instrução. Garante que todas as instruções de loja que precedem, em ordem de programa, sejam visíveis globalmente antes de qualquerloja instrução que segue a cerca na ordem do programa.

Mas minhas lojas recentes do segmento atual estarão visíveis para as subseqüentescarga instruções também (nos outros tópicos)? Ou eu tenho que ligar_mm_mfence()? (Este último parece ser lento)

UPDATE: Vi essa pergunta anteriormente:quando devo usar _mm_sfence _mm_lfence e _mm_mfence . As respostas ali se concentram em quando usar a cerca em geral. Minha pergunta é mais específica e as respostas nessa pergunta provavelmente não abordam isso (e atualmente não o fazem).

UPDATE2: seguindo os comentários / respostas, vamos definir "cargas subseqüentes" como as cargas em um encadeamento que subsequentemente recebe o bloqueio que o encadeamento atual contém atualmente.

questionAnswers(2)

yourAnswerToTheQuestion