Ложный обмен - False sharing
Эта статья не цитировать любой источники.Апрель 2010 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В Информатика, ложный обмен это ухудшающая производительность модель использования, которая может возникнуть в системах с распределенными, согласованные кеши размером с наименьший ресурсный блок, управляемый механизмом кэширования. Когда участник системы пытается периодически получить доступ к данным, которые никогда не будут изменены другой стороной, но эти данные разделяют блок кеша с данными, которые находятся При изменении протокола кэширования первый участник может перезагрузить весь блок, несмотря на отсутствие логической необходимости. Система кэширования не знает об активности в этом блоке и заставляет первого участника нести накладные расходы системы кэширования, необходимые для истинного совместного доступа к ресурсу.
Безусловно, наиболее распространенное использование этого термина - в современном мультипроцессор Кеши процессора, куда объем памяти кешируется в линии некоторых небольших сила двух слово размер (например, 64 выровнен, смежные байты ). Если два процессора работают с независимыми данными в одном адрес памяти область, сохраняемая в одной строке, механизмы когерентности кеша в системе могут заставить всю строку пересечь автобус или соединяться с каждой записью данных, вызывая остановку памяти в дополнение к бесполезной трате системы пропускная способность. Ложное совместное использование является неотъемлемым артефактом автоматически синхронизируемых протоколов кеширования и может также существовать в таких средах, как распределенные файловые системы или базы данных, но в настоящее время распространенность ограничена кешами RAM.
Пример
структура фу { int Икс; int y; };статический структура фу ж;/ * Две следующие функции работают одновременно: * /int sum_a(пустота){ int s = 0; за (int я = 0; я < 1000000; ++я) s += ж.Икс; возвращаться s;}пустота inc_b(пустота){ за (int я = 0; я < 1000000; ++я) ++ж.y;}
Здесь, sum_a
может потребоваться постоянно перечитывать Икс
из основной памяти (а не из кеша), хотя inc_b
одновременная модификация y
не должно иметь значения.
внешняя ссылка
- Легкое понимание ложного обмена
- Блог C ++ сегодня, ложный обмен снова ударил!
- Статья доктора Доббса: Устранение ложного обмена
- Будьте осторожны, пытаясь исключить ложное совместное использование в Java
Рекомендации
- Болоски, У. Дж. И Скотт, М. Л. 1993. Ложное совместное использование и его влияние на производительность общей памяти На 4-м симпозиуме USENIX по опыту работы с распределенными и многопроцессорными системами, Сан-Диего, Калифорния, 22–23 сентября 1993 г. Ассоциация USENIX, Беркли, Калифорния, 3–3.