Я нашел документ Intel, в котором говорится, что барьеры памяти требуются, когда используется строка (а не std::string
, но инструкции инструкции сборки), чтобы предотвратить их переупорядочение CPU.Достаточно ли протокола MESI, или еще существуют барьеры памяти? (Процессоры Intel)
Однако существуют ли барьеры памяти, когда два потока (на двух разных ядрах) получают доступ к одной и той же памяти? Сценарий, который я имел в виду, - это тот, где один из процессоров, которые не «владеют» линией кэша, записывает в эту память, а ядро записывает в свой буфер хранилища (в отличие от его кеша). Для сброса значения из буфера хранилища в кэш требуется барьер памяти, поэтому другое ядро может получить это значение?
Я не уверен, обрабатывает ли это протокол Intel по протоколу MESI?
(то, что я пытался (плохо) объяснить выше, лучше описано в следующей статье, страницы 6-12):
http://www.puppetmastertrading.com/images/hwViewForSwHackers.pdf
выше документ является очень общим, и я не уверен, как Процессоры Intel практически справляются с этой проблемой.
Я думаю, вы говорите об улучшенной функции «rep movs» от IvyBridge (ERMSB). Он использует слабо упорядоченные записи, но вам не нужны барьеры, если вы не копировали вручную. (см. мой ответ) –